MAIN   START
       LAD    GR1,CHECK
       LAD    GR0,DATA
       CALL   MARKCK     ;副プログラムの呼び出し
       RET
CHECK  DS     2
DATA   DC     #0002,#0003,#0009,#0000
       END
MARKCK START             ;マークカード [b07.cas]
       RPUSH             ;汎用レジスタの退避
       LAD    GR2,0      ;ノーマークの数
       LAD    GR3,0      ;ダブルマークの数
       LAD    GR4,1      ;個数(40)まで [  a  ]
       LD     GR5,GR0
NEXT   LAD    GR7,0      ;マークの数
       LD     GR6,0,GR5
SHIFT  SRL    GR6,1      ;1ビット右シフト
       JOV    BIT        ;オーバーフローのチェック
       JZE    ZERO       ;ゼロの場合
       JUMP   SHIFT
BIT    LAD    GR7,1,GR7  ;GR7を1加算
       CPA    GR7,=2     ;ダブルマークか? [  b  ]
       JNZ    SHIFT
       LAD    GR3,1,GR3  ;ダブルマークの数
LB1    LAD    GR4,1,GR4  ;カウントアップ
       CPA    GR4,=4     ;40桁?(4桁に変更)
       JPL    FIN
       LAD    GR5,1,GR5  ;次のマーク位置 [  c  ]
       JUMP   NEXT
ZERO   CPA    GR7,=0
       JNZ    LB1
       LAD    GR2,1,GR2  ;ノーマークの数を1加算
       JUMP   LB1
FIN    ST     GR2,0,GR1  ;ノーマークの数
       ST     GR3,1,GR1  ;ダブルマークの数
       RPOP              ;汎用レジスタの復元
       RET
       END