1: / generate moves 2: 3: .globl _wgen 4: 5: .globl _pval, _board, _dir 6: .globl _flag, _lmp, _wkpos 7: .globl _eppos 8: .globl _value 9: 10: uleft = 04040 11: uright = 04004 12: dleft = 00440 13: dright = 00404 14: left = 00040 15: right = 00004 16: up = 04000 17: down = 00400 18: u2r1 = 06004 19: u1r2 = 04006 20: d1r2 = 00406 21: d2r1 = 00604 22: d2l1 = 00640 23: d1l2 = 00460 24: u1l2 = 04060 25: u2l1 = 06040 26: rank2 = 00200 27: rank7 = 02000 28: 29: _wgen: 30: mov $_dir+126.,r4 31: mov $_board+126.,r3 32: mov _lmp,r2 33: mov $63.,r1 34: 0: 35: mov (r3),r0 36: bge 1f 37: asl r0 38: jmp *2f(r0) 39: 40: king 41: queen 42: rook 43: bishop 44: knight 45: pawn 46: 2: 47: 48: pawn: 49: bit $uleft,(r4) 50: bne 2f 51: tst -2*9.(r3) 52: ble 3f 53: jsr r5,wtry; 0; -9.*2 54: 3: 55: mov r1,r0 56: sub $9,r0 57: cmp r0,_eppos 58: bne 2f 59: jsr r5,wtry; 0; -1*2 60: 2: 61: bit $uright,(r4) 62: bne 2f 63: tst -7.*2(r3) 64: ble 3f 65: jsr r5,wtry; 0; -7.*2 66: 3: 67: mov r1,r0 68: sub $7,r0 69: cmp r0,_eppos 70: bne 2f 71: jsr r5,wtry; 0; 2*1 72: 2: 73: tst -2*8.(r3) 74: bne 1f 75: jsr r5,wtry; 0; -2*8. 76: bit $rank2,(r4) 77: beq 1f 78: tst -2*16.(r3) 79: bne 1f 80: jsr r5,wtry; 0; -16.*2 81: br 1f 82: 83: knight: 84: jsr r5,wtry; u2r1; -15.*2 85: jsr r5,wtry; u1r2; -6.*2 86: jsr r5,wtry; d1r2; 10.*2 87: jsr r5,wtry; d2r1; 17.*2 88: jsr r5,wtry; d2l1; 15.*2 89: jsr r5,wtry; d1l2; 6.*2 90: jsr r5,wtry; u1l2; -10.*2 91: jsr r5,wtry; u2l1; -17.*2 92: br 1f 93: 94: 95: 1: 96: cmp -(r4),-(r3) 97: dec r1 98: bpl 0b 99: mov r2,_lmp 100: rts pc 101: 102: bishop: 103: jsr r5,wslide; uleft; -9.*2 104: jsr r5,wslide; uright; -7.*2 105: jsr r5,wslide; dleft; 7.*2 106: jsr r5,wslide; dright; 9.*2 107: br 1b 108: 109: rook: 110: jsr r5,wslide; up; -8.*2 111: jsr r5,wslide; down; 8.*2 112: jsr r5,wslide; left; -1.*2. 113: jsr r5,wslide; right; 1.*2 114: br 1b 115: queen: 116: jsr r5,wslide; uleft; -9.*2 117: jsr r5,wslide; uright; -7.*2 118: jsr r5,wslide; dleft; 7.*2 119: jsr r5,wslide; dright; 9.*2 120: jsr r5,wslide; up; -8.*2 121: jsr r5,wslide; left; -1.*2 122: jsr r5,wslide; right; 1.*2 123: jsr r5,wslide; down; 8.*2 124: br 1b 125: 126: king: 127: jsr r5,wtry; uleft; -9.*2 128: jsr r5,wtry; uright; -7.*2 129: jsr r5,wtry; dleft; 7.*2 130: jsr r5,wtry; dright; 9.*2 131: jsr r5,wtry; up; -8.*2 132: jsr r5,wtry; left; -1.*2 133: jsr r5,wtry; right; 1.*2 134: jsr r5,wtry; down; 8.*2 135: br 1b 136: 137: wtry: 138: bit (r5)+,(r4) 139: bne 1f 140: mov r3,r0 141: add (r5),r0 142: mov (r0),r0 143: blt 1f 144: asl r0 145: mov _value,(r2) 146: sub _pval+12.(r0),(r2)+ 147: mov (r5)+,r0 148: asr r0 149: add r1,r0 150: movb r0,(r2)+ 151: movb r1,(r2)+ 152: rts r5 153: 1: 154: tst (r5)+ 155: rts r5 156: 157: wslide: 158: mov r4,-(sp) 159: mov r3,-(sp) 160: 1: 161: bit (r5)+,(r4) 162: bne 1f 163: add (r5),r3 164: add (r5),r4 165: mov (r3),r0 166: blt 1f 167: bgt 2f 168: mov _value,(r2)+ 169: mov r3,r0 170: sub $_board,r0 171: asr r0 172: movb r0,(r2)+ 173: movb r1,(r2)+ 174: tst -(r5) 175: br 1b 176: 2: 177: asl r0 178: mov _value,(r2) 179: sub _pval+12.(r0),(r2)+ 180: mov r3,r0 181: sub $_board,r0 182: asr r0 183: movb r0,(r2)+ 184: movb r1,(r2)+ 185: 1: 186: tst (r5)+ 187: mov (sp)+,r3 188: mov (sp)+,r4 189: rts r5