; 平成２３年度春　図形の回転
; 連続する 16 語に格納した 16 × 16 ドットの白黒の図形を，
; 時計回りに 90 度回転する 副プログラム ROTATE である。
; 図形の回転の実行例を図１に示す。
; このとき，１ドットを１ビットで 表し，
; 白は０，黒は１が格納されている。
;----------------------
;図形の問題のときは、CASL2 Visible Insideの
;設定を変更するとたいへんわかりやすく
;たのしい表示になります。メインメニュの
;「表示」--> 「表示スタイルの選択」
;--> 「メモリ領域の表示スタイル」を 1と0の表示スタイルから
;黒丸白丸の表示スタイルに変更します。
;白丸はゼロビット、黒丸は１ビットを表しています。
;その後アセンブルします。
;メモリのZUKEI領域に漢数字の「五」が見えます。
;実行するとメモリのKAITENZ領域に、
;９０度右回転した漢数字の「五」が現れます。
;-------------------------------
;(1) 図形を表す 16 語の先頭アドレスは GR1 に設定されて，
;     主プログラムから渡される。
;----------
;(2) 回転した結果の図形を格納する領域の先頭アドレスは
;    GR2 に設定されて， 主プログラムから渡される。
;----------
ROTATE  START
	LAD GR1,ZUKEI
	LAD GR2,KAITENZK
;-----------
	RPUSH
  LD GR3,=16
LOOP1 LD GR4,=16
	LD GR5,GR2
; GR5 ← 結果の領域のアドレス
	LD GR6,0,GR1
; GR6 ← 元の図形の先頭語の内容
LOOP2 LD  GR7,0,GR5
; GR7 ← 結果の領域の１語の内容
	SRL    GR7,1
;+++++++++++++++++++++++++++++
  SLL    GR6,1 ;変更前の行
;	SRL GR6,1 ;変更後の行
;+++++++++++++++++++++++++++++
;最下段の説明もお読みください。
;---------------
  JOV    ON
  JUMP   CONT
ON   OR GR7,=#8000
CONT ST GR7,0,GR5
; 処理した１語を結果の領域に格納
	LAD GR5,1,GR5
	SUBA   GR4,=1
  JNZ    LOOP2
	LAD	GR1,1,GR1
  SUBA   GR3,=1
  JNZ    LOOP1
  RPOP
  RET
ZUKEI DC #FFFC
	DC #FFFC
	DC #FFFC
	DC #0700
	DC #0700
	DC #0700
	DC #FFFC
	DC #FFFC
	DC #FFFC
	DC #071C
	DC #071C
	DC #071C
	DC #FFFF
	DC #FFFF
	DC #FFFF
	DC #0000
KAITENZK DS 16
  END
;-------------------------------------
;画面右側、最下段に「自動スクロール」の設定ボタンがあります。
;「メモリ」のチェックをはずしてください。そうすると、
;メモリ領域のラベル KAITENZK の領域に９０度回転図形が
;描画される様子を観察できます。
;--------------------------------------
