DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T g

⟦70b0e6683⟧ TextFile

    Length: 18280 (0x4768)
    Types: TextFile
    Names: »gen.s«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/gnu-31mar87/chess/gen.s« 

TextFile

|
|   Copyright (C) 1986 Free Software Foundation, Inc.
|
| This file is part of CHESS.
|
| CHESS is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY.  No author or distributor
| accepts responsibility to anyone for the consequences of using it
| or for whether it serves any particular purpose or works at all,
| unless he says so in writing.  Refer to the CHESS General Public
| License for full details.
|
| Everyone is granted permission to copy, modify and redistribute
| CHESS, but only under the conditions described in the
| CHESS General Public License.   A copy of this license is
| supposed to have been given to you along with CHESS so you
| can know your rights and responsibilities.  It should be in a
| file named COPYING.  Among other things, the copyright notice
| and this notice must be preserved on all copies.
| 
| This is an assembly-language version of the move generator
| for the SUN workstations. If you have SUN workstations, use
| this module instead of 'gen.c' (the standard move generator).
| Actually, this version is really the earlier version but it
| has been tweaked by someone knowledgeable about 68000 assembly
| language.
	.comm	_attackers,40
	.comm	_defenders,40
	.comm	_natt,4
	.comm	_ndef,4
	.comm	_permflag,1
	.data1
L112: 	.ascii	"staticexchange at \0"
L116: 	.ascii	" = %d\12\0"
	.globl	f68881_used
	.globl	_addmove1
	.globl	_generate
	.globl	_sqattacked
	.globl	_staticexchange
	.globl	_showstatic
	.globl	_showattacks
	.globl	_modmat
	.text
| *************************************************************************

