; 平成２３年度春　図形の回転
; 連続する 16 語に格納した 16 × 16 ドットの白黒の図形を，
; 時計回りに 90 度回転する 副プログラム ROTATE である。
; 図形の回転の実行例を図１に示す。
; このとき，１ドットを１ビットで 表し，
; 白は０，黒は１が格納されている。
;----------------
;問題の表示に合わせるため「表示」-->「表示スタイルの選択」
;-->「メモリ領域の表示スタイル」から「白黒の丸表示」を
;選択、設定するとたいへんよく理解できるようになります。
;----------------------
; (1) 図形を表す 16 語の先頭アドレスは GR1 に設定されて，
;     主プログラムから渡される。
;----------
;(2) 回転した結果の図形を格納する領域の先頭アドレスは
;    GR2 に設定されて， 主プログラムから渡される。
;----------
MAIN START
LINE1   LAD GR1,ZUKEI
    LAD GR2,KAITENZK
    CALL ROTATE
    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
;-----------------------
ROTATE  START
    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
  END
