home *** CD-ROM | disk | FTP | other *** search
- / generate moves
-
- .globl _wgen
-
- .globl _pval, _board, _dir
- .globl _flag, _lmp, _wkpos
- .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
-
- _wgen:
- mov $_dir+126.,r4
- mov $_board+126.,r3
- mov _lmp,r2
- mov $63.,r1
- 0:
- mov (r3),r0
- bge 1f
- asl r0
- jmp *2f(r0)
-
- king
- queen
- rook
- bishop
- knight
- pawn
- 2:
-
- pawn:
- bit $uleft,(r4)
- bne 2f
- tst -2*9.(r3)
- ble 3f
- jsr r5,wtry; 0; -9.*2
- 3:
- mov r1,r0
- sub $9,r0
- cmp r0,_eppos
- bne 2f
- jsr r5,wtry; 0; -1*2
- 2:
- bit $uright,(r4)
- bne 2f
- tst -7.*2(r3)
- ble 3f
- jsr r5,wtry; 0; -7.*2
- 3:
- mov r1,r0
- sub $7,r0
- cmp r0,_eppos
- bne 2f
- jsr r5,wtry; 0; 2*1
- 2:
- tst -2*8.(r3)
- bne 1f
- jsr r5,wtry; 0; -2*8.
- bit $rank2,(r4)
- beq 1f
- tst -2*16.(r3)
- bne 1f
- jsr r5,wtry; 0; -16.*2
- br 1f
-
- knight:
- jsr r5,wtry; u2r1; -15.*2
- jsr r5,wtry; u1r2; -6.*2
- jsr r5,wtry; d1r2; 10.*2
- jsr r5,wtry; d2r1; 17.*2
- jsr r5,wtry; d2l1; 15.*2
- jsr r5,wtry; d1l2; 6.*2
- jsr r5,wtry; u1l2; -10.*2
- jsr r5,wtry; u2l1; -17.*2
- br 1f
-
-
- 1:
- cmp -(r4),-(r3)
- dec r1
- bpl 0b
- mov r2,_lmp
- rts pc
-
- bishop:
- jsr r5,wslide; uleft; -9.*2
- jsr r5,wslide; uright; -7.*2
- jsr r5,wslide; dleft; 7.*2
- jsr r5,wslide; dright; 9.*2
- br 1b
-
- rook:
- jsr r5,wslide; up; -8.*2
- jsr r5,wslide; down; 8.*2
- jsr r5,wslide; left; -1.*2.
- jsr r5,wslide; right; 1.*2
- br 1b
- queen:
- jsr r5,wslide; uleft; -9.*2
- jsr r5,wslide; uright; -7.*2
- jsr r5,wslide; dleft; 7.*2
- jsr r5,wslide; dright; 9.*2
- jsr r5,wslide; up; -8.*2
- jsr r5,wslide; left; -1.*2
- jsr r5,wslide; right; 1.*2
- jsr r5,wslide; down; 8.*2
- br 1b
-
- king:
- jsr r5,wtry; uleft; -9.*2
- jsr r5,wtry; uright; -7.*2
- jsr r5,wtry; dleft; 7.*2
- jsr r5,wtry; dright; 9.*2
- jsr r5,wtry; up; -8.*2
- jsr r5,wtry; left; -1.*2
- jsr r5,wtry; right; 1.*2
- jsr r5,wtry; down; 8.*2
- br 1b
-
- wtry:
- bit (r5)+,(r4)
- bne 1f
- mov r3,r0
- add (r5),r0
- mov (r0),r0
- blt 1f
- asl r0
- mov _value,(r2)
- sub _pval+12.(r0),(r2)+
- mov (r5)+,r0
- asr r0
- add r1,r0
- movb r0,(r2)+
- movb r1,(r2)+
- rts r5
- 1:
- tst (r5)+
- rts r5
-
- wslide:
- mov r4,-(sp)
- mov r3,-(sp)
- 1:
- bit (r5)+,(r4)
- bne 1f
- add (r5),r3
- add (r5),r4
- mov (r3),r0
- blt 1f
- bgt 2f
- mov _value,(r2)+
- mov r3,r0
- sub $_board,r0
- asr r0
- movb r0,(r2)+
- movb r1,(r2)+
- tst -(r5)
- br 1b
- 2:
- asl r0
- mov _value,(r2)
- sub _pval+12.(r0),(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
-