|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T g
Length: 18280 (0x4768)
Types: TextFile
Names: »gen.s«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/gnu-31mar87/chess/gen.s«
|
| 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