/ generate moves .globl _bgen .globl _pval, _board, _dir .globl _flag, _lmp, _bkpos .globl _eppos .globl _value uleft = 04040 uright = 04004 dleft = 00440 dright = 00404 left = 00040 right = 00004 up = 04000 down = 00400 u2r1 = 06004 u1r2 = 04006 d1r2 = 00406 d2r1 = 00604 d2l1 = 00640 d1l2 = 00460 u1l2 = 04060 u2l1 = 06040 rank2 = 00200 rank7 = 02000 _bgen: mov $_dir+126.,r4 mov $_board+126.,r3 mov _lmp,r2 mov $63.,r1 0: mov (r3),r0 ble 1f asl r0 jmp *2f-2(r0) 2: pawn knight bishop rook queen king pawn: bit $dleft,(r4) bne 2f tst 2*7.(r3) bge 3f jsr r5,btry; 0; 7.*2 3: mov r1,r0 add $7,r0 cmp r0,_eppos bne 2f jsr r5,btry; 0; -1*2 2: bit $dright,(r4) bne 2f tst 9.*2(r3) bge 3f jsr r5,btry; 0; 2*9. 3: mov r1,r0 add $9,r0 cmp r0,_eppos bne 2f jsr r5,btry; 0; 2*1 2: tst 2*8.(r3) bne 1f jsr r5,btry; 0; 2*8. bit $rank7,(r4) beq 1f tst 2*16.(r3) bne 1f jsr r5,btry; 0; 16.*2 br 1f knight: jsr r5,btry; u2r1; -15.*2 jsr r5,btry; u1r2; -6.*2 jsr r5,btry; d1r2; 10.*2 jsr r5,btry; d2r1; 17.*2 jsr r5,btry; d2l1; 15.*2 jsr r5,btry; d1l2; 6.*2 jsr r5,btry; u1l2; -10.*2 jsr r5,btry; u2l1; -17.*2 br 1f 1: cmp -(r4),-(r3) dec r1 bpl 0b mov r2,_lmp rts pc bishop: jsr r5,bslide; uleft; -9.*2 jsr r5,bslide; uright; -7.*2 jsr r5,bslide; dleft; 7.*2 jsr r5,bslide; dright; 9.*2 br 1b rook: jsr r5,bslide; up; -8.*2 jsr r5,bslide; down; 8.*2 jsr r5,bslide; left; -1.*2. jsr r5,bslide; right; 1.*2 br 1b queen: jsr r5,bslide; uleft; -9.*2 jsr r5,bslide; uright; -7.*2 jsr r5,bslide; dleft; 7.*2 jsr r5,bslide; dright; 9.*2 jsr r5,bslide; up; -8.*2 jsr r5,bslide; left; -1.*2 jsr r5,bslide; right; 1.*2 jsr r5,bslide; down; 8.*2 br 1b king: jsr r5,btry; uleft; -9.*2 jsr r5,btry; uright; -7.*2 jsr r5,btry; dleft; 7.*2 jsr r5,btry; dright; 9.*2 jsr r5,btry; up; -8.*2 jsr r5,btry; left; -1.*2 jsr r5,btry; right; 1.*2 jsr r5,btry; down; 8.*2 br 1b btry: bit (r5)+,(r4) bne 1f mov r3,r0 add (r5),r0 mov (r0),r0 bgt 1f asl r0 mov _pval+12.(r0),(r2) sub _value,(r2)+ mov (r5)+,r0 asr r0 add r1,r0 movb r0,(r2)+ movb r1,(r2)+ rts r5 1: tst (r5)+ rts r5 bslide: mov r4,-(sp) mov r3,-(sp) 1: bit (r5)+,(r4) bne 1f add (r5),r3 add (r5),r4 mov (r3),r0 bgt 1f blt 2f clr (r2) sub _value,(r2)+ mov r3,r0 sub $_board,r0 asr r0 movb r0,(r2)+ movb r1,(r2)+ tst -(r5) br 1b 2: asl r0 mov _pval+12.(r0),(r2) sub _value,(r2)+ mov r3,r0 sub $_board,r0 asr r0 movb r0,(r2)+ movb r1,(r2)+ 1: tst (r5)+ mov (sp)+,r3 mov (sp)+,r4 rts r5