V7/usr/src/games/chess/ctrl.s
/ list pieces controlling a square
.globl _attack
.globl _dir, _board
.globl _attacv
none = 12345
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;
_attack:
mov 2(sp),r0
asl r0
mov $_attacv,r4
jsr r5,patt
u2r1
-15.*2
2; -2
jsr r5,patt
u1r2
-6.*2
2; -2
jsr r5,patt
d2r1
17.*2
2; -2
jsr r5,patt
d2l1
15.*2
2; -2
jsr r5,patt
d1l2
6.*2
2; -2
jsr r5,patt
u1l2
-10.*2
2; -2
jsr r5,patt
u2l1
-17.*2
2; -2
jsr r5,satt
uleft; -9.*2
1
3; -3; 5; -5
jsr r5,satt
uright; -7.*2
1
3; -3; 5; -5
jsr r5,satt
dleft; 7.*2
-1
3; -3; 5; -5
jsr r5,satt
dright; 9.*2
-1
3; -3; 5; -5
jsr r5,satt
up; -8.*2
none
4; -4; 5; -5
jsr r5,satt
left; -1.*2
none
4; -4; 5; -5
jsr r5,satt
right; 1.*2
none
4; -4; 5; -5
jsr r5,satt
down; 8.*2
none
4; -4; 5; -5
clr (r4)+
rts pc
patt:
bit (r5)+,_dir(r0)
bne 1f
mov r0,r1
add (r5)+,r1
jsr pc,look
jsr pc,look
rts r5
1:
add $6,r5
rts r5
satt:
mov r5,-(sp)
bit (r5)+,_dir(r0)
bne 1f
mov r0,r1
add (r5)+,r1
jsr pc,look / pawn
mov r0,r1
2:
mov (sp),r5
bit (r5)+,_dir(r1)
bne 1f
add (r5)+,r1
tst _board(r1)
beq 2b
tst (r5)+
mov r4,-(sp)
jsr pc,look
jsr pc,look
jsr pc,look
jsr pc,look
cmp (sp)+,r4
bne 2b
1:
mov (sp)+,r5
add $14.,r5
rts r5
look:
cmp (r5)+,_board(r1)
bne 1f
mov -2(r5),(r4)+
1:
rts pc