+++ /dev/null
-ROTATE START
- RPUSH
- ST GR3,N
- LD GR4,GR3
- LD GR5,GR1
- LD GR6,GR2
- LD GR7,=16
- SUBA GR7,GR3
-SHIFT LD GR0,0,GR5
- SLL GR0,0,GR3
- ST GR0,0,GR6 ; 結果の領域 ← GR0
- LAD GR5,1,GR5 ; 元の図形の1語のアドレス更新
- LAD GR6,1,GR6 ; 結果の図形の1語のアドレス更新
- SUBA GR4,=1 ; n語処理済み?
- JNZ SHIFT
-COPY SUBA GR7,=1 ; 残りの語の内容を結果の領域に複写
- JMI LOOP1
- LD GR0,0,GR5
- ST GR0,0,GR6
- LAD GR5,0,GR5
- LAD GR6,0,GR6
- JUMP COPY
-N DS 1
-LOOP1 LD GR4,N
- LD GR5,GR2 ; GR5 ← 結果の領域のアドレス
- LD GR6,0,GR1 ; GR6 ← 元の図形の先頭語の内容
-LOOP2 LD GR7,0,GR5 ; GR7 ← 結果の領域の1語の内容
- SRL GR7,1
- SLL GR6,1
- JOV ON
- JUMP CONT
-ON OR GR7,=#8000
-CONT ST GR7,0,GR5 ; 処理した1語を結果の領域に格納
- LAD GR5,1,GR5
- SUBA GR4,=1
- JNZ LOOP2
- LAD GR1,1,GR1
- SUBA GR3,=1
- JNZ LOOP1
- RPOP
- RET
- END