_addmove1: 
	movl	_nmoves,a0
	addl	a0,a0 				| a5 = bd; a4 = moves; d4 = _from; d7 = _to;
	movl	a0,d1
	asll	#4,d1
	subl	a0,d1				| Z = moves[nmoves]
 	movl	a5@(0,d4:l:8),a0
	moveml	d4/d7/a0,a4@(0,d1:l)		| Z.from = _from; Z.to = _to;
						| Z.movpiece = bd[_from].piece;
	clrb	a4@(28,d1:l)			| Z.flags = 0;
	clrl	a4@(16,d1:l)			| Z.capcount = 0;
	tstl	a5@(0,d7:l:8)			| if (bd[_to].piece != 0 ) {
	jeq	L37
	movb	#1,a4@(28,d1:l)			|	Z.flags |= CAPFLAG;
	movl	a5@(0,d7:l:8),a4@(12,d1:l)	|	Z.cappices = bd[_to].piece;
	movl	a5@(4,d7:l:8),a4@(16,d1:l)	|	Z.capcount = bd[_to].moved;
	movb	#1,_permflag			|	permflag = Z.flags;}
L37: 	movw	pc@(18,a0:l:2),d0 		| switch (bd[_from].piece) {
	jmp	pc@(2,d0:w)
L63: 	.word	L46-L63
	.word	L38-L63
	.word	L38-L63
	.word	L38-L63
	.word	L38-L63
	.word	L57-L63
	.word	L38-L63
	.word	L52-L63
	.word	L38-L63
	.word	L38-L63
	.word	L38-L63
	.word	L38-L63
	.word	L40-L63
	.word	L38-L63
L40: 	cmpl	#95,d4				| case WK: if (_from == 95) switch(_to) {
	jne	L38
	cmpl	#93,d7
	jeq	L51
	cmpl	#97,d7
	jeq	L50
	jra	L38
L46:  	cmpl	#25,d4 				| case BK: if (_from == 25) switch(_to) {
	jne	L38
	cmpl	#23,d7
	jeq	L51
	cmpl	#27,d7
	jne	L38
L50: 	orb	#4,a4@(28,d1:l)			| Z.flags |= KCASFLAG;
	jra	L38				| break;
L51: 	orb	#8,a4@(28,d1:l)			| Z.flags |= QCASFLAG;
	jra	L38				| break;
L52: 	cmpl	#29,d7 				| case WP: if (_to < 29) {
	jge	L57
	movl	#5,a0				| for (i = WQ i >= WN; i--) {
LY01:	moveml	d4/d7,a4@(0,d1:l) 		| 	Z.from = _from; Z.to = _to;
	movl	#1,a4@(8,d1:l) 			| 	Z.movpiece = WP;
	movl	a0,a4@(20,d1:l) 		| 	Z.propiece = i;
	movl	a5@(0,d7:l:8),a4@(12,d1:l) 	| 	Z.cappiece = bd[_to].piece;
	movb	_permflag,a4@(28,d1:l) 		| 	Z.flags = permflag;
	orb	#2,a4@(28,d1:l) 		| 	Z.flags |= PROMFLAG;
	addl	#30,d1
	subql	#1,a0
	cmpl	#2,a0
	jge	LY01
	addql	#3,_nmoves 			| nmoves = nmoves + 3;
	jra	L38
L57: 	cmpl	#90,d7 				| case BP: if (_to < 90) {
	jle	L38
	movl	#-5,a0 				| for (i = BQ i >= BN; i--) {
LY03:	moveml	d4/d7,a4@(0,d1:l)		| 	Z.from = _from; Z.to = _to;
	movl	#-1,a4@(8,d1:l) 		| 	Z.movpiece = BP;
	movl	a0,a4@(20,d1:l) 		| 	Z.propiece = i;
	movl	a5@(0,d7:l:8),a4@(12,d1:l) 	| 	Z.cappiece = bd[_to].piece;
	movb	_permflag,a4@(28,d1:l) 		| 	Z.flags = permflag;
	orb	#2,a4@(28,d1:l) 		| 	Z.flags |= PROMFLAG;
	addl	#30,d1
	addql	#1,a0
	cmpl	#-2,a0
	jle	LY03
	addql	#3,_nmoves 			| nmoves = nmoves + 3;
L38: 	addql	#1,_nmoves			| nmoves = nmoves + 1;
	rts
| *************************************************************************

| d0 = 				a0 = 	
| d1 = 				a1 =  pieces[type].slide
| d2 = pieces[type]		a2 = 
| d3 = bd[TOMOVE].moved		a3 =
| d4 = i			a4 = moves
| d5 = pc			a5 = bd
| d6 = j			a6 = link
| d7 = incr 			a7 = sp	
	
_generate: link	a6,#-92
	moveml	#12540,sp@

	movl	a6@(8),a5
	movl	a6@(12),a4
	clrl	_nmoves				| nmoves = 0;
	movl	a5@(20),d3			| bd[TOMOVE].moved;
	tstl	d3				| if (bd[TOMOVE].moved == WHITE) {
	jne	L67
	movl	#80,a6@(-4)
	movl	#89,a6@(-8)
	movl	#-9,a6@(-12)
	movl	#-11,a6@(-16)
	movl	#-10,a6@(-20)
	movl	#-20,a6@(-24)
	movl	#1,a6@(-28)
	movl	#1,a6@(-32)
	movl	#95,a6@(-36)
	movl	#98,a6@(-40)
	movl	#91,a6@(-44)
	movl	#97,a6@(-48)
	movl	#93,a6@(-52)
	movl	#6,a6@(-56)
	moveq	#4,d5
	jra	LY11

L67: 	movl	#30,a6@(-4) 			| } else {
	movl	#39,a6@(-8)
	movl	#9,a6@(-12)
	movl	#11,a6@(-16)
	movl	#10,a6@(-20)
	movl	#20,a6@(-24)
	movl	#-1,a6@(-28)
	clrl	a6@(-32)
	movl	#25,a6@(-36)
	movl	#28,a6@(-40)
	movl	#21,a6@(-44)
	movl	#27,a6@(-48)
	movl	#23,a6@(-52)
	movl	#-6,a6@(-56)
	moveq	#-4,d5
LY11: 	movl	d5,a6@(-60)
	movl	a6@(-36),d4
	movl	a5@(0,d4:l:8),d0
	cmpl	a6@(-56),d0
	jne	L70
	movl	a6@(-40),d6
	movl	a5@(0,d6:l:8),d0
	cmpl	d5,d0
	jne	L70
	tstl	a5@(4,d4:l:8)
	jne	L70
	tstl	a5@(4,d6:l:8)
	jne	L70
	tstl	a5@(8,d4:l:8)
	jne	L70
	tstl	a5@(-8,d6:l:8)
	jne	L70
	movl	a6@(-32),sp@-
	movl	d4,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L70
	movl	a6@(-32),sp@-
	movl	d4,d0
	addql	#1,d0
	movl	d0,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L70
	movl	a6@(-32),sp@-
	movl	d6,d0
	subql	#1,d0
	movl	d0,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L70
	movl	a6@(-48),d7
	jbsr	_addmove1			| addmove1(bd,kingloc,qsdest,moves);
L70: 	movl	a5@(0,d4:l:8),d0
	cmpl	a6@(-56),d0
	jne	L71
	movl	a6@(-44),d6
	movl	a5@(0,d6:l:8),d0
	cmpl	a6@(-60),d0
	jne	L71
	tstl	a5@(4,d4:l:8)
	jne	L71
	tstl	a5@(4,d6:l:8)
	jne	L71
	tstl	a5@(-8,d4:l:8)
	jne	L71
	tstl	a5@(8,d6:l:8)
	jne	L71
	tstl	a5@(16,d6:l:8)
	jne	L71
	movl	a6@(-32),sp@-
	movl	d4,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L71
	movl	a6@(-32),sp@-
	movl	d4,d0
	subql	#1,d0
	movl	d0,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L71
	movl	a6@(-32),sp@-
	movl	d6,d0
	addql	#1,d0
	movl	d0,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L71
	movl	a6@(-32),sp@-
	movl	d6,d0
	addql	#2,d0
	movl	d0,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L71
	movl	a6@(-32),sp@-
	movl	d6,d0
	addql	#3,d0
	movl	d0,sp@-
	pea	a5@
	jbsr	_sqattacked
	lea	sp@(12),sp
	tstl	d0
	jne	L71
	movl	a6@(-52),d7
	jbsr	_addmove1			| addmove1(bd,kingloc,qsdest,moves);
L71: 	moveq	#21,d4				| for (i = 21; i <= 98; i++)
	movl	a6@(-28),d5			| pc
LY06:	movl	a5@(0,d4:l:8),d1		| if (bd[i].piece == pc) {
	cmpl	d1,d5
	jne	L75
	movl	d4,d1				| if (COLOR(bd[i+pwncap1].piece)
	addl	a6@(-12),d1			|     == oppcol)
	tstl	a5@(0,d1:l:8)
	jge	L2000
	moveq	#1,d0				| BLACK
	jra	L2001
L2000:	tstl	a5@(0,d1:l:8)
	jle	L2002
	cmpl	#99,a5@(0,d1:l:8)
	jge	L2002
	moveq	#0,d0				| WHITE
	jra	L2001
L2002:	moveq	#99,d0				| OFF
L2001:	cmpl	a6@(-32),d0
	jne	L76
	movl	d1,d7
	jbsr	_addmove1			| addmove(bd,i,i+pwncap1,moves);
L76: 	movl	d4,d1				| if (COLOR(bd[i+pwncap2].piece)
	addl	a6@(-16),d1			|     == oppcoll)
	tstl	a5@(0,d1:l:8)
	jge	L2004
	moveq	#1,d0				| BLACK
	jra	L2005
L2004: 	tstl	a5@(0,d1:l:8)
	jle	L2006
	cmpl	#99,a5@(0,d1:l:8)
	jge	L2006
	moveq	#0,d0				| WHITE
	jra	L2005
L2006: 	moveq	#99,d0				| OFF
L2005: 	cmpl	a6@(-32),d0
	jne	L77
	movl	d1,d7
	jbsr	_addmove1			| addmove(bd,i,i+pwncap2,moves);
L77: 	movl	d4,d0				| emptsq = (bd[i+pwnmov1].piece
	addl	a6@(-20),d0			|           == EMP);
	tstl	a5@(0,d0:l:8)
	jne	L72 				| if (emptsq) {
	cmpl	a6@(-4),d4			| if (i > rank2lo && i < rank2hi
	jle	L79				|     && bd[i+pwnmov2].piece == EMP)
	cmpl	a6@(-8),d4
	jge	L79
	movl	d4,d0
	addl	a6@(-24),d0
	tstl	a5@(0,d0:l:8)
	jne	L79
	movl	d0,d7
	jbsr	_addmove1			| addmove(bd,i,i+pwnmov1,moves);
L79: 	movl	d4,d7
	addl	a6@(-20),d7
	jbsr	_addmove1			| addmove(bd,i,i+pwnmov1,moves);
	jra	L72
L75: 	tstl	d1 				| else if (COLOR(bd[i].piece) ==
	jge	L2008 				|          bd[TOMOVE].moved)
	moveq	#1,d0				| BLACK
	jra	L2009
L2008: 	tstl	d1
	jle	L2010			
	cmpl	#99,d1				| OFF
	jge	L2010
	moveq	#0,d0				| WHITE
	jra	L2009
L2010: 	moveq	#99,d0
L2009: 	cmpl	d3,d0
	jne	L72
	tstl	d1				| type = abs(bd[i].piece);
	jge	L2013
	negl	d1
L2013: 	asll	#3,d1				| pieces[type]
	movl	d1,d2
	asll	#2,d2
	addl	d1,d2
 	lea	_pieces+4,a0 			| pieces[type].slide
	movl	a0@(0,d2:l),a1
	moveq	#0,d6				| for (j = 0; j < 
	jra	LY07				|      pieces[type].ndirs; j++)
LY08: 	movl	d2,a0 				| incr = pieces[type].dirs[j];
	lea	a0@(_pieces+8:l,d6:l:4),a0
	movl	a0@,d7
	addl	d4,d7				| incr <- incr + i;
LY09: 	movl	a5@(0,d7:l:8),d0 		| for (;;) {
	tstl	d0 				| movetype = pseudolegal();
	jne	L2014
	jbsr	_addmove1			| addmove(bd,i,i+incr,moves);
	jra	L88
L2014: 	movl	a5@(0,d4:l:8),d1
 	cmpl	#6,d1
	jgt	L2020
	cmpl	#1,d1
	jlt	L2020
	cmpl	#6,d0
	jgt	L2020
	cmpl	#1,d0
	jge	L82 				| DEFENSE (break)
	tstl	d0
	jlt	L2019
L2020: 	tstl	d1
	jge	L82				| OFF (break)
	cmpl	#6,d0
	jgt	L82				| OFF (break)
	cmpl	#1,d0
	jlt	L82				| OFF (break)
L2019:	 					| CAPTURE
	jbsr	_addmove1			| addmove(bd,i,i+incr,moves);
	jra	L82				| break;
L88: 	tstl	a1 				| if (!pieces[type].slide ||
	jeq	L82				|     movetype != NORMAL)
	movl	d2,a0 				| incr += pieces[type].dirs[j];
	lea	a0@(_pieces+8:l,d6:l:4),a0
	addl	a0@,d7
	jra	LY09
L82: 	addql	#1,d6
LY07: 	lea	_pieces,a0
	cmpl	a0@(0,d2:l),d6
	jlt	LY08
L72: 	addql	#1,d4
	moveq	#98,d6
	cmpl	d6,d4
	jle	LY06
	movl	_nmoves,d0
	moveml	a6@(-92),#12540
	unlk	a6
	rts
| *************************************************************************


_sqattacked:
	link	a6,#-40
	moveml	d2-d7,sp@			
	movl	a6@(8),a1			|d2 = i;  d3 = j;  d4 = incr;
	moveml	a6@(12),d6/d7			|d5 = pc; d6 = sq; d7 = attackcol
	tstl	d7				| if (attackcol == WHITE)
	jne	L92
	cmpl	#1,a1@(72,d6:l:8) 		| if (bd[sq-9].piece == WP ||
	jeq	L2024 				|     bd[sq+11].piece == WP)
	cmpl	#1,a1@(88,d6:l:8)
	jne	L94
L2024: 	moveq	#1,d0				|	return(TRUE);
	jra	LE90
L92: 	cmpl	#1,d7				| else if (attackcol == BLACK)
	jne	L94 				| if (bd[sq-9].piece == BP ||
	cmpl	#-1,a1@(-72,d6:l:8)		|     bd[sq-11].piece == BP)
	jeq	L2025
	cmpl	#-1,a1@(-88,d6:l:8)
	jne	L94
L2025: 	moveq	#1,d0				|	return(TRUE);
	jra	LE90
L94: 	moveq	#2,d2 				| for (i = WN; i <= WK; i++) {
LY13: 	movl	d2,d5 				| pc = (attackol == WHITE) ? i : -i;
	tstl	d7
	jeq	L2027
 	negl	d5
L2027: 	movl	d2,d0
	asll	#3,d0
	movl	d0,d1
	asll	#2,d1
	addl	d0,d1
	lea	_pieces+4,a0 		
	movl	a0@(0,d1:l),d0 			| pieces[i].slide
 	clrl	d3 				| for (j = 0; j < pieces[i].ndirs; j++)
	jra	LY14				| {
LY15:  	movl	d1,a0 				| incr = pieces[i].dirs[j];
	lea	a0@(_pieces+8:l,d3:l:4),a0
	movl	a0@,d4
	addl	d6,d4				| sq + incr
						| for ( ;; )
LY16: 	cmpl	a1@(0,d4:l:8),d5 		| if (bd[sq+incr].piece == pc)
	jeq	L2025				| 	return(TRUE);
	tstl	d0 				| if (!pieces[i].slide ||
	jeq	L100 				|     bd[sq+incr].piece != EMP)
	tstl	a1@(0,d4:l:8)
	jne	L100
	movl	d1,a0 				| incr += pieces[i].dirs[j];
	lea	a0@(_pieces+8:l,d3:l:4),a0
	addl	a0@,d4
	jra	LY16
L100: 	addql	#1,d3	
LY14: 	lea	_pieces,a0
	cmpl	a0@(0,d1:l),d3
	jlt	LY15
	addql	#1,d2
LY12: 	cmpl	#6,d2
	jle	LY13
	moveq	#0,d0				| return(FALSE);
LE90: 	moveml	a6@(-40),d2-d7
	unlk	a6
	rts
| *************************************************************************


_showstatic:
	link	a6,#0
	pea	L112
	jbsr	_printf
	addqw	#4,sp
	pea	__iob+20
	movl	a6@(12),sp@-
	jbsr	_lin_to_alg
	addqw	#8,sp
	subql	#1,__iob+20
	jlt	L2029
	movl	__iob+24,a0
	addql	#1,__iob+24
	movb	#10,a0@
	movb	a0@,d0
	jra	L2030
L2029: pea	__iob+20
	pea	10
	jbsr	__flsbuf
	addqw	#8,sp
L2030: pea	__iob+20
	jbsr	_fflush
	addqw	#4,sp
	movl	a6@(12),sp@-
	movl	a6@(8),sp@-
	jbsr	_staticexchange
	addqw	#8,sp
	movl	d0,sp@-
	pea	L116
	jbsr	_printf
	addqw	#8,sp
	unlk	a6
	rts
| *************************************************************************


_showattacks:
	link	a6,#-24
	clrl	_ndef
	clrl	_natt
	movl	a6@(12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jge	L2031
	moveq	#1,d0
	jra	L2032
L2031: 	movl	a6@(12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jle	L2033
	cmpl	#99,a0@(0,d0:l:8)
	jge	L2033
	moveq	#0,d0
	jra	L2032
L2033: 	moveq	#99,d0
L2032: 	movl	d0,a6@(-24)
	clrl	a6@(-4)
LY19: 	clrl	a6@(-8)
	jra	LY20
LY21: 	movl	a6@(-4),d0
	asll	#3,d0
	movl	d0,d1
	asll	#2,d1
	addl	d1,d0
	movl	d0,a0
	movl	a6@(-8),d0
	lea	a0@(_pieces+8:l,d0:l:4),a0
	movl	a0@,a6@(-12)
	jra	LY22
LY23: 	movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jne	L124
	movl	a6@(-4),d0
	asll	#3,d0
	movl	d0,d1
	asll	#2,d1
	addl	d1,d0
	movl	d0,a0
	movl	a6@(-8),d0
	lea	a0@(_pieces+8:l,d0:l:4),a0
	movl	a0@,d0
	addl	d0,a6@(-12)
LY22: tstl	a6@(-4)
	jne	L2036
	movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	cmpl	#-1,a0@(0,d0:l:8)
	jeq	L2035
L2036: movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2037
	movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a0@(0,d0:l:8),d0
	jra	L2038
L2037: movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2038: cmpl	a6@(-4),d0
	jne	L130
	tstl	a6@(-4)
	jeq	L130
	movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	cmpl	#-1,a0@(0,d0:l:8)
	jeq	L130
L2035: movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jge	L2039
	moveq	#1,d0
	jra	L2040
L2039: movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jle	L2041
	movl	a6@(12),d0
	addl	a6@(-12),d0
	cmpl	#99,a0@(0,d0:l:8)
	jge	L2041
	moveq	#0,d0
	jra	L2040
L2041: moveq	#99,d0
L2040: cmpl	a6@(-24),d0
	jne	L131
	movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2043
	movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a0@(0,d0:l:8),d0
	jra	L2044
L2043: movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2044: lea	_pcval,a0
	lea	a0@(0,d0:l:4),a0
	movl	_ndef,d0
	lea	_defenders,a1
	movl	a0@,a1@(0,d0:l:4)
	addql	#1,_ndef
	jra	L130
L131: movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2045
	movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a0@(0,d0:l:8),d0
	jra	L2046
L2045: movl	a6@(12),d0
	addl	a6@(-12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2046: lea	_pcval,a0
	lea	a0@(0,d0:l:4),a0
	movl	_natt,d0
	lea	_attackers,a1
	movl	a0@,a1@(0,d0:l:4)
	addql	#1,_natt
L130: movl	a6@(-4),d0
	asll	#3,d0
	movl	d0,d1
	asll	#2,d1
	addl	d1,d0
	lea	_pieces+4,a0
	tstl	a0@(0,d0:l)
	jne	LY23
L124: addql	#1,a6@(-8)
LY20: movl	a6@(-4),d0
	asll	#3,d0
	movl	d0,d1
	asll	#2,d1
	addl	d1,d0
	lea	_pieces,a0
	movl	a6@(-8),d1
	cmpl	a0@(0,d0:l),d1
	jlt	LY21
	addql	#1,a6@(-4)
	cmpl	#6,a6@(-4)
	jle	LY19
	unlk	a6
	rts
| *************************************************************************

_staticexchange:
	link	a6,#-20
	movl	a6@(12),sp@-
	movl	a6@(8),sp@-
	jbsr	_showattacks
	addqw	#8,sp
	tstl	_natt
	jeq	L2079
	tstl	_ndef
	jeq	L2074
	moveq	#-1,d1
	movl	d1,a6@(-4)
	moveq	#-2,d1
	movl	d1,a6@(-8)
	clrl	a6@(-16)
	moveq	#1,d1
	movl	d1,a6@(-20)
	jra	LY26
LY27: movl	a6@(-16),a6@(-12)
	cmpl	#1,a6@(-20)
	jne	L142
	movl	a6@(12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2050
	movl	a0@(0,d0:l:8),d0
	jra	L2051
L2050: movl	a6@(12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2051: lea	_pcval,a0
	jra	LY24
L142: movl	a6@(-8),d0
	lea	_defenders,a0
LY24: movl	a0@(0,d0:l:4),d0
	addl	d0,a6@(-16)
	tstl	a6@(-16)
	jge	L145
	movl	a6@(12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2053
	movl	a0@(0,d0:l:8),d0
	jra	L2054
L2053: movl	a6@(12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2054:
	lea	_pcval,a0
	tstl	a6@(-12)
	jle	L2055
	movl	a6@(-12),d1
	jra	L2056
L2055: moveq	#0,d1
L2056: cmpl	a0@(0,d0:l:4),d1
	jge	L2074
	tstl	a6@(-12)
	jgt	LY28
	jra	L2079
L145: addql	#1,a6@(-4)
	movl	a6@(-4),d0
	cmpl	_natt,d0
	jge	L139
	movl	a6@(-16),a6@(-12)
	lea	_attackers,a0
	movl	a0@(0,d0:l:4),d0
	subl	d0,a6@(-16)
	movl	a6@(12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2062
	movl	a0@(0,d0:l:8),d0
	jra	L2063
L2062: movl	a6@(12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2063: lea	_pcval,a0
	movl	a6@(-16),d1
	cmpl	a0@(0,d0:l:4),d1
	jgt	L139
	addql	#1,a6@(-20)
LY26: addql	#1,a6@(-8)
	movl	a6@(-8),d0
	cmpl	_ndef,d0
	jlt	LY27
L139: movl	a6@(12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2075
	movl	a0@(0,d0:l:8),d0
	jra	L2076
L2075: movl	a6@(12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2076: lea	_pcval,a0
	tstl	a6@(-12)
	jle	L2077
	movl	a6@(-12),d1
	jra	L2078
L2077: moveq	#0,d1
L2078: cmpl	a0@(0,d0:l:4),d1
	jge	L2074
	tstl	a6@(-12)
	jle	L2079
LY28: movl	a6@(-12),d0
	jra	LE134
L2079: moveq	#0,d0
	jra	LE134
L2074: movl	a6@(12),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jlt	L2082
	movl	a0@(0,d0:l:8),d0
	jra	L2083
L2082: movl	a6@(12),d0
	movl	a6@(8),a0
	movl	a0@(0,d0:l:8),d0
	negl	d0
L2083: 	lea	_pcval,a0
	movl	a0@(0,d0:l:4),d0
LE134: 	unlk	a6
	rts
| *************************************************************************

_modmat: link	a6,#-24
	clrl	a6@(-24)
	clrl	a6@(-20)
	clrl	a6@(-16)
	clrl	a6@(-12)
	clrl	a6@(-8)
	moveq	#21,d1
	movl	d1,a6@(-4)
	jra	LY32
LY33: 	movl	a6@(-4),d0
	movl	a6@(8),a0
	tstl	a0@(0,d0:l:8)
	jeq	L152
	cmpl	#99,a0@(0,d0:l:8)
	jeq	L152
	tstl	a0@(0,d0:l:8)
	jlt	L2084
	movl	a0,a1
	tstl	a1@(0,d0:l:8)
	jle	L2084
	cmpl	#99,a1@(0,d0:l:8)
	jge	L2084
	moveq	#1,d0
	jra	L2089
L2084: 	moveq	#0,d0
L2089: 	cmpl	a0@(20),d0
	jne	L156
	movl	a6@(-4),sp@-
	movl	a6@(8),sp@-
	jbsr	_showattacks
	addqw	#8,sp
	movl	a6@(-4),sp@-
	movl	a6@(8),sp@-
	jbsr	_staticexchange
	addqw	#8,sp
	movl	d0,a6@(-24)
	cmpl	a6@(-20),d0
	jle	L152
	movl	d0,a6@(-20)
	jra	L152
L156: 	movl	a6@(8),a0
	movl	a6@(-4),d0
	tstl	a0@(0,d0:l:8)
	jge	L2090
	moveq	#1,d0
	jra	L2091
L2090: 	movl	a6@(-4),d0
	movl	a6@(8),a1
	tstl	a1@(0,d0:l:8)
	jle	L2092
	cmpl	#99,a1@(0,d0:l:8)
	jge	L2092
	moveq	#0,d0
	jra	L2091
L2092: 	moveq	#99,d0
L2091: 	cmpl	a0@(20),d0
	jne	L152
	movl	a6@(-4),sp@-
	movl	a6@(8),sp@-
	jbsr	_showattacks
	addqw	#8,sp
	movl	a6@(-4),sp@-
	movl	a6@(8),sp@-
	jbsr	_staticexchange
	addqw	#8,sp
	movl	d0,a6@(-16)
	cmpl	a6@(-8),d0
	jle	L160
	movl	a6@(-8),a6@(-12)
	movl	d0,a6@(-8)
	jra	L152
L160: 	movl	a6@(-16),d0
	cmpl	a6@(-12),d0
	jle	L152
	movl	d0,a6@(-12)
L152: 	addql	#1,a6@(-4)
LY32: 	cmpl	#98,a6@(-4)
	jle	LY33
	fmovel	a6@(-20),fp0
	fmoved	#0r7.50000e-01,fp1
	fmull	a6@(-12),fp1
	fsubx	fp1,fp0
	fintrzx	fp0,fp0
	fmovel	fp0,d0
	unlk	a6
	rts