|
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 - 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