0000013a COPYR 00000121 JZB 00000000 C_BLK 00000001 C_BLU 00000002 C_RED 00000003 C_TAN 00000004 C_DGR 00000005 C_GRN 00000006 C_YEL 00000007 C_WHT 00000008 C_GRY 00000009 C_CYN 0000000a C_ORG 0000000b C_BRN 0000000c C_PNK 0000000d C_LBL 0000000e C_YGR 0000000f C_PUR 00000000 X_BLK 00000001 X_BLU 00000002 X_RED 00000003 X_TAN 00000004 X_DGR 00000005 X_GRN 00000006 X_YEL 00000007 X_WHT 00001000 X_GRY 00001001 X_CYN 00001002 X_ORG 00001003 X_BRN 00001004 X_PNK 00001005 X_LBL 00001006 X_YGR 00001007 X_PUR 00000000 _X 00000000 _X.na 00000400 _X.xsiz 00000200 _X.visb 00000100 _X.intr 00000000 _Y 00000000 _Y.na 00000080 _Y.yres 00000000 _Y.siz1 00000100 _Y.siz2 00000200 _Y.siz4 00000300 _Y.siz8 00000400 _Y.xmir 00000800 _Y.ymir 00000000 _A 00000000 _A.na 00000000 _A.grom 00000800 _A.gram 00002000 _A.prio 000000ff VFAST 000000bf VMED 0000006f VSLOW 0000001b VJUMP 00000005 MAXGP1 00000007 MAXGP2 0000000c MAXSPR 00001007 X_TITL 0000000f C_TITL 00000008 C_STAT 00001002 X_GRND 0000000a C_GRND 00001003 X_ROCK 0000000b C_ROCK 00000007 TSKQM 00000001 M_DUP 00000002 M_3CH 00000004 M_TICK 00000020 VBLANK 00000021 COLSTK 00000028 CS0 00000029 CS1 0000002a CS2 0000002b CS3 0000002c CB 0000cf00 EC_LOC 00000069 EC_MAG 0000cf01 EC_POLL 00000001 _UTIL_MAC ???????? MACRO ???????? a 00006e44 _SETISR ???????? ENDM 00000001 _STIC_MAC 00000000 __CSTK 00000000 __CSTK.GROM_Black 00000001 __CSTK.GROM_Blue 00000002 __CSTK.GROM_Red 00000003 __CSTK.GROM_Tan 00000004 __CSTK.GROM_DarkGreen 00000005 __CSTK.GROM_Green 00000006 __CSTK.GROM_Yellow 00000007 __CSTK.GROM_White 00000800 __CSTK.GRAM_Black 00000801 __CSTK.GRAM_Blue 00000802 __CSTK.GRAM_Red 00000803 __CSTK.GRAM_Tan 00000804 __CSTK.GRAM_DarkGreen 00000805 __CSTK.GRAM_Green 00000806 __CSTK.GRAM_Yellow 00000807 __CSTK.GRAM_White 00001800 __CSTK.GRAM_Grey 00001800 __CSTK.GRAM_Gray 00001801 __CSTK.GRAM_Cyan 00001802 __CSTK.GRAM_Orange 00001803 __CSTK.GRAM_Brown 00001804 __CSTK.GRAM_Pink 00001805 __CSTK.GRAM_LightBlue 00001806 __CSTK.GRAM_YellowGreen 00001807 __CSTK.GRAM_Purple 00000000 __CSTK.GROM_BLK 00000001 __CSTK.GROM_BLU 00000002 __CSTK.GROM_RED 00000003 __CSTK.GROM_TAN 00000004 __CSTK.GROM_DGR 00000005 __CSTK.GROM_GRN 00000006 __CSTK.GROM_YEL 00000007 __CSTK.GROM_WHT 00000800 __CSTK.GRAM_BLK 00000801 __CSTK.GRAM_BLU 00000802 __CSTK.GRAM_RED 00000803 __CSTK.GRAM_TAN 00000804 __CSTK.GRAM_DGR 00000805 __CSTK.GRAM_GRN 00000806 __CSTK.GRAM_YEL 00000807 __CSTK.GRAM_WHT 00001800 __CSTK.GRAM_GRY 00001801 __CSTK.GRAM_CYN 00001802 __CSTK.GRAM_ORG 00001803 __CSTK.GRAM_BRN 00001804 __CSTK.GRAM_PNK 00001805 __CSTK.GRAM_LBL 00001806 __CSTK.GRAM_YGR 00001807 __CSTK.GRAM_PUR 00002000 __CSTK.Adv 00002000 __CSTK.Advance 00000000 __CSTK.NoAdv 00000000 __CSTK.NoAdvance 00000000 __CSQR 00000000 __CSQR.p0_Black 00000001 __CSQR.p0_Blue 00000002 __CSQR.p0_Red 00000003 __CSQR.p0_Tan 00000004 __CSQR.p0_DarkGreen 00000005 __CSQR.p0_Green 00000006 __CSQR.p0_Yellow 00000007 __CSQR.p0_Stack 00000000 __CSQR.p1_Black 00000008 __CSQR.p1_Blue 00000010 __CSQR.p1_Red 00000018 __CSQR.p1_Tan 00000020 __CSQR.p1_DarkGreen 00000028 __CSQR.p1_Green 00000030 __CSQR.p1_Yellow 00000038 __CSQR.p1_Stack 00000000 __CSQR.p2_Black 00000040 __CSQR.p2_Blue 00000080 __CSQR.p2_Red 000000c0 __CSQR.p2_Tan 00000100 __CSQR.p2_DarkGreen 00000140 __CSQR.p2_Green 00000180 __CSQR.p2_Yellow 000001c0 __CSQR.p2_Stack 00000000 __CSQR.p3_Black 00000200 __CSQR.p3_Blue 00000400 __CSQR.p3_Red 00000600 __CSQR.p3_Tan 00002000 __CSQR.p3_DarkGreen 00002200 __CSQR.p3_Green 00002400 __CSQR.p3_Yellow 00002600 __CSQR.p3_Stack 00000000 __CSQR.p0_BLK 00000001 __CSQR.p0_BLU 00000002 __CSQR.p0_RED 00000003 __CSQR.p0_TAN 00000004 __CSQR.p0_DGR 00000005 __CSQR.p0_GRN 00000006 __CSQR.p0_YEL 00000007 __CSQR.p0_STK 00000000 __CSQR.p1_BLK 00000008 __CSQR.p1_BLU 00000010 __CSQR.p1_RED 00000018 __CSQR.p1_TAN 00000020 __CSQR.p1_DGR 00000028 __CSQR.p1_GRN 00000030 __CSQR.p1_YEL 00000038 __CSQR.p1_STK 00000000 __CSQR.p2_BLK 00000040 __CSQR.p2_BLU 00000080 __CSQR.p2_RED 000000c0 __CSQR.p2_TAN 00000100 __CSQR.p2_DGR 00000140 __CSQR.p2_GRN 00000180 __CSQR.p2_YEL 000001c0 __CSQR.p2_STK 00000000 __CSQR.p3_BLK 00000200 __CSQR.p3_BLU 00000400 __CSQR.p3_RED 00000600 __CSQR.p3_TAN 00002000 __CSQR.p3_DGR 00002200 __CSQR.p3_GRN 00002400 __CSQR.p3_YEL 00002600 __CSQR.p3_STK 00000000 __FGBG 00000000 __FGBG.f_Black 00000001 __FGBG.f_Blue 00000002 __FGBG.f_Red 00000003 __FGBG.f_Tan 00000004 __FGBG.f_DarkGreen 00000005 __FGBG.f_Green 00000006 __FGBG.f_Yellow 00000007 __FGBG.f_White 00000000 __FGBG.b_Black 00000200 __FGBG.b_Blue 00000400 __FGBG.b_Red 00000600 __FGBG.b_Tan 00002000 __FGBG.b_DarkGreen 00002200 __FGBG.b_Green 00002400 __FGBG.b_Yellow 00002600 __FGBG.b_White 00001000 __FGBG.b_Grey 00001000 __FGBG.b_Gray 00001200 __FGBG.b_Cyan 00001400 __FGBG.b_Orange 00001600 __FGBG.b_Brown 00003000 __FGBG.b_Pink 00003200 __FGBG.b_LightBlue 00003400 __FGBG.b_YellowGreen 00003600 __FGBG.b_Purple 00000000 __FGBG.f_BLK 00000001 __FGBG.f_BLU 00000002 __FGBG.f_RED 00000003 __FGBG.f_TAN 00000004 __FGBG.f_DGR 00000005 __FGBG.f_GRN 00000006 __FGBG.f_YEL 00000007 __FGBG.f_WHT 00000000 __FGBG.b_BLK 00000200 __FGBG.b_BLU 00000400 __FGBG.b_RED 00000600 __FGBG.b_TAN 00002000 __FGBG.b_DGR 00002200 __FGBG.b_GRN 00002400 __FGBG.b_YEL 00002600 __FGBG.b_WHT 00001000 __FGBG.b_GRY 00001200 __FGBG.b_CYN 00001400 __FGBG.b_ORG 00001600 __FGBG.b_BRN 00003000 __FGBG.b_PNK 00003200 __FGBG.b_LBL 00003400 __FGBG.b_YGR 00003600 __FGBG.b_PUR 00000800 __FGBG.GRAM 00000000 __FGBG.GROM 00000001 _TRACKER_MAC 00000010 _NOTE_OFFSET 000001b1 .SCRMEM 0000035e .SYSMEM 00000001 _GFX_MAC 00008000 _init_const 00000000 _init_escape 00000001 _P16_MAC 00000100 ISRVEC 00000102 TICK 00000103 PTPHAS 00000104 PMPHAS 00000105 PGPHAS 00000106 PPGPHA 00000107 MOFS 00000108 PGCARD 00000109 MIDGFX 0000010a MIDMSK 0000010b TSKIP 0000010c INCITY 0000010d CRATCNT 0000010e GDATA 0000010f HBDATA 00000110 HBCOL0 00000111 HBCOL1 00000112 HBCNT 00000113 HBCNT2 00000114 HBROW 00000115 HBKOS 00000116 TMCLR 00000117 TMADDR 00000118 FDROP 00000119 EMODE 0000011a CUENUM 0000011b BGFLAG 0000011c BGMPTBL 00000130 BGEXIT 00000135 MOBHIT 00000136 CAUTFL 00000137 CONTS 00000138 LIVES 00000139 POINT 0000013a COURSE 0000013b DEFSCO 0000013c CURBON 0000013d WAVE 0000013e WKILL 0000013f DOSCO 00000140 .SPSTART8 00000140 SPAT 00000140 SPAT1 00000145 SPAT2 0000014c JMPSCO 00000151 SPHSCR 00000156 LANDED 00000157 GP1MOB 00000158 GP1ACT 00000159 GP1CNT 0000015a GP2MOB 0000015b GP2ACT 0000015c GP2CNT 0000015d .SPSTOP8 0000015d TXLO 0000015e FXLO 0000015f FHCNT 00000160 RCCNT 00000161 RCPIC 00000162 RCNXT 00000164 RCLVL 00000166 LMCNT 00000167 LMCHAR 00000168 TIMSEC 00000169 TIMTIC 0000016a CKTOG 0000016b FCNT 0000016c EBSY 0000016d SPINCNT 0000016e SPINB 0000016f WTIMER 00000170 GRATE 00000171 WANTVL 00000172 JVEL 00000173 DOENG 00000174 DNENG 00000175 DBOUT 00000176 DBCM 00000177 DBCL 00000178 TMP 00000178 SCROLL 0000017d RFRSH_M 0000017e NOTE_A 0000017f NOTE_B 00000180 NOTE_C 00000181 RFRSH_A 00000182 RFRSH_B 00000183 RFRSH_C 00000184 VOL_A 00000185 VOL_B 00000186 VOL_C 00000187 _INSTR_A 00000188 _INSTR_B 00000189 _INSTR_C 0000018a COUNT_A 0000018b COUNT_B 0000018c COUNT_C 0000018d COUNT_M 0000018e COUNT_P 0000018f PAT 00000190 MUS_FLAGS 00000191 SFXTBL 00000199 SFXQ 0000019a SFXBSY 0000019b SFXSTMP 0000019c MUXOK 0000019d SCORE 0000019f PSCOR 000001a1 TOPSCO 000001f0 PSG0 000000f0 PSG1 000001fe CTRL0 000001ff CTRL1 000002f0 .SPSTART16 000002f0 SDAT 00000308 SPXYV 00000320 SPXYP 00000338 .SPSTOP16 00000320 SPXY1 0000032a SPXY2 00000338 RCIDX 00000339 GGB0 0000033a GGB1 0000033b GGB2 0000033c MGOFS 0000033d GPHASE 0000033e MPHASE 0000033f TPHASE 00000340 MPTR 00000341 WPTR 00000342 RPTR 00000343 JHGT 00000344 MGRAM 00000345 SONG 00000346 POS_A 00000347 POS_B 00000348 POS_C 00000349 SDATP 0000034a STACK 0000035e BGTTMP 0000035f RSEED 00003000 GROM 00003800 GRAM 00001014 ISRRET 00004040 ECSOK 00000038 TCARD 00000008 CCARD 00000008 MCARD 0000002c RCARD 0000001b GCARD 0000001c HBCARD 00000027 BCARD 00000028 WCARD 00000023 SCARD 00000004 TMCARD 0000001a PTCARD 000039c0 TOPGR 00003840 MIDGR 00003960 RGRAM 000038d8 GGRAM 00003938 BGRAM 00003945 WGRAM 000038e3 HBGRAM 00003918 SGRAM 00000820 TMCARDx 000008d0 PTCARDx 000008e0 HBCARDx 00001967 LMPCARDx 00009963 RCARDx 00009973 RCARD2x 000018da GCARDx 00000003 TROW_n 00000006 CROW_n 00000007 MROW_n 00000008 GROW_n 00000018 TROW_p 00000030 CROW_p 00000038 MROW_p 00000040 GROW_p 0000023c TROW 00000278 CROW 0000028c MROW 000002a0 GROW 00000200 STROW1 0000028c STROW2 00000214 RKROW ???????? SNDSTRM ???????? STKDEEP ???????? DOIDLEHST ???????? IDLEHST 0000d000 _SPATBL 0000d000 ANI 00008000 ANI.30 0000c000 ANI.15 00004000 ANI.8 00000000 ANI.0 00000000 SCORIDX.lo0000 00000000 SCORIDX.hi0000 00000200 SCORIDX.lo0350 00000000 SCORIDX.hi0350 00000400 SCORIDX.lo0500 00000000 SCORIDX.hi0500 00000600 SCORIDX.lo0750 00000000 SCORIDX.hi0750 00000000 SCORIDX.lo1000 00001000 SCORIDX.hi1000 00000200 SCORIDX.lo1250 00001000 SCORIDX.hi1250 00000400 SCORIDX.lo1450 00001000 SCORIDX.hi1450 00000600 SCORIDX.lo2000 00001000 SCORIDX.hi2000 00000000 SCORIDX.lo2250 00002000 SCORIDX.hi2250 00000200 SCORIDX.lo3750 00002000 SCORIDX.hi3750 00000400 SCORIDX.lo4500 00002000 SCORIDX.hi4500 00000600 SCORIDX.lo6250 00002000 SCORIDX.hi6250 00000000 SCORIDX.lornd0 00003000 SCORIDX.hirnd0 00000200 SCORIDX.lornd1 00003000 SCORIDX.hirnd1 00000000 SCORIDX.lostal 00003000 SCORIDX.histal 00000600 SCORIDX.lornd3 00003000 SCORIDX.hirnd3 0000d000 SCORTBL 0000d006 SPATBL 0000d005 SPATBL._done 00000000 SPATBL.0 0000d006 SPATBL._wht0 00000001 SPATBL.wht0 0000d00a SPATBL._wht1 00000005 SPATBL.wht1 0000d00e SPATBL._wht2 00000009 SPATBL.wht2 0000d012 SPATBL._wht3 0000000d SPATBL.wht3 0000d016 SPATBL._pnk0 00000011 SPATBL.pnk0 0000d01a SPATBL._blu0 00000015 SPATBL.blu0 0000d01e SPATBL._pnk1 0000d022 SPATBL._pnk1b 00000019 SPATBL.pnk1 0000d026 SPATBL._pnk1c 0000001d SPATBL.pnk1b 0000d02a SPATBL._pnk1d 00000021 SPATBL.pnk1c 00000025 SPATBL.pnk1d 0000d02e SPATBL._blu1 00000029 SPATBL.blu1 0000d032 SPATBL._blu1a 0000002d SPATBL.blu1a 0000d036 SPATBL._pnk2 0000d03a SPATBL._pnk2b 00000031 SPATBL.pnk2 00000035 SPATBL.pnk2b 0000d03e SPATBL._blu2 0000d042 SPATBL._blu2b 00000039 SPATBL.blu2 0000d046 SPATBL._blu2c 0000003d SPATBL.blu2b 0000d04a SPATBL._blu2d 00000041 SPATBL.blu2c 00000045 SPATBL.blu2d 0000d04e SPATBL._pnk3 0000d052 SPATBL._pnk3b 00000049 SPATBL.pnk3 0000004d SPATBL.pnk3b 0000d056 SPATBL._pnk3c 0000d05a SPATBL._pnk3d 00000051 SPATBL.pnk3c 00000055 SPATBL.pnk3d 0000d05e SPATBL._blu3 00000059 SPATBL.blu3 0000d062 SPATBL._blu3c 0000005d SPATBL.blu3c 0000005d S_end 0000d066 SPATBL._tur0 00000061 SPATBL.tur0 0000d06a SPATBL._tur1 00000065 SPATBL.tur1 0000d06e SPATBL._tur2 00000069 SPATBL.tur2 0000d072 SPATBL._tur3 0000006d SPATBL.tur3 0000d076 SPATBL._bld0a 0000d07a SPATBL._bld0b 00000071 SPATBL.bld0a 0000d07e SPATBL._bld0c 00000075 SPATBL.bld0b 0000d082 SPATBL._bld0d 00000079 SPATBL.bld0c 0000007d SPATBL.bld0d 0000d086 SPATBL._fol0a 00000081 SPATBL.fol0a 0000d08a SPATBL._fol1a 00000085 SPATBL.fol1a 0000d08e SPATBL._fol2a 00000089 SPATBL.fol2a 0000d092 SPATBL._fol3a 0000008d SPATBL.fol3a 0000d096 SPATBL._fol0b 00000091 SPATBL.fol0b 0000d09a SPATBL._fol1b 00000095 SPATBL.fol1b 0000d09e SPATBL._fol2b 00000099 SPATBL.fol2b 0000d0a2 SPATBL._fol3b 0000009d SPATBL.fol3b 0000d0a6 SPATBL._lmna 000000a1 SPATBL.lmna 0000d0aa SPATBL._lmnb 000000a5 SPATBL.lmnb 0000d0ae SPATBL._plta 000000a9 SPATBL.plta 0000d0b2 SPATBL._pltb 000000ad SPATBL.pltb 0000d0b6 SPATBL._pltc 000000b1 SPATBL.pltc 0000d0ba SPATBL._pltd 000000b5 SPATBL.pltd 0000d0be SPATBL._b1 0000d0c2 SPATBL._b1b 000000b9 SPATBL.b1 000000bd SPATBL.b1b 0000d0c6 SPATBL._b2 000000c1 SPATBL.b2 0000d0ca SPATBL._b3 000000c5 SPATBL.b3 0000d0ce SPATBL._b4 000000c9 SPATBL.b4 0000d0d2 SPATBL._b5 000000cd SPATBL.b5 0000d0d6 SPATBL._x1 0000d0da SPATBL._x2 000000d1 SPATBL.x1 0000d0de SPATBL._x3 000000d5 SPATBL.x2 000000d9 SPATBL.x3 0000d0e2 SPATBL._stal 000000dd SPATBL.stal 0000d0e6 SPATBL._stala 0000d0ea SPATBL._stalb 000000e1 SPATBL.stala 000000e5 SPATBL.stalb 0000d0ee SPATBL._stalf 000000e9 SPATBL.stalf 0000d0f2 SPATBL._hut0 000000ed SPATBL.hut0 0000d0f6 SPATBL._hut1 000000f1 SPATBL.hut1 0000d0fa SPATBL._hut2 000000f5 SPATBL.hut2 0000d0fe SPATBL._hut3 000000f9 SPATBL.hut3 0000d102 SPATBL._crat6 000000fd SPATBL.crat6 0000d106 SPATLM 00000109 _SPATBL.size 0000d109 _SPAWN 0000d109 BGMPIND 0000d109 BGMPIND.sauc_ex 00005252 BGT_SAUC_EX 0000d10a BGMPIND.flexit 0000533e BGT_FLEXIT 0000d10b BGMPIND.fladv 00005367 BGT_FLADV 0000d10c BGMPIND.null 0000612e BGT_RET 0000d10d BGMPIND.boulder0 00005034 BGT_BOULDER0 0000d10c BGMPIND.boulder1 0000d10e BGMPIND.mine0 00005043 BGT_MINE0 0000d10f BGMPIND.mine1 0000504f BGT_MINE1 0000d110 BGMPIND.plant0 0000503f BGT_PLANT0 0000d111 BGMPIND.plant1 00005067 BGT_PLANT1 0000d112 BGMPIND.sauc_f0 000051fb BGT_SAUC_F0 0000d113 BGMPIND.sauc_f1 000051b6 BGT_SAUC_F1 0000d114 BGMPIND.sauc_lr 00005149 BGT_SAUC_LR 0000d115 BGMPIND.sauc_ud 0000518f BGT_SAUC_UD 0000d116 BGMPIND.turret0 00005030 BGT_TURRET0 0000d117 BGMPIND.turret1 00005091 BGT_TURRET1 0000d118 BGMPIND.follow0 0000526b BGT_FOLLOW0 0000d119 BGMPIND.follow1 00005294 BGT_FOLLOW1 0000d11a BGMPIND.stal0 000050b2 BGT_STAL0 0000d11b BGMPIND.stal1 000050ce BGT_STAL1 0000d11c BGMPIND.stal2 000050df BGT_STAL2 00000000 BGI 00000005 BGI.boulder0 00000004 BGI.boulder1 00000006 BGI.mine0 00000007 BGI.mine1 00000008 BGI.plant0 00000009 BGI.plant1 0000000a BGI.sauc_f0 0000000b BGI.sauc_f1 0000000c BGI.sauc_lr 0000000d BGI.sauc_ud 00000001 BGI.sauc_ex 0000000e BGI.turret0 0000000f BGI.turret1 00000010 BGI.follow0 00000011 BGI.follow1 00000002 BGI.flexit 00000003 BGI.fladv 00000012 BGI.stal0 00000013 BGI.stal1 00000014 BGI.stal2 00000004 BGI.null 00000000 SPAWNTBL.pnk 00000001 SPAWNTBL.blu 00000002 SPAWNTBL.wht 00000003 SPAWNTBL.fola 00000004 SPAWNTBL.folb 00000005 SPAWNTBL.pn2 00000006 SPAWNTBL.bl2 00000007 SPAWNTBL.wh2 00000008 SPAWNTBL.tur 00000009 SPAWNTBL.bld 0000000a SPAWNTBL.mine 0000000b SPAWNTBL.plant 0000000c SPAWNTBL.plbig 0000000d SPAWNTBL.stal 0000000d SPAWNTBL.crat6 00000000 EXIT.0 00000100 EXIT.pink_a 00000200 EXIT.blue_a 00000300 EXIT.whit_a 00000400 EXIT.pin2_a 00000500 EXIT.blu2_a 00000600 EXIT.whi2_a 00000700 EXIT.pink_b 00000800 EXIT.blue_b 00000900 EXIT.whit_b 00000a00 EXIT.pin2_b 00000b00 EXIT.blu2_b 00000c00 EXIT.whi2_b 00000d00 EXIT.pink_c 00000e00 EXIT.blue_c 00000f00 EXIT.whit_c 00001000 EXIT.pin2_c 00001100 EXIT.blu2_c 00001200 EXIT.whi2_c 00001300 EXIT.pink_d 00001400 EXIT.blue_d 00001500 EXIT.whit_d 00001600 EXIT.pin2_d 00001700 EXIT.blu2_d 00001800 EXIT.whi2_d 00001900 EXIT.pink_e 00001a00 EXIT.blue_e 00001b00 EXIT.whit_e 00001c00 EXIT.pin2_e 00001d00 EXIT.blu2_e 00001e00 EXIT.whi2_e 00001f00 EXIT.flexit 0000d11d SPAWNTBL 00000000 CUE.2_mine_a 00000100 CUE.1_mine_a 00000200 CUE.2_mine_b 00000300 CUE.1_mine_b 00000400 CUE.2_mine_c 00000500 CUE.1_mine_c 00000600 CUE.2_mine_d 00000700 CUE.1_mine_d 00000800 CUE.2_mine_e 00000900 CUE.1_mine_e 00000a00 CUE.2_mine_f 00000b00 CUE.1_mine_f 00000c00 CUE.1_plant 00000d00 CUE.1_plbig 00000e00 CUE.1_turret 00000f00 CUE.2_boulc 00001000 CUE.1_boulc 00001100 CUE.2_bould 00001200 CUE.1_bould 00001300 CUE.3_pink_a 00001400 CUE.2_pink_a 00001500 CUE.1_pink_a 00001600 CUE.3_pink_b 00001700 CUE.2_pink_b 00001800 CUE.1_pink_b 00001900 CUE.3_pink_c 00001a00 CUE.2_pink_c 00001b00 CUE.1_pink_c 00001c00 CUE.2_pink_d 00001d00 CUE.1_pink_d 00001e00 CUE.3_pink_e 00001f00 CUE.2_pink_e 00002000 CUE.1_pink_e 00002100 CUE.3_pin2_a 00002200 CUE.2_pin2_a 00002300 CUE.1_pin2_a 00002400 CUE.2_pin2_b 00002500 CUE.1_pin2_b 00002600 CUE.3_pin2_c 00002700 CUE.2_pin2_c 00002800 CUE.1_pin2_c 00002900 CUE.3_pin2_d 00002a00 CUE.2_pin2_d 00002b00 CUE.1_pin2_d 00002c00 CUE.2_pin2_e 00002d00 CUE.1_pin2_e 00002e00 CUE.2_blue_a 00002f00 CUE.1_blue_a 00003000 CUE.3_blue_b 00003100 CUE.2_blue_b 00003200 CUE.1_blue_b 00003300 CUE.3_blue_c 00003400 CUE.2_blue_c 00003500 CUE.1_blue_c 00003600 CUE.3_blue_d 00003700 CUE.2_blue_d 00003800 CUE.1_blue_d 00003900 CUE.3_blue_e 00003a00 CUE.2_blue_e 00003b00 CUE.1_blue_e 00003c00 CUE.2_blu2_a 00003d00 CUE.1_blu2_a 00003e00 CUE.3_blu2_b 00003f00 CUE.2_blu2_b 00004000 CUE.1_blu2_b 00004100 CUE.3_blu2_c 00004200 CUE.2_blu2_c 00004300 CUE.1_blu2_c 00004400 CUE.3_blu2_d 00004500 CUE.2_blu2_d 00004600 CUE.1_blu2_d 00004700 CUE.3_blu2_e 00004800 CUE.2_blu2_e 00004900 CUE.1_blu2_e 00004a00 CUE.3_whit_a 00004b00 CUE.2_whit_a 00004c00 CUE.1_whit_a 00004d00 CUE.3_whit_b 00004e00 CUE.2_whit_b 00004f00 CUE.1_whit_b 00005000 CUE.3_whit_c 00005100 CUE.2_whit_c 00005200 CUE.1_whit_c 00005300 CUE.3_whit_d 00005400 CUE.2_whit_d 00005500 CUE.1_whit_d 00005600 CUE.3_whit_e 00005700 CUE.2_whit_e 00005800 CUE.1_whit_e 00005900 CUE.3_whi2_a 00005a00 CUE.2_whi2_a 00005b00 CUE.1_whi2_a 00005c00 CUE.3_whi2_b 00005d00 CUE.2_whi2_b 00005e00 CUE.1_whi2_b 00005f00 CUE.3_whi2_c 00006000 CUE.2_whi2_c 00006100 CUE.1_whi2_c 00006200 CUE.3_whi2_d 00006300 CUE.2_whi2_d 00006400 CUE.1_whi2_d 00006500 CUE.2_whi2_e 00006600 CUE.1_whi2_e 00006700 CUE.follower 00006800 CUE._followr 00006900 CUE.minelyr2 00006a00 CUE._minlyr2 00006b00 CUE.minelyr5 00006c00 CUE._minlyr5 00006d00 CUE.laidmine 00006e00 CUE.charger 00006f00 CUE._chargr 00007000 CUE.charger5 00007100 CUE._chargr5 00007200 CUE.charger7 00007300 CUE._chargr7 00007400 CUE.stal_a 00007500 CUE.stal_b 00007600 CUE.stal_c 00007700 CUE.stal_d 00007800 CUE.stal_e 00007900 CUE.stal_f 00007a00 CUE.stal_g 00007b00 CUE.stal_h 00007c00 CUE.stal_i 00007d00 CUE.crat6 0000020c _SPAWN.size 0000d315 RCS1 00008000 RCS1.nosc 00008200 RCS1.sc500 00008400 RCS1.sc750 00008600 RCS1.sc1K 0000d315 RCS1.rock1 0000d318 RCS1.rock2 0000d31b RCS1.rock3 0000d31f RCS1.crat1 0000d322 RCS1.crat3 0000d324 RCS1.crat2 0000d328 RCS1.crat4 0000d32d RCS1.blank 0000d32e RCS1.cratz 0000d32f RCS2 00008000 RCS2.nosc 00008200 RCS2.sc500 00008400 RCS2.sc750 00008600 RCS2.sc1K 0000d32f RCS2.rock1 0000d332 RCS2.rock2 0000d335 RCS2.rock3 0000d339 RCS2.crat1 0000d33c RCS2.crat3 0000d33e RCS2.crat2 0000d342 RCS2.crat4 0000d347 RCS2.blank 0000d349 _WORLD 0000d349 WINDEX 0000d351 MOON_B 0000d3ad MOON_C 0000d428 MARS_B 0000d494 MARS_C 0000d670 PLUT_B 0000d6f1 PLUT_C 0000d528 MERC_B 0000d5c0 MERC_C 00000100 MOON_B.rock1 00000400 MOON_B.rock2 00000700 MOON_B.rock3 00000b00 MOON_B.crat1 00001000 MOON_B.crat2 00000e00 MOON_B.crat3 00001400 MOON_B.crat4 00001900 MOON_B.blank 00001c00 MOON_B.caut0 00001d00 MOON_B.caut1 00001e00 MOON_B.caut2 00001f00 MOON_B.caut3 00002000 MOON_B.level 00006000 MOON_B.exit 00008000 MOON_B.cue 0000d351 MOON_B.ckpt_0a 0000d359 MOON_B.ckpt_0b 0000d360 MOON_B.ckpt_0c 0000d369 MOON_B.ckpt_0d 0000d371 MOON_B.ckpt_0e 0000d37a MOON_B.ckpt_0f 0000d382 MOON_B.ckpt_0g 0000d38e MOON_B.ckpt_0h 0000d397 MOON_B.ckpt_0i 0000d39f MOON_B.ckpt_0j 00000100 MOON_C.rock1 00000400 MOON_C.rock2 00000700 MOON_C.rock3 00000b00 MOON_C.crat1 00001000 MOON_C.crat2 00000e00 MOON_C.crat3 00001400 MOON_C.crat4 00001900 MOON_C.blank 00001c00 MOON_C.caut0 00001d00 MOON_C.caut1 00001e00 MOON_C.caut2 00001f00 MOON_C.caut3 00002000 MOON_C.level 00006000 MOON_C.exit 00008000 MOON_C.cue 0000d3ad MOON_C.ckpt_0a 0000d3b3 MOON_C.ckpt_0b 0000d3b9 MOON_C.ckpt_0c 0000d3c3 MOON_C.ckpt_0d 0000d3d3 MOON_C.ckpt_0e 0000d3e0 MOON_C.ckpt_0f 0000d3e4 MOON_C.ckpt_0g 0000d3f4 MOON_C.ckpt_0h 0000d405 MOON_C.ckpt_0i 0000d410 MOON_C.ckpt_0j 00000100 MARS_B.rock1 00000400 MARS_B.rock2 00000700 MARS_B.rock3 00000b00 MARS_B.crat1 00001000 MARS_B.crat2 00000e00 MARS_B.crat3 00001400 MARS_B.crat4 00001900 MARS_B.blank 00001c00 MARS_B.caut0 00001d00 MARS_B.caut1 00001e00 MARS_B.caut2 00001f00 MARS_B.caut3 00002000 MARS_B.level 00006000 MARS_B.exit 00008000 MARS_B.cue 0000d428 MARS_B.ckpt_0a 0000d431 MARS_B.ckpt_0b 0000d438 MARS_B.ckpt_0c 0000d443 MARS_B.ckpt_0d 0000d44e MARS_B.ckpt_0e 0000d458 MARS_B.ckpt_0f 0000d462 MARS_B.ckpt_0g 0000d46f MARS_B.ckpt_0h 0000d47d MARS_B.ckpt_0i 0000d485 MARS_B.ckpt_0j 00000100 MARS_C.rock1 00000400 MARS_C.rock2 00000700 MARS_C.rock3 00000b00 MARS_C.crat1 00001000 MARS_C.crat2 00000e00 MARS_C.crat3 00001400 MARS_C.crat4 00001900 MARS_C.blank 00001c00 MARS_C.caut0 00001d00 MARS_C.caut1 00001e00 MARS_C.caut2 00001f00 MARS_C.caut3 00002000 MARS_C.level 00006000 MARS_C.exit 00008000 MARS_C.cue 0000d494 MARS_C.ckpt_0a 0000d49d MARS_C.ckpt_0b 0000d4ab MARS_C.ckpt_0c 0000d4bc MARS_C.ckpt_0d 0000d4c8 MARS_C.ckpt_0e 0000d4d8 MARS_C.ckpt_0f 0000d4e4 MARS_C.ckpt_0g 0000d4f4 MARS_C.ckpt_0h 0000d507 MARS_C.ckpt_0i 0000d518 MARS_C.ckpt_0j 00000100 MERC_B.rock1 00000400 MERC_B.rock2 00000700 MERC_B.rock3 00000b00 MERC_B.crat1 00001000 MERC_B.crat2 00000e00 MERC_B.crat3 00001400 MERC_B.crat4 00001900 MERC_B.blank 00001c00 MERC_B.caut0 00001d00 MERC_B.caut1 00001e00 MERC_B.caut2 00001f00 MERC_B.caut3 00002000 MERC_B.level 00006000 MERC_B.exit 00008000 MERC_B.cue 0000d528 MERC_B.ckpt_0a 0000d532 MERC_B.ckpt_0b 0000d53b MERC_B.ckpt_0c 0000d546 MERC_B.ckpt_0d 0000d551 MERC_B.ckpt_0e 0000d55f MERC_B.ckpt_0f 0000d572 MERC_B.ckpt_0g 0000d586 MERC_B.ckpt_0h 0000d597 MERC_B.ckpt_0i 0000d5a9 MERC_B.ckpt_0j 00000100 MERC_C.rock1 00000400 MERC_C.rock2 00000700 MERC_C.rock3 00000b00 MERC_C.crat1 00001000 MERC_C.crat2 00000e00 MERC_C.crat3 00001400 MERC_C.crat4 00001900 MERC_C.blank 00001c00 MERC_C.caut0 00001d00 MERC_C.caut1 00001e00 MERC_C.caut2 00001f00 MERC_C.caut3 00002000 MERC_C.level 00006000 MERC_C.exit 00008000 MERC_C.cue 0000d5c0 MERC_C.ckpt_0a 0000d5ca MERC_C.ckpt_0b 0000d5dd MERC_C.ckpt_0c 0000d5ee MERC_C.ckpt_0d 0000d5fd MERC_C.ckpt_0e 0000d60a MERC_C.ckpt_0f 0000d617 MERC_C.ckpt_0g 0000d62b MERC_C.ckpt_0h 0000d63f MERC_C.ckpt_0i 0000d659 MERC_C.ckpt_0j 00000100 PLUT_B.rock1 00000400 PLUT_B.rock2 00000700 PLUT_B.rock3 00000b00 PLUT_B.crat1 00001000 PLUT_B.crat2 00000e00 PLUT_B.crat3 00001400 PLUT_B.crat4 00001900 PLUT_B.blank 00001c00 PLUT_B.caut0 00001d00 PLUT_B.caut1 00001e00 PLUT_B.caut2 00001f00 PLUT_B.caut3 00002000 PLUT_B.level 00006000 PLUT_B.exit 00008000 PLUT_B.cue 0000d670 PLUT_B.ckpt_0a 0000d679 PLUT_B.ckpt_0b 0000d683 PLUT_B.ckpt_0c 0000d691 PLUT_B.ckpt_0d 0000d69f PLUT_B.ckpt_0e 0000d6ac PLUT_B.ckpt_0f 0000d6b8 PLUT_B.ckpt_0g 0000d6c4 PLUT_B.ckpt_0h 0000d6d3 PLUT_B.ckpt_0i 0000d6e1 PLUT_B.ckpt_0j 00000100 PLUT_C.rock1 00000400 PLUT_C.rock2 00000700 PLUT_C.rock3 00000b00 PLUT_C.crat1 00001000 PLUT_C.crat2 00000e00 PLUT_C.crat3 00001400 PLUT_C.crat4 00001900 PLUT_C.blank 00001c00 PLUT_C.caut0 00001d00 PLUT_C.caut1 00001e00 PLUT_C.caut2 00001f00 PLUT_C.caut3 00002000 PLUT_C.level 00006000 PLUT_C.exit 00008000 PLUT_C.cue 0000d6f1 PLUT_C.ckpt_0a 0000d6fd PLUT_C.ckpt_0b 0000d70c PLUT_C.ckpt_0c 0000d720 PLUT_C.ckpt_0d 0000d72d PLUT_C.ckpt_0e 0000d738 PLUT_C.ckpt_0f 0000d745 PLUT_C.ckpt_0g 0000d759 PLUT_C.ckpt_0h 0000d76d PLUT_C.ckpt_0i 0000d77d PLUT_C.ckpt_0j 00000445 _WORLD.size 0000d78e _OS2 0000d78e INITMEM 0000d78e INITMEM.0 0000d791 INITMEM.1 0000d792 INITMEM.2 0000d792 INITMEM.next 0000d7c1 INITMEM.done 0000d7a2 INITMEM.cst_tbl 0000d7af INITMEM.escape 0000d7b3 INITMEM.8bit 00006f4d CST16 00006f46 CST8 0000d7b5 _cst8_fix 0000d7c5 INITMEM.jrr4 0000d7c6 TEASER_END 00006ef4 CLRSCR 00006dcf LOADFONT 0000fb34 TEASEFNT 00006e70 P16.FLS 00000000 _s16o 000000d0 _s16p 0000000d _s16i 00000000 _s16t 0000d83e TEASER_END.loop 0000d854 TEASEISR 00006e27 WAIT 00006efe MENUINP 0000fa5a FONT 0000f981 LMPTITLE 0000d85a TEASEISR.l0 0000f9b2 TITLESP 0000d867 TEASEISR.l1 0000d86f TEASEISR.l2 0000d878 TEASEISR.l3 00006e14 MISCISR 000000fc _OS2.size 0000d88a CKSUM 0000d88b _D000.end 0000f000 _GFX 0000f000 TOPMOUNT 0000f100 MIDMOUNT 0000f200 MIDCITY1 0000f300 MIDCITY2 0000f400 MIDCITY3 0000f500 MIDCITY4 0000f600 ROCKBG 0000f700 ROCKCRAT 0000f880 SPIN1 0000f900 SPIN2 0000f980 LMPFONT 00000030 TITLESP.x 00000014 TITLESP.y 0000f9c1 TMTBL 0000f9ce TMTBL.m0 0000f9d8 TMTBL.m1 0000f9e2 TMTBL.m2 0000f9ec TMTBL.m3 0000f9f6 TMTBL.m4 0000fa00 TMTBL.m5 0000fa0a TMTBL.m6 0000fa14 TMTBL.m7 0000fa1e HUT 00000000 _gfx_w 00000000 _gfx_eo 00000008 _gfx_x 00000080 _gfx_b 0000fa42 GROUND 0000fa4a WHEELS 00000000 WHEELS.pnp 00000002 WHEELS.npn 00000004 WHEELS.nnn 00000006 WHEELS.mmm 00000808 WHEELS.__m0 00000000 WHEELS.__m1 00000800 WHEELS.__n0 00000008 WHEELS.__n1 00000000 WHEELS.__p0 00000808 WHEELS.__p1 00002020 WHEELS._m_0 00000000 WHEELS._m_1 00002000 WHEELS._n_0 00000020 WHEELS._n_1 00000000 WHEELS._p_0 00002020 WHEELS._p_1 00008080 WHEELS.m__0 00000000 WHEELS.m__1 00008000 WHEELS.n__0 00000080 WHEELS.n__1 00000000 WHEELS.p__0 00008080 WHEELS.p__1 0000fa52 WHEELS.data 0000fa58 WHEELS.jump 00000a5a _GFX.size 0000fa5a _FONT 0000faa3 JOEFNT 0000fac6 CREEPFNT 0000fb0e CREEPFNT2 0000fb19 CREEPFNT3 0000fb29 CREEPFNT4 0000012c _FONT.size 0000fb86 _SFX 0000fb86 SFXINI 0000fb9c SFXIND 0000fb9c SFXIND.BFIRE 0000fc9a SFXBFIRE 00000001 FXBFIRE 0000fb9d SFXIND.SMEXP 0000fc3c SFXSMEXP 00000002 FXSMEXP 0000fb9e SFXIND.JUMP2 0000fc49 SFXJUMP2 00000003 FXJUMP2 0000fb9f SFXIND.ALIEN 0000fca4 SFXALIEN 00000004 FXALIEN 0000fba0 SFXIND.LGEXP 0000fc3c SFXLGEXP 00000005 FXLGEXP 0000fba1 SFXIND.DING 0000fcde SFXDING 00000006 FXDING 0000fba2 SFXIND.JUMP 0000fc27 SFXJUMP 00000007 FXJUMP 0000fba3 SFXIND.PLANT 0000fba7 SFXPLANT 00000008 FXPLANT 0000fba4 SFXIND.SAUC 0000fbdd SFXSAUC 00000009 FXSAUC 0000fba5 SFXIND.DIED 0000fc5c SFXDIED 0000000a FXDIED 0000fba6 SFXIND.SKID 0000fcec SFXSKID 0000000b FXSKID 0000059e SFXPLANT.a 0000054e SFXPLANT.b 000004e2 SFXPLANT.c 000004ba SFXPLANT.d 00006b0c SFXRET 00006bfa SFXGET 0000fbbc SFXPLANT.ok 0000fbd5 SFXPLANT.tbl 00006c0a SFXPUT.1 0000fbc4 SFXPLANT.loop 0000fbcd SFXPLANT.next 00006b1a SFXDIE 0000fc1f SFXSAUC.tgt 0000fc04 SFXSAUC.same 0000fc17 SFXSAUC.nrnd 0000fc1b SFXSAUC.doit 0000fc32 SFXJUMP.novol 00006c08 SFXPUT 0000fc4c SFXJUMP2.1 0000fc47 SFXLGEXP.ok 0000fc58 SFXJUMP2.novol 0000fc81 SFXDIED.fade 0000fc79 SFXDIED.ok 0000fc97 SFXDIED.leave 0000fcac SFXALIEN.ok 0000fcc6 SFXALIEN.vtbl 0000fcda SFXALIEN.ttbl 0000fcf9 SFXSKID.switch 0000fcff ENV 0000fcff ENV.01 00000000 NULL_P 0000fd0b M_INTRO 0000fd12 M_INTRO.patterns 0000fd1a M_INTRO.p000 0000fd25 M_INTRO.p001 0000fd29 M_INTRO.p002 0000fd2a M_INTRO.p003 0000fd2c M_INTRO.p004 0000fd2d M_INTRO.p005 00000000 _i 0000000c _v 00000003 _l 00000041 _n0 0000000b _n1 00000033 _o 00000013 _n2 0000fd2e M_GAME 0000fd3e M_GAME.patterns 0000fd56 M_GAME.p000 0000fd5f M_GAME.p001 0000fd69 M_GAME.p002 0000fd72 M_GAME.p003 0000fd7c M_GAME.p004 0000fd85 M_GAME.p005 0000fd91 M_LEVEL 0000fd96 M_LEVEL.patterns 0000fd9a M_LEVEL.p000 0000fdb0 M_COURS 0000fdb8 M_COURS.patterns 0000fdc4 M_COURS.p000 0000fdd4 M_COURS.p001 0000fdda M_COURS.p002 0000fde0 M_OVER 0000fde5 M_OVER.patterns 0000fde9 M_OVER.p000 0000026f _SFX.size 0000fdf5 _SCTBL 0000fdf5 SCTBL 0000fdf5 SCTBL.top 0000fdf5 SCTBL.00 0000fe15 SCTBL.dxt_00 0000fe65 SCTBL.dyt_00 0000fdf9 SCTBL.01 0000fe2c SCTBL.dxt_01 0000fe72 SCTBL.dyt_01 0000fdfd SCTBL.02 0000fe47 SCTBL.dxt_02 0000fe89 SCTBL.dyt_02 0000fe01 SCTBL.03 0000fe56 SCTBL.dxt_03 0000fe96 SCTBL.dyt_03 0000fe05 SCTBL.04 0000fe09 SCTBL.05 0000fe0d SCTBL.06 0000fe11 SCTBL.07 000000b0 _SCTBL.size 0000fea5 _POW10 0000fea5 _PW10 00000005 _POW10.size 0000feaa _F000.end 00005000 _TOPLEV 00005000 ROMHDR 00006da8 START 00006d8b TITLE 0000000d _TOPLEV.size 0000500d _BGMP 0000500d BGRAND 00005014 BGBRAND 0000502f BGBRAND.leave 00005018 BGBRAND.l1 0000502b BGBRAND.l2 00005045 BG_SETTHINK 00005047 BG_SETTHINK.1 0000505c BGT_MINE1.not1 00005083 BGT_PLANT1.pltb 0000507f BGT_PLANT1.plta 0000507b BGT_PLANT1.pltd 00005077 BGT_PLANT1.pltc 00005085 BGT_PLANT1.done 0000509a BGT_TURRET1.not_1st 00005095 BGT_TURRET1.1st 000050ab BGT_TURRET1.ok_fire 000050ae BGT_TURRET1.no_fire 00006137 BGFIRE.c 000050c3 BGT_STAL0.1 000050f3 BGT_STAL2.hit 00006b5c PLAYSFX 00005108 SAUC_PICK_D 00005113 SAUC_PICK_D.try_next 0000511f SAUC_PICK_D.not_ok_pos 00005134 SAUC_PICK_D.ok_pos 00005127 SAUC_PICK_D.not_ok_neg 00005138 SAUC_PICK_D.ok_neg 0000513c SAUC_PICK_D.unpack_vel_ti 0000518a BGT_SAUC_LR.next_is_ud 00005183 BGT_SAUC_LR.set_next_stat 00005181 BGT_SAUC_LR.spinner 000051cc BGT_SAUC_F1.cd2 000051e6 BGT_SAUC_F1.com_dly 0000613b BGFIRE.b 000051db BGT_SAUC_F1.common 000051f6 BGT_SAUC_F1.next_is_ud 000051ef BGT_SAUC_F1.set_next_stat 000051e6 BGT_SAUC_F0.no_fire 0000524a BGT_SAUC_F0.ok_fire 0000522c BGT_SAUC_F0.skipnice 0000524e BGT_SAUC_F0.no_fire1 00005242 BGT_SAUC_F0.nofireovertan 0000613f BGFIRE.a 0000525d BGT_SAUC_EX.got_xvel 0000526d BGT_FOLLOW0.l 00005276 BGT_FOLLOW0.nope 0000527c BGT_FOLLOW0.found_it 00005290 BGT_FOLLOW0.ret 00005287 BGT_FOLLOW0.set_it 000052f2 FLR_HONE 000052ad BGT_FOLLOW1.rev_follower 000052bb BGT_FOLLOW1.rloop 000052c7 BGT_FOLLOW1.nextr 000052d3 BGT_FOLLOW1.float 000052e1 BGT_FOLLOW1.hone3 000052d9 BGT_FOLLOW1.hone 000052e7 BGT_FOLLOW1.sync 00005321 FLR_SYNC 000052f7 FLR_HONE.notz 0000530d FLR_HONE.o ???????? FLR_HONE.lok 00005320 FLR_HONE.hok 0000533d FLR_SYNC.skip 0000006e BGT_FLEXIT.laymine 0000535e BGT_FLEXIT.set 0000535c BGT_FLEXIT.nomine 00005374 BGT_FLADV.advance 00005378 BGT_FLADV.leave 00006133 BGFIRE.d 00005376 BGT_FLADV.set 0000036f _BGMP.size 0000537c _ENG1 0000537c ENGINE1 0000537e ENGINE1.1 000055d1 ENGINE1.nomtn 00005549 ENGINE1.mloop_e 000054bf ENGINE1.mloop_o 000055d1 ENGINE1.mloop_done 000055dd @@foo 000057a1 E1.skip_card 000055e2 UPCRD 000055ee UPCRD.nohb0 000056ae UPCRD.no_bot 00005607 UPCRD.nohbkos 0000560e UPCRD.ccz 00005617 UPCRD.crow 000056ae UPCRD.done_upcrd 0000569c UPCRD.done_nxtrc 00005674 UPCRD.cue_spawn 00005679 UPCRD.end_of_lvl 0000565a UPCRD.do_rc 00005698 UPCRD.exitmarker 00005681 UPCRD.lvlmarker 00005690 UPCRD.caution 00005670 UPCRD.notcratz 00005675 UPCRD.c 000056ae CKBRC 000056c5 CKBRC.i_loop 00005707 CKBRC.buggy_ok 000056d1 CKBRC.not_crater 00005c5f MJHIDX 000056f3 CKBRC.maybe_score 00005712 CKBRC.leave 00005712 UPHBP 00005793 UPHBP.nohb 00005774 UPHBP.disphb 00005768 UPHBP.killhb 0000574a UPHBP.rk12a 00005748 UPHBP.rk12b 0000573d UPHBP.rk3a 0000573b UPHBP.rk3b 0000573a UPHBP.rk3c 0000574e UPHBP.donerock 00006a2a ADDSCORE.cst 0000578d UPHBP.hbdie 0000578f UPHBP.hbcok 0000579a UPHBP.fcntok 000057a1 UPHBP.hbcnt2ok 000057b1 E1.not_busy 00006e16 MISCISR.1 000057be E1.muxok 00000447 _ENG1.size 000057c3 _ENG2 000057c3 ENGINE2 ???????? DODEAD 00005bde E2.died 000057cb UPBGP 000057e7 UPBGP.njvl 000057db UPBGP.vnr 000057e4 UPBGP.vdok 000057ea UPBGP.grok 000057ef UPBGP.gpok 0000580b UPBGP.norock 00005823 UPBGP.jok 00005821 UPBGP.noj 00005829 UPBGP.gwhl 00005836 UPBGP.gdone 00005863 UPBGP.tprio 0000585f UPBGP.mprio 0000586b UPBGP.do_mid 0000588c UPBGP.do_top 000058a9 UPBGP.do_none 00005883 UPBGP.ncity 00005887 UPBGP.iscity 000058a7 UPBGP.m_done 000058a1 UPBGP.asis 00006dfb UPSND 00005969 E2.spdone 00005e25 CLRSP 00005bcb E2.bgdone 00005d93 TTLSP 00005d65 UPBSP 000058be UPSPP 000058f8 UPSPP.no_hscroll 000058c6 UPSPP.lmscroll 000058f6 UPSPP.no_level_marker 000058ee UPSPP.not_major_ckpt 000058f3 UPSPP.skip_color 00005f9d CCTBL 000058f6 UPSPP.done_level_marker 0000594a UPSPP.no_hscroll_1 00000005 UPSPP.sph 00005938 UPSPP.l 00005d15 UPSPA 0000595f E2.muxonly 00005c8c UPMUX 00005984 @@nocue 0000597e @@doexit 00005981 @@donecue 0000602f BGSPAWN 000060e9 BGDOEXIT 00005b66 @@even 00005992 @@odd 00005992 CKGGB 00005992 CKGGB.checkit 000059a7 CKGGB.nohb 000059a9 CKGGB.ggbinit 000059c2 CKGGB.ggbskip 000059bd CKGGB.ggbdie 000059d4 CKGGB.do_bullet 00005ab4 CKGGB.no_bullet 000059d8 CKGGB.checkmob 00005aae CKGGB.skipmob 000059f4 CKGGB.out1 00005a1a CKGGB.hit 00005a08 CKGGB.out2 00005ab0 CKGGB.out3 00005a25 CKGGB.notbgb 00005a2c CKGGB.process 00005a51 CKGGB.notsauc 00005a47 CKGGB.waveok 00006aa8 WBONUS 00006a3b ADDSCORE.reg 00005a84 CKGGB.skipscore 00005a70 CKGGB.randscore 00005a83 CKGGB.donescore 00005a80 CKGGB.dorand 00006a2d ADDSCORE.rnd 00005a92 CKGGB.nobld 00005aa4 CKGGB.kill 00005aa0 CKGGB.nostal 0000618e BGKILL 00005ab4 CKBGB 00005ac1 CKBGB.nomobhit ???????? White 00005b62 CKBGB.skipdbloop 00005ad2 CKBGB.db1st 00005acd CKBGB.dbskip 00005b50 CKBGB.dbdone 00005ad2 CKBGB.dbloop 00005ae2 CKBGB.xok 00005b42 CKBGB.disspinX 00005b4d CKBGB.dbyok 00005af6 CKBGB.spinb 00005b49 CKBGB.disable 00005b46 CKBGB.disable0 00005b46 CKBGB.disable1 00005b46 CKBGB.disable2 00005b46 CKBGB.disable3 00005b46 CKBGB.disable4 00005b46 CKBGB.disable5 00005b46 CKBGB.disable6 00005b46 CKBGB.disspin 00005b59 CKBGB.nosmexp 00005b62 CKBGB.nolgexp 00006b66 DOPLAYSFX 00006109 UPBGM.1 00005efd TICTSK 00005b69 UPANI 00005b6b UPANI.loop 00005b91 UPANI.next 00006103 UPBGM.0 00005b98 CKBGP 00005b9b CKBGP.cklp 00005bc6 CKBGP.next 00005bc4 CKBGP.notsauc 00005e78 ENGINE2_RET 00005bda E2.notwinkle 00005e38 TWINKLE 00006e30 RAND 00005be4 RSGGB 00005bfd MJHTBL 00005c06 MJHTBL.rock1 00005c17 MJHTBL.rock2 00005c2c MJHTBL.rock3 00005c3d MJHTBL.crat1 00005c52 MJHTBL.crat2 00005c6b HALTENGINE 00005c6f SPINIT 00006ef8 FILLZERO 00005c7e ENGDONE 00005e28 CLRSP.1 00005cc2 UPMUX.gp1mobf 00005c9f UPMUX.gp1skip 00005ca1 UPMUX.gp1mobl 00005ca9 UPMUX.1cntok 00005cf9 UPMUX.gp2mobf 00005cd6 UPMUX.gp2skip 00005cd8 UPMUX.gp2mobl 00005ce0 UPMUX.2cntok 00005d10 UPMUX.done 00005d0f UPMUX.d1 00005d30 UPSPA.spa 00005d39 UPSPA.no_level_marker 00005d4e UPSPA.gp1full 00005d60 UPSPA.spadone 00005d79 UPBSP.1 00005d9e TTLSP.tsplp 00005dbd TTLSP.same_msg 00006757 CSTKCLR 00005e08 TTLSP.offright 00005e05 TTLSP.done 00005df1 TTLSP.tmok 00005dfc TTLSP.nos 00005e1f TTLSP.final 00006ab1 DISPPEAK 00006aab DISPFINAL 00005e2c CLRSP.lp1 00005e5d TWINKLE.done 00005e4d TWINKLE.toggle 00005e5c TWINKLE.clear 00005e5e TWINKLE.tbl 00005e5c TWINKLE.ok 00005e62 RUNENG 00000080 _init_cst_00 0000003f _init_cst_01 000000bf _init_cst_02 0000003e _init_cst_03 000000fc _init_cst_04 000000ed _init_cst_05 000000f1 _init_cst_06 000000f5 _init_cst_07 000000f9 _init_cst_08 00000020 _init_cst_09 000000ff _init_cst_0A 00000038 _init_cst_0B 00000031 _init_cst_0C ???????? _init_cst_0D ???????? _init_cst_0E ???????? _init_cst_0F 000002f0 _init_cst_10 0000fa56 _init_cst_11 0000f981 _init_cst_12 0000f000 _init_cst_13 000039c0 _init_cst_14 00003fff _init_cst_15 0000fa1e _init_cst_16 ???????? _init_cst_17 ???????? _init_cst_18 ???????? _init_cst_19 ???????? _init_cst_1A ???????? _init_cst_1B ???????? _init_cst_1C ???????? _init_cst_1D ???????? _init_cst_1E ???????? SEEKKEYS 00005e6c RUNENG.loop ???????? RUNENG.waitnokey 00006e56 WAITNOKEY 00005e78 RUNENG.idle 00005ece RUNENG.done 00005e7e RUNENG.not_done 00006a71 DEFSCORE ???????? RUNENG.skiptss ???????? UPTSS 00006f3d DBHC 00005e96 RUNENG.game_hand 00005e89 RUNENG.title_hand 00005e90 RUNENG.maybe_done 00005ed5 RUNENG.pausing ???????? PRVLVL ???????? RSTLVL ???????? NXTLVL ???????? RUNENG.nodigit 00005eac RUNENG.go_fast 00005ea8 RUNENG.go_slow 00005eae RUNENG.set_vel 00005ef1 ACTTBL 00006f2d SHLTBL 00005fbc DOFIRE 00005fa5 DOJUMP 000065e2 RUNENG_RET_TITLE 000066af RUNENG_RET_NORMAL 00006b65 JRR5 00006e4b WAITKEY 00000000 ACTTBL.___ 00000001 ACTTBL.__f 00000002 ACTTBL.j__ 00000003 ACTTBL.j_f 00005ef1 ACTTBL.000 00005ef2 ACTTBL.001 00005ef3 ACTTBL.010 00005ef4 ACTTBL.011 00005ef5 ACTTBL.100 00005ef6 ACTTBL.101 00005ef7 ACTTBL.110 00005ef8 ACTTBL.111 00005ef9 TIC1ST 00005f0a TICTSK.show_initial_time 00005eff TICTSK.normal_update 00005f17 TICTSK.tic_ok 00006eb5 PRNUM16.z 00005f46 TICTSK.no_level_marker 00005f73 TICTSK.done_caut_life 00005f68 TICTSK.show_lives 00005f95 TICTSK.cauttbl 00005f80 TICTSK.no_pt 00005f93 TICTSK.done 00006ac8 DISPSCORE 00005fbb DOJUMP.nojump 00005ff4 DOFIRE.noupb 00005fd2 DOFIRE.do_fire_up 0000602a DOFIRE.leave 0000602b DOFIRE.tbl 0000086c _ENG2.size 0000602f _BGENG 0000603b BGSPAWN.first 00006036 BGSPAWN.sploop 00006042 BGMAKE 00006043 BGMAKE.1 00006048 BGMAKE.find 00006050 BGMAKE.found 0000605f BGMAKE.not_plant 00006071 BGMAKE.cont 000060c9 BGSTBL 00006090 BGMAKE.notstal 000060c7 BGMAKE.nospawn 000060c3 BGMAKE.notf 000060f3 BGDOEXIT.loop 000060fd BGDOEXIT.nope ???????? BUILD_DEMO ???????? UPDMO ???????? DIG_CNT ???????? @@cmd_delaying ???????? DIG_PTR ???????? @@cmd_loop ???????? @@next_cmd ???????? @@cmd_demo_over ???????? @@cmd_jump ???????? @@cmd_fire ???????? @@cmd_setvel ???????? @@cmd_spawn ???????? @@setvel_tbl ???????? SCHEDEXIT 00006103 UPBGM 00006116 UPBGM.first_bgmp 00006110 UPBGM.next_bgmp 00006120 UPBGM.done_bgmp 00006121 UPBGM.active_bgmp 00006129 UPBGM.expired 0000612e UPBGM.dnR4 0000612f UPBGM.done 00006133 BGFIRE 00006188 BGFIRE.cc 00006188 BGFIRE.tbl 00006141 BGFIRE.doit 0000618a BGFIRE.bb 0000618c BGFIRE.aa 00006150 BGFIRE.slotlp 0000617d BGFIRE.nobgfire 0000617d BGFIRE.done 00000170 _BGENG.size 0000619f _GAME 0000619f BEGINNER 000061a5 CHAMPION 000061ab CNAME 000061b3 CNAME.moon 000061b6 CNAME.mars 000061b9 CNAME.plut 000061bc CNAME.merc 00000206 FMTSEL 00000003 FMTUNS 000061c0 WORLDMENU 00006546 CKPTISR 00006b24 SFXINIT 000061ce WORLDMENU.again 000061d2 WORLDMENU.world 00006e77 P16.R 0000655d LOADCRP 0000688d SETGFX 0000630e FIXGFX 00006244 WORLDMENU.draw_merc 0000636c CITYMNU 00006226 WORLDMENU.draw_mntn 000067d2 DRAWGAME.city_fill1 00006369 MNTNMNU 00006239 WORLDMENU.finish_mntn 00006277 WORLDMENU.done_draw 00006809 DRAWGAME.mntn_loop 00006271 WORLDMENU.mntn_loop 0000625a WORLDMENU.a 00006eef FILLMEM.vlp 00006291 WORLDMENU.skip_ground 0000636f GROWMNU 00006ef0 FILLMEM.lp 00006e24 WAIT1 0000638c VIGMOB 00006375 FIXMOB 00006ac2 DISPSCORE2 000062b9 WORLDMENU.skill 000062c5 WORLDMENU.beginner 00006e75 P16.LP 000063d4 TINK 000062d4 WORLDMENU.notink 00006301 WORLDMENU.leave 000062f3 WORLDMENU.down 000062ef WORLDMENU.right 000062f8 WORLDMENU.up 000062eb WORLDMENU.left 000062fa WORLDMENU.maybe 000068dc SETCSG 000065e8 WORLDMENU_RET 00006319 FIXGFX.inv_mntn 0000631c FIXGFX.loop 00006346 FIXGFX.not_merc 0000632f FIXGFX.loopm 00006339 FIXGFX.n 00006340 FIXGFX.copy 0000634b FIXGFX.loop2 00006357 FIXGFX.hloop 00006e16 MISCISR.wtimer 00006365 MENUISR 0000637a FIXMOB.oloop 0000637c FIXMOB.loop 0000638c VIGMOB.moon 00000232 VIGMOB.a0 00000030 VIGMOB.a1 00001919 VIGMOB.a2 00000219 VIGMOB.b0 00000026 VIGMOB.b1 0000190a VIGMOB.b2 00000241 VIGMOB.c0 0000013f VIGMOB.c1 00000927 VIGMOB.c2 00000222 VIGMOB.d0 00000135 VIGMOB.d1 00000804 VIGMOB.d2 0000022a VIGMOB.e0 0000013f VIGMOB.e1 00000804 VIGMOB.e2 0000023a VIGMOB.f0 00000126 VIGMOB.f1 00000804 VIGMOB.f2 0000639e VIGMOB.mars 000063b0 VIGMOB.pluto 000063c2 VIGMOB.mercury 000063d8 TINK.tbl 000063df CKPNT 00006554 CKPTISR.1 000063f2 CKPNT.end_of_course 00006c38 PLAY.mus 000063f6 CKPNT.wait_music 00006c15 WAIT_SONG 00006518 CPDAT.norec 00006406 CKPNT.dloop 00006414 CKPNT.special 00006452 CKPNT.dldone 0000641c CKPNT.disp_point 0000643a CKPNT.disp_avg 0000641b CKPNT.disp_rec 0000642c CKPNT.color_ok 00006eb0 PRNUM16.bfw 00006510 PARTBL 0000649f CKPNT.not_z 0000646c CKPNT.tank_bonus 0000647a CKPNT.tb 000064b4 CKPNT.bonus 000064f9 CKPNT.done 000064f2 CKPNT.bl1st 000064d1 CKPNT.bloop 00006eb1 PRNUM16.bw 000066b8 CKPNT_RET 00006923 TOCITY 00006918 TOCRATER 00006518 CPDAT 00006527 CPDAT.congrat 00006530 CPDAT.yourtime 00006537 CPDAT.reach 0000653f CPDAT.avgtime 00006556 CKPTISR.2 0000655a CRPTBL 00006573 LOADCRP.course0 00006dd0 LOADFONT.1 0000657b WINIT 0000658c GAMELOOP 0000658c GAMELOOP.title ???????? SKIPTITLE 00006594 TITLESCREEN 000065b9 GAMELOOP.tmclr_ok 000068ff INITLVL 0000675f DRAWGAME 000065e6 GAMELOOP.menu ???????? SKIPHUT 00006627 GAMELOOP.cont 00006618 GAMELOOP.do_continue 00006620 GAMELOOP.again 000066a9 GAMELOOP.do_restart 00006c1b WAIT_SONG1 00006681 GAMELOOP.beg 00006e7b P16.S 0000668b TXTCOURSE 00006eed FILLZERO.lp 000066cb GAMELOOP.died 000066c5 GAMELOOP.notafterz 000066be GAMELOOP.afterz 000069db FINALOVER 000066dc GAMELOOP.x 0000670e DIEDISR 000066f0 GAMELOOP.diedspin 000066f8 GAMELOOP.diedwait 00006707 GAMELOOP.over 00006904 INITLVL.1 00006953 GAMEOVER 00006735 DIEDISR.l 0000674a MNTNCLR 0000674f CRATCLR 00006754 CITYCLR 00000005 X_RKBG 00000005 C_RKBG 00001006 X_STAL 0000000e C_STAL 00006790 DRAWGAME.notwinkle 00006788 DRAWGAME.twloop 0000681f DRAWGAME.underground 000067bb DRAWGAME.in_city 000067ae DRAWGAME.crat_loop 000067b6 DRAWGAME.crat_ok 000067ea DRAWGAME.done_mid 000067d0 DRAWGAME.city_fill_start 000067cc DRAWGAME.city_fill 000067d5 DRAWGAME.city_loop 00006819 DRAWGAME.finish_mntn 00006807 DRAWGAME.mntn_fill 00006856 DRAWGAME.done_field 00006881 DRAWGAME.xxx 000068a4 SETGFX.start_crater 00006896 SETGFX.start_city 000068a0 SETGFX.cities 000068a8 SETGFX.start_cont 000068cd SETGFX.asis 000068f1 SETCSG.ok ???????? WCKPT ???????? MOON_B.ckpt_0k ???????? MOON_B.ckpt_0l ???????? MOON_B.ckpt_0m ???????? MOON_B.ckpt_0n ???????? MOON_B.ckpt_0o ???????? MOON_B.ckpt_0p ???????? MOON_B.ckpt_0q ???????? MOON_B.ckpt_0r ???????? MOON_B.ckpt_0s ???????? MOON_B.ckpt_0t ???????? MOON_B.ckpt_0u ???????? MOON_B.ckpt_0v ???????? MOON_B.ckpt_0w ???????? MOON_B.ckpt_0x ???????? MOON_B.ckpt_0y ???????? MOON_B.ckpt_0z ???????? MOON_C.ckpt_0k ???????? MOON_C.ckpt_0l ???????? MOON_C.ckpt_0m ???????? MOON_C.ckpt_0n ???????? MOON_C.ckpt_0o ???????? MOON_C.ckpt_0p ???????? MOON_C.ckpt_0q ???????? MOON_C.ckpt_0r ???????? MOON_C.ckpt_0s ???????? MOON_C.ckpt_0t ???????? MOON_C.ckpt_0u ???????? MOON_C.ckpt_0v ???????? MOON_C.ckpt_0w ???????? MOON_C.ckpt_0x ???????? MOON_C.ckpt_0y ???????? MOON_C.ckpt_0z ???????? MARS_B.ckpt_0k ???????? MARS_B.ckpt_0l ???????? MARS_B.ckpt_0m ???????? MARS_B.ckpt_0n ???????? MARS_B.ckpt_0o ???????? MARS_B.ckpt_0p ???????? MARS_B.ckpt_0q ???????? MARS_B.ckpt_0r ???????? MARS_B.ckpt_0s ???????? MARS_B.ckpt_0t ???????? MARS_B.ckpt_0u ???????? MARS_B.ckpt_0v ???????? MARS_B.ckpt_0w ???????? MARS_B.ckpt_0x ???????? MARS_B.ckpt_0y ???????? MARS_B.ckpt_0z ???????? MARS_C.ckpt_0k ???????? MARS_C.ckpt_0l ???????? MARS_C.ckpt_0m ???????? MARS_C.ckpt_0n ???????? MARS_C.ckpt_0o ???????? MARS_C.ckpt_0p ???????? MARS_C.ckpt_0q ???????? MARS_C.ckpt_0r ???????? MARS_C.ckpt_0s ???????? MARS_C.ckpt_0t ???????? MARS_C.ckpt_0u ???????? MARS_C.ckpt_0v ???????? MARS_C.ckpt_0w ???????? MARS_C.ckpt_0x ???????? MARS_C.ckpt_0y ???????? MARS_C.ckpt_0z ???????? PLUT_B.ckpt_0k ???????? PLUT_B.ckpt_0l ???????? PLUT_B.ckpt_0m ???????? PLUT_B.ckpt_0n ???????? PLUT_B.ckpt_0o ???????? PLUT_B.ckpt_0p ???????? PLUT_B.ckpt_0q ???????? PLUT_B.ckpt_0r ???????? PLUT_B.ckpt_0s ???????? PLUT_B.ckpt_0t ???????? PLUT_B.ckpt_0u ???????? PLUT_B.ckpt_0v ???????? PLUT_B.ckpt_0w ???????? PLUT_B.ckpt_0x ???????? PLUT_B.ckpt_0y ???????? PLUT_B.ckpt_0z ???????? PLUT_C.ckpt_0k ???????? PLUT_C.ckpt_0l ???????? PLUT_C.ckpt_0m ???????? PLUT_C.ckpt_0n ???????? PLUT_C.ckpt_0o ???????? PLUT_C.ckpt_0p ???????? PLUT_C.ckpt_0q ???????? PLUT_C.ckpt_0r ???????? PLUT_C.ckpt_0s ???????? PLUT_C.ckpt_0t ???????? PLUT_C.ckpt_0u ???????? PLUT_C.ckpt_0v ???????? PLUT_C.ckpt_0w ???????? PLUT_C.ckpt_0x ???????? PLUT_C.ckpt_0y ???????? PLUT_C.ckpt_0z ???????? MERC_B.ckpt_0k ???????? MERC_B.ckpt_0l ???????? MERC_B.ckpt_0m ???????? MERC_B.ckpt_0n ???????? MERC_B.ckpt_0o ???????? MERC_B.ckpt_0p ???????? MERC_B.ckpt_0q ???????? MERC_B.ckpt_0r ???????? MERC_B.ckpt_0s ???????? MERC_B.ckpt_0t ???????? MERC_B.ckpt_0u ???????? MERC_B.ckpt_0v ???????? MERC_B.ckpt_0w ???????? MERC_B.ckpt_0x ???????? MERC_B.ckpt_0y ???????? MERC_B.ckpt_0z ???????? MERC_C.ckpt_0k ???????? MERC_C.ckpt_0l ???????? MERC_C.ckpt_0m ???????? MERC_C.ckpt_0n ???????? MERC_C.ckpt_0o ???????? MERC_C.ckpt_0p ???????? MERC_C.ckpt_0q ???????? MERC_C.ckpt_0r ???????? MERC_C.ckpt_0s ???????? MERC_C.ckpt_0t ???????? MERC_C.ckpt_0u ???????? MERC_C.ckpt_0v ???????? MERC_C.ckpt_0w ???????? MERC_C.ckpt_0x ???????? MERC_C.ckpt_0y ???????? MERC_C.ckpt_0z ???????? @@done_redraw 0000691d TOCRATER.1 00006928 TOCITY.1 00006922 TOCRATER.done 00006935 TOCITY.done 00006931 TOCITY.not_mercury 00006936 TOPLANET 00006952 TOPLANET.done 0000694a TOPLANET.not_mercury 00006a1b CONTISR 000069ea GAMEOVER.nocont 000069b5 GAMEOVER.first 000069b2 GAMEOVER.loop_yn 000069bc GAMEOVER.keyl 000069d1 GAMEOVER.done_yn 000069c9 GAMEOVER.right 000069c8 GAMEOVER.left 000069da GAMEOVER.done 00006a06 GAMEOVER.beg 00006e76 P16.P 00006e4c WAITKEY.1 00006a2a ADDSCORE 00006a47 ADDSCORE.peakagain 00006a5b ADDSCORE.checkbon 00006aa3 XTRATNK 00006a6b ADDSCORE.nobon 00006a78 DEFSCORE.1 00006a80 DEFSCORE.lp 00006a93 DEFSCORE.nxt 00006a8e DEFSCORE.sc 00006ae8 FINALTXT 00006ab5 DISPFINAL.x 00006aef PEAKTXT 00006ace DISPFINAL.y 00006ad0 DISPFINAL.z 00006add DISPFINAL.zend 00000957 _GAME.size 00006af6 _SENG 00006af6 UPSFX 00006b01 UPSFX.loop 00006b0c UPSFX.next 00006b14 UPSFX.not3 00006b5e PLAYSFX.1 00006b64 PLAYSFX.nope 00006b71 DOPLAYSFX.notsauc 00006b71 DOPLAYSFX.again 00006b83 DOPLAYSFX.loop 00006b7f DOPLAYSFX.skip 00006b93 DOPLAYSFX.last 00006b81 DOPLAYSFX.next 00006b90 DOPLAYSFX.restart_sfx 00006b99 DOPLAYSFX.doit 00006bdb DOPLAYSFX.done 00006bea SFXPSG 00006bb4 DOPLAYSFX.no_noise 00006bbf DOPLAYSFX.tone 00006bc1 DOPLAYSFX.no_tone 00006bd1 DOPLAYSFX.no_env 00006be6 DOPLAYSFX.leave 000001c5 RFRSH2POS 000001c8 POS2NOTE 00000066 COUNT2PER 0000ff90 PER2VOL 00000077 VOL2VOL 00006c15 WAIT_SONG.spin 00006c1f WAIT_SONG1.spin 00006c2c WAIT_SONG1.nope 00006c35 WAIT_SONG1.done 00006c39 INIT_SONG 00006c51 INIT_PAT 00006c69 INIT_PAT.pat_ok 00006c65 INIT_PAT.restart 00006c7b PLAY_SONG 00006cd5 PLAY_SONG.done 00006cb6 PLAY_SONG.notes_ok 00006cd6 UPD_CH 00006ca0 PLAY_SONG.tick 00006caa PLAY_SONG.cnt 00006cb8 PLAY_SONG.upd_psg 00006d05 UPD_PSG 00006cca PLAY_SONG.upd_tick 00006cd3 PLAY_SONG.tick_ok 00006cdf UPD_CH.ch_new 00006cec UPD_CH.data_ok 00006cf5 UPD_CH.skip_sav 00006d04 UPD_CH.ch_ok 00006d11 UPD_PSG.cnt_ok 00006d59 PER_TBL 00006d34 UPD_PSG.env 00006d40 UPD_PSG.env_X1 00006d43 UPD_PSG.env_1X 00006d4b UPD_PSG.upd_vol 00006d58 UPD_PSG.done 00000295 _SENG.size 00006d8b _OS 00006da8 START.pass 00006db7 INITISR 00006dda LOADFONT.isr 00006de5 LOADFONT.gramloop 00006df9 LOADFONT.gramdone 00006df0 LOADFONT.charloop 00006e0a UPSND.nosfx 00006e0e BISTISR 00006e1d MISCISR.expired 00006e28 WAIT.1 00006e2b WAIT.loop 00006e4f WAITKEY.wk 00006e57 WAITKEY.waitnokey 00006e5b WAITKEY.stillnk 00006e70 P16 00006e71 P16.LS 00006e74 P16.FLP 00006e84 P16.loop 00006e8f P16.a 00006ea2 P16.done 00006e9d P16.b 00006ea8 PRNUM16 ???????? _NO_PRNUM16.l 00006ea8 PRNUM16.l 00006ea9 PRNUM16.l1 00006eb7 PRNUM16.z2 ???????? _NO_PRNUM16.b 00006eb2 PRNUM16.b 00006eb3 PRNUM16.b1 00006eb6 PRNUM16.z1 00006ec8 PRNUM16.lblnk 00006ec5 PRNUM16.llp 00006ed2 PRNUM16.ldone 00006ed3 PRNUM16.digit 00006edc PRNUM16.dig1 00006eea PRNUM16.done ???????? PRNUM32 ???????? _WITH_PRNUM32 00006edd PRNUM16.cont 00006edf PRNUM16.spcl 00006edc PRNUM16.nxdig 00006edf PRNUM16.div 00006ef1 FILLMEM.p 00006ef9 FILLMEM 00006f03 MENUINP.db 00006f09 MENUINP.disc 00006f29 KEYS 00006f1e MENUINP.kloop 00006f28 MENUINP.leave 00001100 _init_tmp 000001c9 _OS.size 00006f54 _5000.end ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2006, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;; ------------------------------------------------------------------------ ;; ;; ;; ;; "But this has taken us far afield from interface, which is not ;; ;; a bad place to be, since I particularly want to move ahead to ;; ;; the kludge. Why do people have so much trouble understanding ;; ;; the kludge? What is a kludge, after all, but not enough Ks, ;; ;; not enough ROMs, not enough RAMs, poor quality interface and too ;; ;; few bytes to go around? Have I explained yet about the bytes?" ;; ;; -- UNIX Fortune File ;; ;; ;; ;; ------------------------------------------------------------------------ ;; INCLUDE "bldflags.asm" ; should be in whatever our builddir is ;DOIDLEHST EQU 1 ; def/nodef Enable idle histogram ;DODEAD EQU 1 ; def/nodef DEAD instead of dying ;OLDMENU EQU 1 ; def/nodef Old, simple menu ;SEEKKEYS EQU 1 ; def/nodef Enable seek Keys ;SKIPINTRO EQU 1 ; def/nodef Skip LTO screen ;SKIPTITLE EQU 1 ; def/nodef Skip title screen ;SKIPHUT EQU 1 ; def/nodef Skip course intro w/ hut ;JUMPWORLD EQU 7 ; 0 .. 7, works only w/ OLDMENU ROMW 16 ; This makes life mucho easier. ;; ------------------------------------------------------------------------ ;; ;; Magic Constants ;; ;; ------------------------------------------------------------------------ ;; 0x13a COPYR EQU $13A ; Character # for Copyright circle-C 0x121 JZB EQU $121 ; Starting character # for my name... 0x0 C_BLK EQU $0 ; Black 0x1 C_BLU EQU $1 ; Blue 0x2 C_RED EQU $2 ; Red 0x3 C_TAN EQU $3 ; Tan 0x4 C_DGR EQU $4 ; Dark Green 0x5 C_GRN EQU $5 ; Green 0x6 C_YEL EQU $6 ; Yellow 0x7 C_WHT EQU $7 ; White 0x8 C_GRY EQU $8 ; Grey 0x9 C_CYN EQU $9 ; Cyan 0xa C_ORG EQU $A ; Orange 0xb C_BRN EQU $B ; Brown 0xc C_PNK EQU $C ; Pink 0xd C_LBL EQU $D ; Light Blue 0xe C_YGR EQU $E ; Yellow-Green 0xf C_PUR EQU $F ; Purple 0x0 X_BLK EQU $0 ; Black 0x1 X_BLU EQU $1 ; Blue 0x2 X_RED EQU $2 ; Red 0x3 X_TAN EQU $3 ; Tan 0x4 X_DGR EQU $4 ; Dark Green 0x5 X_GRN EQU $5 ; Green 0x6 X_YEL EQU $6 ; Yellow 0x7 X_WHT EQU $7 ; White 0x1000 X_GRY EQU $1000 ; Grey 0x1001 X_CYN EQU $1001 ; Cyan 0x1002 X_ORG EQU $1002 ; Orange 0x1003 X_BRN EQU $1003 ; Brown 0x1004 X_PNK EQU $1004 ; Pink 0x1005 X_LBL EQU $1005 ; Light Blue 0x1006 X_YGR EQU $1006 ; Yellow-Green 0x1007 X_PUR EQU $1007 ; Purple ; STIC MOB attribute bits 0x0 _X PROC ; bits in the MOB's X register 0x0 @@na EQU $0000 0x400 @@xsiz EQU $0400 ; Doubles width 0x200 @@visb EQU $0200 ; Visible vs. Invisible 0x100 @@intr EQU $0100 ; Object interacts w/ others ENDP 0x0 _Y PROC ; bits in the MOB's Y register 0x0 @@na EQU $0000 0x80 @@yres EQU $0080 ; 16-lines 0x0 @@siz1 EQU $0000 ; 1x height 0x100 @@siz2 EQU $0100 ; 2x height 0x200 @@siz4 EQU $0200 ; 4x height 0x300 @@siz8 EQU $0300 ; 8x height 0x400 @@xmir EQU $0400 ; Mirror horizontally 0x800 @@ymir EQU $0800 ; Mirror vertically ENDP 0x0 _A PROC ; bits in the MOB's A register 0x0 @@na EQU $0000 0x0 @@grom EQU $0000 ; MOB's card is in GROM 0x800 @@gram EQU $0800 ; MOB's card is in GRAM 0x2000 @@prio EQU $2000 ; MOB is behind background ENDP 0xff VFAST EQU $FF 0xbf VMED EQU $BF 0x6f VSLOW EQU $6F 0x1b VJUMP EQU $1B ;VBIAS EQU $80 0x5 MAXGP1 EQU 5 ; Max sprites in group 1 is 5 0x7 MAXGP2 EQU 7 ; Max sprites in group 2 is 7 0xc MAXSPR EQU MAXGP1+MAXGP2 ; Max total sprites is 12. ; We mux these onto 6 MOBs. 0x1007 X_TITL EQU X_PUR ; \_ Title screen color scheme 0xf C_TITL EQU C_PUR ; / 0x8 C_STAT EQU C_GRY ; Status bar color 0x1002 X_GRND EQU X_ORG ; \_ Ground color 0xa C_GRND EQU C_ORG ; / 0x1003 X_ROCK EQU X_BRN ; \_ Rock color 0xb C_ROCK EQU C_BRN ; / 0x7 TSKQM EQU $7 ; 7 task queue 0x1 M_DUP EQU $1 ; music flag : 'duplicate on channels B/C' 0x2 M_3CH EQU $2 ; music flag : '3-channel tune' 0x4 M_TICK EQU $4 ; music flag : 'ticks enabled' ;; ======================================================================== ;; ;; Magic memory locations ;; ;; ======================================================================== ;; 0x20 VBLANK EQU $20 ; Vertical-blank Handshake 0x21 COLSTK EQU $21 ; Color-stack/FGBG switch 0x28 CS0 EQU $28 ; Color Stack 0 0x29 CS1 EQU $29 ; Color Stack 1 0x2a CS2 EQU $2A ; Color Stack 2 0x2b CS3 EQU $2B ; Color Stack 3 0x2c CB EQU $2C ; Color for border 0xcf00 EC_LOC EQU $CF00 0x69 EC_MAG EQU $69 0xcf01 EC_POLL EQU $CF01 ;; ======================================================================== ;; ;; MACROS ;; ;; ======================================================================== ;; INCLUDE "macro/util.mac" ;; ======================================================================== ;; ;; UTIL.MAC Default Macro Set ;; ;; General utility macros. ;; ;; Joseph Zbiciak ;; ;; These macros are hereby released into the Public Domain. ;; ;; ;; ;; Macros defined in this file: ;; ;; ;; ;; SETISR a, r Sets ISR vector to point to 'a'. 'r' is a temp. ;; ;; MVOD r, a Writes 'r' as double-byte-data to 'a'. ;; ;; MVOD@ r, p Writes 'r' as double-byte-date via 'p'. ;; ;; COPY s, t, d Copies address 's' to address 'd' via 't'. ;; ;; COPY@ s, t, d Copies from ptr 's' to ptr 'd' via 't'. ;; ;; CALLD label Calls 'label' and disables interrupts. ;; ;; LOOP r, l Decrements 'r' and loops to 'l' if non-zero. ;; ;; LOOPPL r, l Decrements 'r' and loops to 'l' if non-negative. ;; ;; SWITCH r, tbl Implements switch-case via branch lookup table. ;; ;; SWITCHB r Implements switch-case via series of branches. ;; ;; SPINEQ a, r Loop while value at address is equal to 'r' ;; ;; SPINEQ@ p, r Loop while value at address is equal to 'r' ;; ;; SPINNE a, r Loop while value at address is not equal to 'r' ;; ;; SPINNE@ p, r Loop while value at address is not equal to 'r' ;; ;; SLRC r, n Shift Logically Right into Carry/Overflow ;; ;; DSLLC h, l, n 32-bit Shift Logically Left into Carry/Overflow ;; ;; DSLRC h, l, n 32-bit Shift Logically Right into Carry/Overflow ;; ;; DSARC h, l, n 32-bit Shift Arithmetically Right into Carry/Ov. ;; ;; SLLn r, n Shift Logically Left ;; ;; SLLCn r, n Shift Logically Left into Carry/Overflow ;; ;; SLRn r, n Shift Logically Right ;; ;; SARn r, n Shift Arithmetically Right ;; ;; SLRCn r, n Shift Logically Right into Carry/Overflow ;; ;; SARCn r, n Shift Arithmetically Right into Carry/Overflow ;; ;; DSLLCn h, l, n 32-bit Shift Logically Left into Carry/Overflow ;; ;; DSLRCn h, l, n 32-bit Shift Logically Right into Carry/Overflow ;; ;; DSARCn h, l, n 32-bit Shift Arithmetically Right into Carry/Ov. ;; ;; DADDR h0,l0,h1,l1 Add 32-bit value in h0:l0 to value in h1:l1 ;; ;; DSUBR h0,l0,h1,l1 Subtract 32-bit value in h0:l0 from h1:l1 ;; ;; XCHG a, b Exchange contents of reg 'a' with reg 'b' ;; ;; ORR a, b Bitwise OR register 'a' into register 'b' ;; ;; ORI a, b Bitwise OR constant 'a' into register 'b' ;; ;; OR@ a, b Bitwise OR value at ptr 'a' into register 'b' ;; ;; ORD a, b Bitwise OR value at addr 'a' into register 'b' ;; ;; XTND8 r Sign-extend 'r' from 8 to 16 bits. ;; ;; UNPKL r, l Unpack 8-bit values to lower byte of two regs. ;; ;; UNPKH r, l Unpack 8-bit values to upper byte of two regs. ;; ;; pack(h,l) Pack two 8-bit constants into a 16-bit constant ;; ;; packn(h,l) Pack two 4-bit constants into an 8-bit constant ;; ;; ;; ;; ======================================================================== ;; IF (DEFINED _UTIL_MAC) = 0 0x1 _UTIL_MAC EQU 1 MACRO ICALL mod INCLUDE "engine/%mod%.asm" ENDM MACRO __ LISTING "off" ENDM MACRO _ LISTING "on" ENDM ;; ======================================================================== ;; ;; SETISR a, r ;; ;; Sets ISR vector to point to address 'a'. Trashes 'r'. ;; ;; ;; ;; ARGUMENTS ;; ;; a Address of ISR ;; ;; r Register to use as a temporary (R0 thru R3) ;; ;; ======================================================================== ;; ;MACRO SETISR a, r ; MVII #%a%, %r% ; MVOD %r%, $100 ;ENDM IF 0 MACRO SETISR a LISTING "code" ;; ------------------------------------------------------------------------ ;; ;; ;; ;; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ;; ;; W 0: [ Bits 5:0 of ISR addr ] 0 0 0 0 0 0 0 1 0 0 ;; ;; W 1: [ Bits 11:6 of ISR addr ] 0 1 [ bits 15:10 of _SETISR ] 0 0 ;; ;; W 2: [ 15:12 of ISR ] 0 0 [ . . . . Bits 9:0 of _SETISR . . . . ] ;; ;; ;; ;; Due to how the number is reconstructed: ;; ;; ;; ;; ISR 3:0 gets XORd with: Bits 15:12 of _SETISR, bits 3:0 of _SETISR ;; ;; ISR 5:4 gets XORd with: 01, bits 5:4 of _SETISR ;; ;; ISR 11:6 gets XORd with: 0100, Bits 9:6 of _SETISR ;; ;; ISR 15:12 gets by unadulterated. ;; ;; ;; ;; ------------------------------------------------------------------------ ;; DECLE $004 OR ((((%a%) AND $3F) XOR (_SETISR SHR 12) XOR (_SETISR AND $3F) XOR $10) SHL 10) DECLE $100 OR (($FC00 AND _SETISR) SHR 8) OR (((((%a%) SHR 6) AND $3F) XOR ((_SETISR SHR 6) AND $F) XOR 4) SHL 10) DECLE ($3FF AND _SETISR) OR ($F000 AND (%a%)) LISTING "prev" ENDM ELSE MACRO SETISR a CALL _SETISR DECLE %a% ENDM ENDI ;; ======================================================================== ;; ;; MVOD r, a ;; ;; Write a 16-bit value as Double-Byte-Data. Leaves its first operand ;; ;; byte-swapped. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to write. Must be one of R0, R1, R2, R3 ;; ;; a Address to write to. Macro will write to Addr and Addr + 1. ;; ;; ======================================================================== ;; MACRO MVOD r, a MVO %r%, %a% SWAP %r% MVO %r%, %a% + 1 ENDM ;; ======================================================================== ;; ;; MVOD@ r, p ;; ;; Write a 16-bit value as Double-Byte-Data. Leaves its first operand ;; ;; byte-swapped. If 'p' is R4, R5, or R6, it is left pointing after the ;; ;; written data. If 'p' is R1, R2, or R3, it is left pointing at the ;; ;; same location. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to write. Must be one of R0, R1, R2, R3 ;; ;; p Register containing address to write to. Must be one of R1 ;; ;; through R6. ;; ;; ======================================================================== ;; MACRO MVOD@ r, p MVO@ %r%, %p% SWAP %r% MVO@ %r%, %p% ENDM ;; ======================================================================== ;; ;; COPY s, t, d ;; ;; Copies a value from the source address 's' to the destination address ;; ;; 'd', holding the copy in temporary register 't'. ;; ;; ;; ;; ARGUMENTS ;; ;; s Source address (R1 thru R6) ;; ;; t Temporary register (R0 thru R6) ;; ;; d Destination address (R1 thru R6) ;; ;; ======================================================================== ;; MACRO COPY s, t, d MVI %s%, %t% MVO %t%, %d% ENDM ;; ======================================================================== ;; ;; COPY@ s, t, d ;; ;; Copies a value from the source pointer 's' to the destination pointer ;; ;; 'd', holding the copy in temporary register 't'. ;; ;; ;; ;; ARGUMENTS ;; ;; s Source pointer (R1 thru R6) ;; ;; t Temporary register (R0 thru R6) ;; ;; d Destination pointer (R1 thru R6) ;; ;; ======================================================================== ;; MACRO COPY@ s, t, d MVI@ %s%, %t% MVO@ %t%, %d% ENDM ;; ======================================================================== ;; ;; CALLD label ;; ;; Call and disable interrupts. Return address goes to R5. ;; ;; ======================================================================== ;; MACRO CALLD label JSRD R5, %label% ENDM ;; ======================================================================== ;; ;; LOOP r, l ;; ;; Implements a simple looping construct. Decrements 'r', and branches ;; ;; to the label 'l' if it's non-zero. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to decrement. ;; ;; l Label to jump to if register is non-zero. ;; ;; ;; ;; EXAMPLE ;; ;; MVII #10, R0 ;; ;; @@l MVO@ R1, R4 ;\__ This iterates 10 times. ;; ;; LOOP R0, @@l ;/ ;; ;; ======================================================================== ;; MACRO LOOP r, l DECR %r% BNEQ %l% ENDM ;; ======================================================================== ;; ;; LOOPPL r, l ;; ;; Implements a simple looping construct. Decrements 'r', and branches ;; ;; to the label 'l' if it's non-negative. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to decrement. ;; ;; l Label to jump to if register is non-zero. ;; ;; ;; ;; EXAMPLE ;; ;; MVII #10, R0 ;; ;; @@l MVO@ R1, R4 ;\__ This iterates 11 times. ;; ;; LOOPPL R0, @@l ;/ ;; ;; ======================================================================== ;; MACRO LOOPPL r, l DECR %r% BPL %l% ENDM ;; ======================================================================== ;; ;; SWITCH r, tbl ;; ;; Implements a simple "jump table". The argument 'tbl' points to an ;; ;; array of labels representing the 'cases' of the SWITCH. The register ;; ;; provided by the user will be left pointing into the jump table. If ;; ;; the register is auto-incrementing, it will point *after* the entry ;; ;; used, otherwise it will point at the entry used. ;; ;; ;; ;; The switch table can appear immediately after SWITCH, or it can ;; ;; appear elsewhere in the program. This SWITCH macro only works with ;; ;; 16-bit ROM widths. ;; ;; ;; ;; ARGUMENTS ;; ;; r Value to "switch" on. Must be a register R1 thru R5. Value ;; ;; in the register must be in range 0...n. ;; ;; ;; ;; EXAMPLE ;; ;; SWITCH R0, @@swtbl ;; ;; @@swtbl: ;; ;; DECLE @@case_0, @@case_1, @@case_2, @@case_3 ;; ;; ;; ;; @@case_0: ;; ;; ;.... ;; ;; ;; ;; @@case_1: ;; ;; ;.... ;; ;; ;; ;; @@case_2: ;; ;; ;.... ;; ;; ;; ;; @@case_3: ;; ;; ;.... ;; ;; ;; ;; ======================================================================== ;; MACRO SWITCH r, tbl ADDI #%tbl%, %r% MVI@ %r%, PC ENDM ;; ======================================================================== ;; ;; SWITCHB r ;; ;; Implements a simple "jump table". User must follow "SWITCH" with a ;; ;; series of "B @@label" for each of the cases. The register supplied to ;; ;; the switch will be left doubled. ;; ;; ;; ;; This form of switch statement requires the branch instructions to ;; ;; immediately follow the SWITCHB. This version may be more useful if ;; ;; retaining the value of 'r' is required. ;; ;; ;; ;; ARGUMENTS ;; ;; r Value to "switch" on. Must be in range 0...n. Value will be ;; ;; doubled after this macro. ;; ;; ;; ;; EXAMPLE ;; ;; SWITCHB R0 ;; ;; B @@case_0 ;; ;; B @@case_1 ;; ;; B @@case_2 ;; ;; B @@case_3 ;; ;; ======================================================================== ;; MACRO SWITCHB r ADDR %r%, %r% ADDR %r%, PC ENDM ;; ======================================================================== ;; ;; SPINEQ a, r ;; ;; Loop while value at 'a' equals value held in 'r'. Can be useful for ;; ;; synchronizing with ISRs. ;; ;; ;; ;; ARGUMENTS ;; ;; a Address to spin on. ;; ;; r Value to look for. ;; ;; ;; ;; EXAMPLE ;; ;; CLRR R0 ;; ;; MVO R0, FLAG ; Clear flag ;; ;; SPINEQ FLAG, R0 ; Wait until ISR sets flag. ;; ;; ======================================================================== ;; MACRO SPINEQ a, r CMP %a%, %r% ; 2 words BEQ $ - 2 ; $ avoids label. ;-) ENDM ;; ======================================================================== ;; ;; SPINEQ@ p, r ;; ;; Loop while value pointed to by 'a' equals value held in 'r'. Can be ;; ;; useful for synchronizing with ISRs. ;; ;; ;; ;; NOTE: 'p' should be a non-incrementing pointer! If an incrementing ;; ;; pointer is used, then this becomes a sort of "string search" instead. ;; ;; ;; ;; ARGUMENTS ;; ;; p Address to spin on. ;; ;; r Value to look for. ;; ;; ;; ;; EXAMPLE ;; ;; CLRR R0 ;; ;; MVO@ R0, R3 ; Clear flag ;; ;; SPINEQ@ R3, R0 ; Wait until ISR sets flag. ;; ;; ======================================================================== ;; MACRO SPINEQ@ a, r CMP@ %a%, %r% ; 1 words BEQ $ - 1 ; $ avoids label. ;-) ENDM ;; ======================================================================== ;; ;; SPINNE a, r ;; ;; Loop while value at 'a' does not equal value held in 'r'. ;; ;; Can be useful for synchronizing with ISRs. ;; ;; ;; ;; ARGUMENTS ;; ;; a Address to spin on. ;; ;; r Value to look for. ;; ;; ;; ;; EXAMPLE ;; ;; MVII #3, R0 ;; ;; MVO@ R0, CNT ; Wait 3 frames ;; ;; CLRR R0 ;; ;; SPINNE CNT, R0 ; Wait until ISR's counter expires ;; ;; ======================================================================== ;; MACRO SPINNE a, r CMP %a%, %r% ; 2 words BNEQ $ - 2 ; $ avoids label. ;-) ENDM ;; ======================================================================== ;; ;; SPINEQ@ p, r ;; ;; Loop while value pointed to by 'a' does not equal value held in 'r'. ;; ;; Can be useful for synchronizing with ISRs. ;; ;; ;; ;; NOTE: 'p' should be a non-incrementing pointer! If an incrementing ;; ;; pointer is used, then this becomes a sort of "string search" instead. ;; ;; ;; ;; ARGUMENTS ;; ;; p Address to spin on. ;; ;; r Value to look for. ;; ;; ;; ;; EXAMPLE ;; ;; MVII #3, R0 ;; ;; MVO@ R0, R3 ; Wait 3 frames ;; ;; CLRR R0 ;; ;; SPINNE@ R3, R0 ; Wait until ISR's counter expires ;; ;; ======================================================================== ;; MACRO SPINNE@ a, r CMP@ %a%, %r% ; 1 words BNEQ $ - 1 ; $ avoids label. ;-) ENDM ;; ======================================================================== ;; ;; SHIFT MACROS ;; ;; The following set of macros implement "extended shifts", extending the ;; ;; shift amount of the existing CP-1600 shift instructions. ;; ;; ;; ;; WARNING: These shift sequences are non-interruptible, so be careful. ;; ;; Shift amounts larger than 8, and double-precision shift amounts larger ;; ;; than 4 can potentially affect video display in a negative way. ;; ;; ;; ;; The following shift macros are provided: ;; ;; ;; ;; SLRC h, l, n ; Shift logically right into Carry/Overflow ;; ;; DSLLC h, l, n ; 32-bit Shift Logically Left into Carry/Overflow ;; ;; DSLRC h, l, n ; 32-bit Shift Logically Right into Carry/Overflow ;; ;; DSARC h, l, n ; 32-bit Shift Arithmetically Right into Carry/Ov. ;; ;; SLLn r, n ; Shift Logically Left ;; ;; SLLCn r, n ; Shift Logically Left into Carry/Overflow ;; ;; SLRn r, n ; Shift Logically Right ;; ;; SARn r, n ; Shift Arithmetically Right ;; ;; SLRCn r, n ; Shift Logically Right into Carry/Overflow ;; ;; SARCn r, n ; Shift Arithmetically Right into Carry/Overflow ;; ;; DSLLCn h, l, n ; 32-bit Shift Logically Left into Carry/Overflow ;; ;; DSLRCn h, l, n ; 32-bit Shift Logically Right into Carry/Overflow ;; ;; DSARCn h, l, n ; 32-bit Shift Arithmetically Right into Carry/Ov. ;; ;; ;; ;; The Dxxxx macros implement a double-precision (32-bit) shift across ;; ;; two registers. The variants lacking the 'n' suffix only support ;; ;; shift amounts of 1 or 2. ;; ;; ;; ;; For each of the above, the final shift in the expanded series is ;; ;; always a shift-by-2, except of course in the case where the user ;; ;; specifies a shift of exactly 1. ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; SLRC r, n ;; ;; Shift logical right into carry/overflow. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to shift right. ;; ;; n Shift amount. Must be a constant expression that evaluates to ;; ;; 1 or 2. ;; ;; ======================================================================== ;; MACRO SLRC r, n LISTING "code" IF ((%n%) < 1) OR ((%n%) > 2) ERR "SLRC shift amount out of range!" ENDI IF (%n%) = 1 CLRC RRC %r%, 1 ENDI IF (%n%) = 2 SARC %r%, %n% ANDI #$3FFF, %r% ENDI LISTING "prev" ENDM ;; ======================================================================== ;; ;; DSLLC, DSARC, DSLRC ;; ;; Double-precision shift macros. These macros combine a shift with a ;; ;; rotate in order to shift a 32-bit value across two registers. ;; ;; ;; ;; ARGUMENTS ;; ;; h Upper register of register pair to shift (R0 through R3) ;; ;; l Lower register of register pair to shift (R0 through R3) ;; ;; n Shift amount. Must be a constant expression that evaluates to ;; ;; 1 or 2. ;; ;; ======================================================================== ;; MACRO DSLLC h, l, n ;; double-precision shift logical left into carry/over SLLC %l%, %n% RLC %h%, %n% ENDM MACRO DSARC h, l, n ;; double-precision shift arith right into carry/over SARC %h%, %n% RRC %l%, %n% ENDM MACRO DSLRC h, l, n ;; double-precision shift logical right into carry/over LISTING "code" IF ((%n%) < 1) OR ((%n%) > 2) ERR "DSLRC shift amount out of range!" ENDI IF (%n%) = 1 CLRC RRC %h%, 1 RRC %l%, 1 ENDI IF (%n%) = 2 SARC %h%, %n% RRC %l%, %n% ANDI #$3FFF, %h% ENDI LISTING "prev" ENDM ;; ======================================================================== ;; ;; __shft_n s, r, n ;; ;; Generic "shift expansion" macro set. Expands shift amounts out to a ;; ;; series of shifts by 1 or 2. The macro uses a repeat block to generate ;; ;; the series of shifts. ;; ;; ======================================================================== ;; MACRO __shft_n s, r, n LISTING "code" IF ((%n%) < 1) ERR "Shift amount out of range. Must be >= 1." ELSE IF ((%n%) AND 1) %s% %r%, 1 ENDI RPT ((%n%) SHR 1) %s% %r%, 2 ENDR ENDI LISTING "prev" ENDM ;; ======================================================================== ;; ;; SLLn, SLLCn, SARn, SARCn, SLRn, SLRCn ;; ;; Shift macros that expand the allowed constant range on the CP-1600's ;; ;; shift instructions. These rely on the generic macro above to expand ;; ;; each macro out as a series of shifts. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to shift (R0 thru R3) ;; ;; n Shift amount. Must be a constant expression >= 1 ;; ;; ======================================================================== ;; MACRO SLLn r, n __shft_n SLL, %r%, %n% ENDM MACRO SLLCn r, n __shft_n SLLC, %r%, %n% ENDM MACRO SARn r, n __shft_n SAR, %r%, %n% ENDM MACRO SARCn r, n __shft_n SARC, %r%, %n% ENDM MACRO SLRn r, n __shft_n SLR, %r%, %n% ENDM MACRO SLRCn r, n LISTING "code" IF ((%n%) < 3) SLRC %r%, %n% ELSE __shft_n SLR, %r%, ((%n%) - 2) SARC %r%, 2 ENDI LISTING "prev" ENDM ;; ======================================================================== ;; ;; DSLLCn, DSARCn, DSLRCn ;; ;; Shift macros that expand the allowed constant range on the double- ;; ;; precision shift macros. These rely on the generic macro above to ;; ;; expand each macro out as a series of shifts, and on the Dxxxx shift ;; ;; macros to provide the double-precision shifts. ;; ;; ;; ;; Notice how the 'h' and 'l' operands are grouped together as a single ;; ;; operand when invoking __shft_n using the [] grouping operators. ;; ;; ;; ;; ARGUMENTS ;; ;; h Upper register of register pair to shift (R0 through R3) ;; ;; l Lower register of register pair to shift (R0 through R3) ;; ;; n Shift amount. Must be a constant expression >= 1 ;; ;; ======================================================================== ;; MACRO DSLLCn h, l, n __shft_n DSLLC, [%h%,%l%], %n% ENDM MACRO DSARCn h, l, n __shft_n DSARC, [%h%,%l%], %n% ENDM MACRO DSLRCn h, l, n __shft_n DSARC, [%h%,%l%], %n% ANDI #($FFFF SHR %n%), %h% ENDM ;; ======================================================================== ;; ;; DADDR h0,l0, h1,l1 ;; ;; Adds register pair h0:l0 to register pair h1:l1 (32-bit ADDR). ;; ;; ======================================================================== ;; MACRO DADDR h0,l0,h1,l1 ADDR %l0%, %l1% ; add lower halves ADCR %h1% ; propogate carry into upper half ADDR %h0%, %h1% ; add upper halves ENDM ;; ======================================================================== ;; ;; DSUBR h0,l0, h1,l1 ;; ;; Subtracts register pair h0:l0 from register pair h1:l1 (32-bit SUBR). ;; ;; ======================================================================== ;; MACRO DSUBR h0,l0,h1,l1 SUBR %l0%, %l1% ; subtract lower halves ADCR %h1% ; propogate borrow to upper half DECR %h1% ; turn borrow into not-borrow SUBR %h0%, %h1% ; subtract upper halves ENDM ;; ======================================================================== ;; ;; XCHG a, b ;; ;; Exchanges two values in registers using three-XOR-swap. ;; ;; ;; ;; ARGUMENTS ;; ;; a Register 1 to swap ;; ;; b Register 2 to swap ;; ;; ======================================================================== ;; MACRO XCHG a, b XORR %a%, %b% XORR %b%, %a% XORR %a%, %b% ENDM ;; ======================================================================== ;; ;; ORR a, b -- Register-mode OR ;; ;; Bitwise-ORs register 'a' into register 'b' ;; ;; ;; ;; ARGUMENTS ;; ;; a Register with value to "OR" ;; ;; b Register holding result ;; ;; ======================================================================== ;; MACRO ORR a, b COMR %a% ANDR %a%, %b% COMR %a% XORR %a%, %b% ENDM ;; ======================================================================== ;; ;; ORI a, b -- Immediate mode OR ;; ;; Bitwise-ORs constant 'a' into register 'b' ;; ;; ;; ;; ARGUMENTS ;; ;; a Value to "OR" ;; ;; b Register holding result ;; ;; ======================================================================== ;; MACRO ORI a, b ANDI #($FFFF AND (NOT (%a%))), %b% XORI #($FFFF AND (%a%) ), %b% ENDM ;; ======================================================================== ;; ;; OR@ a, b -- Indirect mode OR ;; ;; Bitwise-ORs value pointed to by 'a' into register 'b'. This macro ;; ;; requires one word of stack space. ;; ;; ;; ;; ARGUMENTS ;; ;; a Address holding value to OR. ;; ;; b Register holding result. (R0 thru R5) ;; ;; ======================================================================== ;; MACRO OR@ a, b PSHR %b% COMR %b% AND@ %a%, %b% XOR@ SP, %b% ENDM ;; ======================================================================== ;; ;; ORD a, b -- Direct mode OR ;; ;; Bitwise-ORs value at address 'a' into register 'b'. This macro ;; ;; requires one word of stack space. ;; ;; ;; ;; This macro is named "ORD" so as to not conflict with the assembler ;; ;; keyword "OR". ;; ;; ;; ;; ARGUMENTS ;; ;; a Address holding value to OR. ;; ;; b Register holding result. (R0 thru R5) ;; ;; ======================================================================== ;; MACRO ORD a, b PSHR %b% COMR %b% AND %a%, %b% XOR@ SP, %b% ENDM ;; ======================================================================== ;; ;; XTND8 r ;; ;; Sign-extend 8-bit value to 16 bits. Assumes value has 0s in upper ;; ;; half already. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to extend from 8 to 16 bits ;; ;; ======================================================================== ;; MACRO XTND8 r XORI #$80, %r% SUBI #$80, %r% ENDM ;; ======================================================================== ;; ;; UNPKL r, l ;; ;; Unpack 16-bit value in 'r' to two 8-bit values in 'r' and 'l'. ;; ;; The unpacked values are left in the lower 8 bits of 'r' and 'l'. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to unpack. When done, this will hold upper 8 bits. ;; ;; Note: 'r' must be R0 through R3. ;; ;; l Register to place lower 8 bits in. ;; ;; ======================================================================== ;; MACRO UNPKL r, l MOVR %r%, %l% ANDI #$FF, %l% XORR %l%, %r% SWAP %r% ENDM ;; ======================================================================== ;; ;; UNPKH r, l ;; ;; Unpack 16-bit value in 'r' to two 8-bit values in 'r' and 'l'. ;; ;; The unpacked values are left in the upper 8 bits of 'r' and 'l'. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register to unpack. When done, this will hold upper 8 bits. ;; ;; Note: 'r' must be R0 through R3. ;; ;; l Register to place lower 8 bits in. ;; ;; ======================================================================== ;; MACRO UNPK r, l MOVR %r%, %l% ANDI #$FF, %l% XORR %l%, %r% SWAP %l% ENDM ;; ======================================================================== ;; ;; pack(h,l) ;; ;; Pack two 8 bit constants into a 16-bit constant. ;; ;; ;; ;; ARGUMENTS ;; ;; h Value to put in upper 8 bits ;; ;; l Value to put in lower 8 bits ;; ;; ;; ;; NOTE: This macro accepts and returns constants. No error checking ;; ;; performed. ;; ;; ======================================================================== ;; MACRO pack(h,l) ((((%h%) AND $FF) SHL 8) OR ((%l%) AND $FF)) ENDM ;; ======================================================================== ;; ;; packn(h,l) ;; ;; Pack two 4 bit constants into an 8-bit constant. ;; ;; ;; ;; ARGUMENTS ;; ;; h Value to put in upper 4 bits ;; ;; l Value to put in lower 4 bits ;; ;; ;; ;; NOTE: This macro accepts and returns constants. No error checking ;; ;; performed. ;; ;; ======================================================================== ;; MACRO packn(h,l) ((((%h%) AND $F) SHL 4) OR ((%l%) AND $F)) ENDM ENDI INCLUDE "macro/stic.mac" ;; ======================================================================== ;; ;; STIC.MAC Default Macro Set ;; ;; Joseph Zbiciak ;; ;; These macros are hereby released into the Public Domain. ;; ;; ======================================================================== ;; IF (DEFINED _STIC_MAC) = 0 0x1 _STIC_MAC EQU 1 ;; ======================================================================== ;; ;; Note: For each of the macros below that accepts a color name, the ;; ;; following aliases are supported: ;; ;; ;; ;; Black BLK Grey (or Gray) GRY ;; ;; Blue BLU Cyan CYN ;; ;; Red RED Orange ORG ;; ;; Tan TAN Brown BRN ;; ;; DarkGreen DGR Pink PNK ;; ;; Green GRN LightBlue LBL ;; ;; Yellow YEL YellowGreen YGR ;; ;; White WHT Purple PUR ;; ;; ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; gen_cstk_card(c, g, fg, a) ;; ;; Generate constant for a Color-Stack mode card. ;; ;; ;; ;; ARGUMENTS ;; ;; c Card #, from 0 to 255 for GROM, 0 to 63 for GRAM. When using ;; ;; gen_cs_card() to generate a "format word", simply use Card #0. ;; ;; ;; ;; g Specify GROM to indicate card comes from GROM, or GRAM to ;; ;; indicate card comes from GRAM. ;; ;; ;; ;; fg Foreground color, from the following set of names: ;; ;; ;; ;; Black DarkGreen Grey (or Gray) Pink ;; ;; Blue Green Cyan LightBlue ;; ;; Red Yellow Orange YellowGreen ;; ;; Tan White Brown Purple ;; ;; ;; ;; NOTE: Foreground colors Grey through Purple are only available ;; ;; on GRAM cards. Attempts to use these colors on GROM cards ;; ;; will result in (intentional) assembly errors. This is a ;; ;; limitation of the STIC itself. ;; ;; ;; ;; a Specifiy "Adv" or "Advance" to advance color stack. Specify ;; ;; "NoAdv" or "NoAdvance" to not advance color stack. ;; ;; ======================================================================== ;; MACRO gen_cstk_card(c, g, fg, a) ((%c%)*8 + __CSTK.%g%_%fg% + __CSTK.%a%) ENDM ;; ======================================================================== ;; ;; gen_csqr_card(p0, p1, p2, p3) ;; ;; Generate constant for a Colored-Squares mode card ;; ;; Pixels are laid out like so: ;; ;; +-----+-----+ ;; ;; |Pixel|Pixel| ;; ;; | 0 | 1 | ;; ;; +-----+-----+ ;; ;; |Pixel|Pixel| ;; ;; | 2 | 3 | ;; ;; +-----+-----+ ;; ;; ;; ;; ARGUMENTS ;; ;; p0 Color for Pixel 0 from set below. ;; ;; p1 Color for Pixel 1 from set below. ;; ;; p2 Color for Pixel 2 from set below. ;; ;; p3 Color for Pixel 3 from set below. ;; ;; ;; ;; Black Red DarkGreen Yellow ;; ;; Blue Tan Green Stack ;; ;; ;; ;; Note: "Stack" refers to the color on the top of the color ;; ;; stack. It is not possible to advance the color stack from ;; ;; colored-squares mode. Use a color-stack card to do that. ;; ;; ======================================================================== ;; MACRO gen_csqr_card(p0,p1,p2,p3) ($1000+__CSQR.p0_%p0%+__CSQR.p1_%p1%+__CSQR.p2_%p2%+__CSQR.p3_%p3%) ENDM ;; ======================================================================== ;; ;; gen_fgbg_card(c, g, fg, bg) ;; ;; Generate constant for a Foreground/Background mode ;; ;; ;; ;; ARGUMENTS ;; ;; c Card #, from 0 to 255 for GROM, 0 to 63 for GRAM. When using ;; ;; gen_cs_card() to generate a "format word", simply use Card #0. ;; ;; ;; ;; g Specify GROM to indicate card comes from GROM, or GRAM to ;; ;; indicate card comes from GRAM. ;; ;; ;; ;; fg Foreground color, from the following set of names: ;; ;; Black DarkGreen ;; ;; Blue Green ;; ;; Red Yellow ;; ;; Tan White ;; ;; ;; ;; bg Background color, from the following set of names: ;; ;; Black DarkGreen Grey (or Gray) Pink ;; ;; Blue Green Cyan LightBlue ;; ;; Red Yellow Orange YellowGreen ;; ;; Tan White Brown Purple ;; ;; ======================================================================== ;; MACRO gen_fgbg_card(c, g, fg, bg) ((%c%)*8 + __FGBG.%g% + __FGBG.f_%fg% + __FGBG.b_%bg%) ENDM ;; ======================================================================== ;; ;; __CSTK: Constants used by the color-stack macros. ;; ;; ======================================================================== ;; 0x0 __CSTK PROC 0x0 @@GROM_Black EQU 00000000000000b ; foreground == 0 0x1 @@GROM_Blue EQU 00000000000001b ; foreground == 1 0x2 @@GROM_Red EQU 00000000000010b ; foreground == 2 0x3 @@GROM_Tan EQU 00000000000011b ; foreground == 3 0x4 @@GROM_DarkGreen EQU 00000000000100b ; foreground == 4 0x5 @@GROM_Green EQU 00000000000101b ; foreground == 5 0x6 @@GROM_Yellow EQU 00000000000110b ; foreground == 6 0x7 @@GROM_White EQU 00000000000111b ; foreground == 7 0x800 @@GRAM_Black EQU 00100000000000b ; foreground == 0 0x801 @@GRAM_Blue EQU 00100000000001b ; foreground == 1 0x802 @@GRAM_Red EQU 00100000000010b ; foreground == 2 0x803 @@GRAM_Tan EQU 00100000000011b ; foreground == 3 0x804 @@GRAM_DarkGreen EQU 00100000000100b ; foreground == 4 0x805 @@GRAM_Green EQU 00100000000101b ; foreground == 5 0x806 @@GRAM_Yellow EQU 00100000000110b ; foreground == 6 0x807 @@GRAM_White EQU 00100000000111b ; foreground == 7 0x1800 @@GRAM_Grey EQU 01100000000000b ; foreground == 8 0x1800 @@GRAM_Gray EQU 01100000000000b ; foreground == 8 0x1801 @@GRAM_Cyan EQU 01100000000001b ; foreground == 9 0x1802 @@GRAM_Orange EQU 01100000000010b ; foreground == 10 0x1803 @@GRAM_Brown EQU 01100000000011b ; foreground == 11 0x1804 @@GRAM_Pink EQU 01100000000100b ; foreground == 12 0x1805 @@GRAM_LightBlue EQU 01100000000101b ; foreground == 13 0x1806 @@GRAM_YellowGreen EQU 01100000000110b ; foreground == 14 0x1807 @@GRAM_Purple EQU 01100000000111b ; foreground == 15 0x0 @@GROM_BLK EQU 00000000000000b ; foreground == 0 0x1 @@GROM_BLU EQU 00000000000001b ; foreground == 1 0x2 @@GROM_RED EQU 00000000000010b ; foreground == 2 0x3 @@GROM_TAN EQU 00000000000011b ; foreground == 3 0x4 @@GROM_DGR EQU 00000000000100b ; foreground == 4 0x5 @@GROM_GRN EQU 00000000000101b ; foreground == 5 0x6 @@GROM_YEL EQU 00000000000110b ; foreground == 6 0x7 @@GROM_WHT EQU 00000000000111b ; foreground == 7 0x800 @@GRAM_BLK EQU 00100000000000b ; foreground == 0 0x801 @@GRAM_BLU EQU 00100000000001b ; foreground == 1 0x802 @@GRAM_RED EQU 00100000000010b ; foreground == 2 0x803 @@GRAM_TAN EQU 00100000000011b ; foreground == 3 0x804 @@GRAM_DGR EQU 00100000000100b ; foreground == 4 0x805 @@GRAM_GRN EQU 00100000000101b ; foreground == 5 0x806 @@GRAM_YEL EQU 00100000000110b ; foreground == 6 0x807 @@GRAM_WHT EQU 00100000000111b ; foreground == 7 0x1800 @@GRAM_GRY EQU 01100000000000b ; foreground == 8 0x1801 @@GRAM_CYN EQU 01100000000001b ; foreground == 9 0x1802 @@GRAM_ORG EQU 01100000000010b ; foreground == 10 0x1803 @@GRAM_BRN EQU 01100000000011b ; foreground == 11 0x1804 @@GRAM_PNK EQU 01100000000100b ; foreground == 12 0x1805 @@GRAM_LBL EQU 01100000000101b ; foreground == 13 0x1806 @@GRAM_YGR EQU 01100000000110b ; foreground == 14 0x1807 @@GRAM_PUR EQU 01100000000111b ; foreground == 15 0x2000 @@Adv EQU 10000000000000b ; Advances color stack. 0x2000 @@Advance EQU 10000000000000b ; Advances color stack. 0x0 @@NoAdv EQU 00000000000000b ; Does not advance color stack 0x0 @@NoAdvance EQU 00000000000000b ; Does not advance color stack ENDP ;; ======================================================================== ;; ;; __CSQR: Constants used by the colored-squares macros. ;; ;; ======================================================================== ;; 0x0 __CSQR PROC 0x0 @@p0_Black EQU 00000000000000b 0x1 @@p0_Blue EQU 00000000000001b 0x2 @@p0_Red EQU 00000000000010b 0x3 @@p0_Tan EQU 00000000000011b 0x4 @@p0_DarkGreen EQU 00000000000100b 0x5 @@p0_Green EQU 00000000000101b 0x6 @@p0_Yellow EQU 00000000000110b 0x7 @@p0_Stack EQU 00000000000111b 0x0 @@p1_Black EQU 00000000000000b 0x8 @@p1_Blue EQU 00000000001000b 0x10 @@p1_Red EQU 00000000010000b 0x18 @@p1_Tan EQU 00000000011000b 0x20 @@p1_DarkGreen EQU 00000000100000b 0x28 @@p1_Green EQU 00000000101000b 0x30 @@p1_Yellow EQU 00000000110000b 0x38 @@p1_Stack EQU 00000000111000b 0x0 @@p2_Black EQU 00000000000000b 0x40 @@p2_Blue EQU 00000001000000b 0x80 @@p2_Red EQU 00000010000000b 0xc0 @@p2_Tan EQU 00000011000000b 0x100 @@p2_DarkGreen EQU 00000100000000b 0x140 @@p2_Green EQU 00000101000000b 0x180 @@p2_Yellow EQU 00000110000000b 0x1c0 @@p2_Stack EQU 00000111000000b 0x0 @@p3_Black EQU 00000000000000b 0x200 @@p3_Blue EQU 00001000000000b 0x400 @@p3_Red EQU 00010000000000b 0x600 @@p3_Tan EQU 00011000000000b 0x2000 @@p3_DarkGreen EQU 10000000000000b 0x2200 @@p3_Green EQU 10001000000000b 0x2400 @@p3_Yellow EQU 10010000000000b 0x2600 @@p3_Stack EQU 10011000000000b 0x0 @@p0_BLK EQU 00000000000000b 0x1 @@p0_BLU EQU 00000000000001b 0x2 @@p0_RED EQU 00000000000010b 0x3 @@p0_TAN EQU 00000000000011b 0x4 @@p0_DGR EQU 00000000000100b 0x5 @@p0_GRN EQU 00000000000101b 0x6 @@p0_YEL EQU 00000000000110b 0x7 @@p0_STK EQU 00000000000111b 0x0 @@p1_BLK EQU 00000000000000b 0x8 @@p1_BLU EQU 00000000001000b 0x10 @@p1_RED EQU 00000000010000b 0x18 @@p1_TAN EQU 00000000011000b 0x20 @@p1_DGR EQU 00000000100000b 0x28 @@p1_GRN EQU 00000000101000b 0x30 @@p1_YEL EQU 00000000110000b 0x38 @@p1_STK EQU 00000000111000b 0x0 @@p2_BLK EQU 00000000000000b 0x40 @@p2_BLU EQU 00000001000000b 0x80 @@p2_RED EQU 00000010000000b 0xc0 @@p2_TAN EQU 00000011000000b 0x100 @@p2_DGR EQU 00000100000000b 0x140 @@p2_GRN EQU 00000101000000b 0x180 @@p2_YEL EQU 00000110000000b 0x1c0 @@p2_STK EQU 00000111000000b 0x0 @@p3_BLK EQU 00000000000000b 0x200 @@p3_BLU EQU 00001000000000b 0x400 @@p3_RED EQU 00010000000000b 0x600 @@p3_TAN EQU 00011000000000b 0x2000 @@p3_DGR EQU 10000000000000b 0x2200 @@p3_GRN EQU 10001000000000b 0x2400 @@p3_YEL EQU 10010000000000b 0x2600 @@p3_STK EQU 10011000000000b ENDP ;; ======================================================================== ;; ;; __FGBG: Constants used by the Foreground/Background mode macros. ;; ;; ======================================================================== ;; 0x0 __FGBG PROC 0x0 @@f_Black EQU 00000000000000b ; foreground == 0 0x1 @@f_Blue EQU 00000000000001b ; foreground == 1 0x2 @@f_Red EQU 00000000000010b ; foreground == 2 0x3 @@f_Tan EQU 00000000000011b ; foreground == 3 0x4 @@f_DarkGreen EQU 00000000000100b ; foreground == 4 0x5 @@f_Green EQU 00000000000101b ; foreground == 5 0x6 @@f_Yellow EQU 00000000000110b ; foreground == 6 0x7 @@f_White EQU 00000000000111b ; foreground == 7 0x0 @@b_Black EQU 00000000000000b ; background == 0 0x200 @@b_Blue EQU 00001000000000b ; background == 1 0x400 @@b_Red EQU 00010000000000b ; background == 2 0x600 @@b_Tan EQU 00011000000000b ; background == 3 0x2000 @@b_DarkGreen EQU 10000000000000b ; background == 4 0x2200 @@b_Green EQU 10001000000000b ; background == 5 0x2400 @@b_Yellow EQU 10010000000000b ; background == 6 0x2600 @@b_White EQU 10011000000000b ; background == 7 0x1000 @@b_Grey EQU 01000000000000b ; background == 8 0x1000 @@b_Gray EQU 01000000000000b ; background == 8 0x1200 @@b_Cyan EQU 01001000000000b ; background == 9 0x1400 @@b_Orange EQU 01010000000000b ; background == 10 0x1600 @@b_Brown EQU 01011000000000b ; background == 11 0x3000 @@b_Pink EQU 11000000000000b ; background == 12 0x3200 @@b_LightBlue EQU 11001000000000b ; background == 13 0x3400 @@b_YellowGreen EQU 11010000000000b ; background == 14 0x3600 @@b_Purple EQU 11011000000000b ; background == 15 0x0 @@f_BLK EQU 00000000000000b ; foreground == 0 0x1 @@f_BLU EQU 00000000000001b ; foreground == 1 0x2 @@f_RED EQU 00000000000010b ; foreground == 2 0x3 @@f_TAN EQU 00000000000011b ; foreground == 3 0x4 @@f_DGR EQU 00000000000100b ; foreground == 4 0x5 @@f_GRN EQU 00000000000101b ; foreground == 5 0x6 @@f_YEL EQU 00000000000110b ; foreground == 6 0x7 @@f_WHT EQU 00000000000111b ; foreground == 7 0x0 @@b_BLK EQU 00000000000000b ; background == 0 0x200 @@b_BLU EQU 00001000000000b ; background == 1 0x400 @@b_RED EQU 00010000000000b ; background == 2 0x600 @@b_TAN EQU 00011000000000b ; background == 3 0x2000 @@b_DGR EQU 10000000000000b ; background == 4 0x2200 @@b_GRN EQU 10001000000000b ; background == 5 0x2400 @@b_YEL EQU 10010000000000b ; background == 6 0x2600 @@b_WHT EQU 10011000000000b ; background == 7 0x1000 @@b_GRY EQU 01000000000000b ; background == 8 0x1200 @@b_CYN EQU 01001000000000b ; background == 9 0x1400 @@b_ORG EQU 01010000000000b ; background == 10 0x1600 @@b_BRN EQU 01011000000000b ; background == 11 0x3000 @@b_PNK EQU 11000000000000b ; background == 12 0x3200 @@b_LBL EQU 11001000000000b ; background == 13 0x3400 @@b_YGR EQU 11010000000000b ; background == 14 0x3600 @@b_PUR EQU 11011000000000b ; background == 15 0x800 @@GRAM EQU 00100000000000b ; Select card from GRAM 0x0 @@GROM EQU 00000000000000b ; Select card from GROM ENDP ;; ======================================================================== ;; ;; disp_ptr(r, c) ;; ;; Generates a pointer to display memory for a given row and column #. ;; ;; ;; ;; ARGUMENTS ;; ;; r Row number. 0 is top row, 11 is bottom row. ;; ;; c Column number. 0 is left edge, 19 is right edge. ;; ;; ======================================================================== ;; MACRO disp_ptr(r, c) ($200 + %r%*20 + %c%) ENDM ;; ======================================================================== ;; ;; disp_ofs(r, c) ;; ;; Generates offset into display buffer that corresponds to a given row ;; ;; and column number. ;; ;; ;; ;; ARGUMENTS ;; ;; r Row number. 0 is top row, 11 is bottom row. ;; ;; c Column number. 0 is left edge, 19 is right edge. ;; ;; ======================================================================== ;; MACRO disp_ofs(r, c) (%r%*20 + %c%) ENDM ;; ======================================================================== ;; ;; DISP_OFS r, c ;; ;; Generates an offset into display memory for a given row and column # ;; ;; held in registers. Result is left in "c". The value "r" is left ;; ;; left-shifted by 4. Both "r" and "c" must be different registers. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register holding row number. Must be R0 through R3. ;; ;; c Register holding column number. Result will be left in this ;; ;; register. ;; ;; ======================================================================== ;; MACRO DISP_OFS r, c SLL %r%, 2 ADDR %r%, %c% SLL %r%, 2 ADDR %r%, %c% ENDM ;; ======================================================================== ;; ;; DISP_OFS3 r, c, rs ;; ;; Generates an offset into display memory for a given row and column # ;; ;; held in registers. Result is left in "rs". Both "r" and "c" are ;; ;; left unmodified. All three arguments must point to different ;; ;; registers. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register holding row number. ;; ;; c Register holding column number. ;; ;; rs Register to hold the result. Must be R0 through R3. ;; ;; ======================================================================== ;; MACRO DISP_OFS3 r, c, rs MOVR %r%, %rs% SLL %rs%, 2 ADDR %r%, %rs% SLL %rs%, 2 ADDR %c%, %rs% ENDM ;; ======================================================================== ;; ;; DISP_PTR r, c ;; ;; Generates a pointer to display memory for a given row and column # ;; ;; held in registers. Result is left in "c". The value "r" is left ;; ;; left-shifted by 4. Both "r" and "c" must be different registers. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register holding row number. Must be R0 through R3. ;; ;; c Register holding column number. Result will be left in this ;; ;; register. ;; ;; ======================================================================== ;; MACRO DISP_PTR r, c DISP_OFS r, c ADDI #$200, %c% ENDM ;; ======================================================================== ;; ;; DISP_PTR3 r, c, rs ;; ;; Generates a pointer to display memory for a given row and column # ;; ;; held in registers. Result is left in "rs". Both "r" and "c" are ;; ;; left unmodified. All three arguments must point to different ;; ;; registers. ;; ;; ;; ;; ARGUMENTS ;; ;; r Register holding row number. ;; ;; c Register holding column number. ;; ;; rs Register to hold the result. Must be R0 through R3. ;; ;; ======================================================================== ;; MACRO DISP_PTR3 r, c DISP_OFS3 r, c, rs ADDI #$200, %rs% ENDM ENDI INCLUDE "macro/tracker.mac" ;; ======================================================================== ;; ;; TRACKER.MAC ;; ;; Arnauld Chevallier ;; ;; ======================================================================== ;; IF (DEFINED _TRACKER_MAC) = 0 0x1 _TRACKER_MAC EQU 1 0x10 _NOTE_OFFSET EQU $10 ;; ======================================================================== ;; ;; NOTES n0, n1, n2, n3 ;; ;; Defines 4 notes at once, by invokating the NOTE macro 4 times ;; ;; ;; ;; ARGUMENTS ;; ;; n0 String defining note #0. ;; ;; n1 String defining note #1. ;; ;; n2 String defining note #2. ;; ;; n3 String defining note #3. ;; ;; ======================================================================== ;; MACRO NOTES(n0, n1, n2, n3) ; LISTING "code" NOTE(%n0%) NOTE(%n1%) NOTE(%n2%) NOTE(%n3%) LISTING "prev" ENDM ;; ======================================================================== ;; ;; NOTE n ;; ;; Defines 1 note ;; ;; ;; ;; ARGUMENTS ;; ;; n String defining the note. ;; ;; ;; ;; String format: NnO IVL ;; ;; ;; ;; N = Note (C, D, E, F, G, A, B) ;; ;; n = '-' or '#' ;; ;; O = Octave (1 - 7) ;; ;; I = new Instrument (1 - F, or 0 for unchanged) ;; ;; V = Volume (0 - F) ;; ;; L = Length (0 - F) ;; ;; ;; ;; The string "NUL" can be used instead of the NnO parameters to ;; ;; indicate that the current note is actually not changed. ;; ;; (Including such directives is required when a note lasts longer ;; ;; than the maximal length which can be specified.) ;; ;; ;; ;; The string "OFF" can also be used as a special code to disable ;; ;; ticks on the ECS. ;; ;; ;; ;; EXAMPLES ;; ;; NOTE("C-3 1F1") ;; ;; NOTE("D#4 0F1") ;; ;; NOTE("NUL 0F1") ;; ;; ======================================================================== ;; MACRO NOTE(n) ; IF STRLEN(%n%) > 0 ; instrument HEX2DEC(_i, ASC(%n%, 4)) ; volume HEX2DEC(_v, ASC(%n%, 5)) ; length HEX2DEC(_l, ASC(%n%, 6)) ; "OFF" ? IF ASC(%n%, 0) = 79 AND ASC(%n%, 1) = 70 AND ASC(%n%, 2) = 70 DECLE $8000 + _l * $10 + (15-_v) ELSE ; "NUL" ? IF ASC(%n%, 0) = 78 AND ASC(%n%, 1) = 85 AND ASC(%n%, 2) = 76 IF _i <> 0 DECLE $8000 + _l * $10 + (15-_v) DECLE (_i - 1) * 3 ELSE DECLE _l * $10 + (15-_v) ENDI ELSE INC_NOTE(%n%, _i, _v, _l) ENDI ENDI ENDI ENDM ;; ======================================================================== ;; ;; INC_NOTE n, i, v, l ;; ;; Inludes the decle(s) defining a note ;; ;; ;; ;; ARGUMENTS ;; ;; n Value of the note. ;; ;; i Instrument used. ;; ;; v Volume used. ;; ;; l Length of the note. ;; ;; ======================================================================== ;; MACRO INC_NOTE(n, i, v, l) ; note _n0 SET ASC(%n%, 0) IF (_n0 < 65) OR (_n0 > 71) ERR "Invalid note" ENDI ; conversion letter -> value ; ABCDEFG _n1 SET ASC("JLACEFH", _n0-65) - 64 ; sharp ? IF ASC(%n%, 1) = 35 _n1 SET _n1 + 1 ELSE ; minus ? IF ASC(%n%, 1) <> 45 ERR "Invalid note" ENDI ENDI ; octave _o SET ASC(%n%, 2) IF (_o < 49) OR (_o > 55) ERR "Invalid octave" ENDI ; value _n2 SET (_n1 + 12 * (_o - 49)) - _NOTE_OFFSET IF %i% <> 0 DECLE $8000 + _n2 * $100 + %l% * $10 + (15-%v%) DECLE (%i% - 1) * 3 ELSE DECLE _n2 * $100 + %l% * $10 + (15-%v%) ENDI ENDM ;; ======================================================================== ;; ;; HEX2DEC e, s ;; ;; Converts a hexadecimal symbol to its decimal value ;; ;; ;; ;; ARGUMENTS ;; ;; e Expression to which the result will be affected. ;; ;; s Hexadecimal value. ;; ;; ======================================================================== ;; MACRO HEX2DEC(e, s) ; IF (%s% >= 48) AND (%s% <= 57) %e% SET %s% - 48 ELSE IF (%s% >= 65) AND (%s% <= 70) %e% SET %s% - 55 ELSE ERR "Invalid hexa symbol" ENDI ENDI ENDM ENDI INCLUDE "macro/dseg.mac" 0x102 .SCRMEM SET $102 0x2f0 .SYSMEM SET $2F0 MACRO SCRATCH l EQU .SCRMEM LISTING "off" .SCRMEM SET .SCRMEM + %l% IF .SCRMEM > $1F0 ERR "Scratch Memory Overflow" ENDI LISTING "prev" ENDM MACRO SYSTEM l EQU .SYSMEM LISTING "off" .SYSMEM SET .SYSMEM + %l% IF .SYSMEM > $360 ERR "System Memory Overflow" ENDI LISTING "prev" ENDM INCLUDE "macro/gfx.mac" ;; ======================================================================== ;; ;; GFX.MAC Default Macro Set ;; ;; Macros for generating graphics bitfields from strings. ;; ;; Joseph Zbiciak ;; ;; These macros are hereby released into the Public Domain. ;; ;; ;; ;; Macros defined in this file: ;; ;; gfx_start Start a packed graphic ;; ;; gfx_row s Add an 8-pixel wide row to a packed graphic ;; ;; gfx_flush End a packed graphic ;; ;; ;; ;; EXAMPLE USAGE: ;; ;; ;; ;; gfx_start ;; ;; gfx_row ".######." ;; ;; gfx_row "#......#" ;; ;; gfx_row "#.#..#.#" ;; ;; gfx_row "#......#" ;; ;; gfx_row "#.#..#.#" ;; ;; gfx_row "#..##..#" ;; ;; gfx_row "#......#" ;; ;; gfx_row ".######." ;; ;; gfx_flush ;; ;; ;; ;; The above will generate the following four words in memory: ;; ;; ;; ;; Hex Binary ;; ;; 817E 1000 0001 0111 1110 ;; ;; 81A5 1000 0001 1010 0101 ;; ;; 99A5 1001 1001 1010 0101 ;; ;; 7E81 0111 1110 1000 0001 ;; ;; ;; ;; As you can see, the even rows (0, 2, 4, 6) of the bitmap are in ;; ;; the lower bytes of each of the 4 words. The odd rows of the bitmap ;; ;; are in the upper bytes. ;; ;; ;; ;; A loop like the following is suitable for copying such a bitmap to ;; ;; GRAM: ;; ;; ;; ;; REPEAT 4 ;; ;; MVI@ R4, R0 ; get next two rows ;; ;; MVO@ R0, R5 ; write even # row ;; ;; SWAP R0 ;; ;; MVO@ R0, R5 ; write odd # row ;; ;; ENDR ;; ;; ;; ;; Note that the macros do not keep track of how tall the graphic is. ;; ;; They only track whether an even number or odd number of lines has ;; ;; been written. ;; ;; ======================================================================== ;; IF (DEFINED _GFX_MAC) = 0 0x1 _GFX_MAC EQU 1 ;; ======================================================================== ;; ;; gfx_start ;; ;; Initializes symbols for the string->bitmap graphic generator. ;; ;; ======================================================================== ;; MACRO gfx_start LISTING "code" _gfx_w SET 0 _gfx_eo SET 0 LISTING "prev" ENDM ;; ======================================================================== ;; ;; gfx_row s ;; ;; Takes a string, and generates a row of bitmap from the first 8 ;; ;; characters in the string. Space characters and dot characters are ;; ;; mapped to '0' bits in the bitmap. All others are mapped to 1. If the ;; ;; string is shorter than 8 characters, the missing characters are mapped ;; ;; to 0. ;; ;; ;; ;; The bitmap is output as a series of DECLE statements. Even numbered ;; ;; rows are stored in the lower byte of each 16-bit word. Odd numbered ;; ;; rows are stored in the upper byte of each 16-bit word. ;; ;; ;; ;; ARGUMENTS ;; ;; s String to convert into a bitmap. ;; ;; ======================================================================== ;; MACRO gfx_row s LISTING "code" ; start of graphics definition _gfx_x SET 0 _gfx_b SET $8000 _gfx_w SET (_gfx_w SHR 8) REPEAT 8 _gfx_w SET (_gfx_w + _gfx_b*((ASC(%s%,_gfx_x)<>$20) AND (ASC(%s%,_gfx_x)<>$2E) AND (ASC(%s%,_gfx_x)<>0))) _gfx_x SET _gfx_x + 1 _gfx_b SET _gfx_b SHR 1 ENDR _gfx_eo SET _gfx_eo + 1 IF _gfx_eo = 2 DECLE _gfx_w _gfx_eo SET 0 ENDI LISTING "prev" ENDM ;; ======================================================================== ;; ;; gfx_flush ;; ;; Ensures that all bitmap data for a packed bitmap is output. That is, ;; ;; if any rows of bitmap are waiting to be pushed to the object file, ;; ;; this macro will push those to the object file. In general, each ;; ;; bitmap definition should be followed by gfx_flush. ;; ;; ======================================================================== ;; MACRO gfx_flush LISTING "code" IF _gfx_eo = 1 DECLE _gfx_w SHR 8 ENDI _gfx_w SET 0 _gfx_eo SET 0 LISTING "prev" ENDM ENDI INCLUDE "macro/initmem.mac" ;* ======================================================================== *; ;* This file is hereby placed into the public domain by its author, *; ;* Joseph Zbiciak. It may therefore be incorporated into programs *; ;* with any license with no restrictions on the resulting program. *; ;* ======================================================================== *; ;; ======================================================================== ;; ;; INITMEM ;; ;; ;; ;; These are the macros that work with the INITMEM function. ;; ;; ;; ;; Initialize a set of variables to initial values. Initialization ;; ;; records are 1 word each typically. All variables are in the range ;; ;; $0F0 - $35F. So, each record is formatted as follows. ;; ;; ;; ;; 15 10 9 0 ;; ;; +---------------------+-----------------------------------+ ;; ;; | Value | Address | ;; ;; +---------------------+-----------------------------------+ ;; ;; ;; ;; A record of 0 terminates the initializer list. ;; ;; ;; ;; The "value" field is actually encoded. $20 - $3F directly map to ;; ;; the constants $00 - $1F. $00 - $1E map to constants in a separate ;; ;; constants table. $1F indicates the constant appears in the following ;; ;; word. Furthermore, constant table entries $00 - $0F are packed 8-bit ;; ;; contants, whereas $10 - $1E are unpacked 16-bit constants. ;; ;; ;; ;; INITMEM macros: ;; ;; ;; ;; INIT addr, val Set 'addr' to 'value' as part of init list. ;; ;; INIT_DONE Terminates an init list ;; ;; EMIT_CST8 Outputs the accumulated CST8 table. ;; ;; EMIT_CST16 Outputs the accumulated CST16 table. ;; ;; ;; ;; ======================================================================== ;; 0x0 _init_const SET 0 0x0 _init_escape SET 0 ;; ======================================================================== ;; ;; Helper macros: (Programs should not call these.) ;; ;; ;; ;; _init_try See if constant is already allocated in CST tables. ;; ;; _init_alloc8 Allocate an 8-bit constant. ;; ;; _init_alloc16 Allocate a 16-bit constant. ;; ;; _init_encode_constant Given a cst, return bits 15:10 of init rec. ;; ;; _emit_cst8 Output two entries of CST8 table if defined. ;; ;; _emit_cst16 Output an entry of CST16 table if defined. ;; ;; ;; ;; ======================================================================== ;; MACRO _init_try(v,c) IF (%v% = _init_cst_%c%) _init_const SET ($%c%) SHL 10 ENDI ENDM MACRO _init_alloc8(v,c) IF (_init_const = -1) AND (DEFINED _init_cst_%c%) = 0 _init_cst_%c% EQU (%v%) _init_const SET ($%c%) SHL 10 ENDI ENDM MACRO _init_alloc16(v,c) IF (_init_const = -1) AND (DEFINED _init_cst_%c%) = 0 _init_cst_%c% EQU (%v%) _init_const SET ($%c%) SHL 10 ENDI ENDM MACRO _init_encode_constant(v) _init_escape SET 0 _init_const SET -1 IF (%v% >= $00) AND (%v% <= $1F) _init_const SET (%v% + $20) SHL 10 ELSE _init_try(%v%,00) _init_try(%v%,01) _init_try(%v%,02) _init_try(%v%,03) _init_try(%v%,04) _init_try(%v%,05) _init_try(%v%,06) _init_try(%v%,07) _init_try(%v%,08) _init_try(%v%,09) _init_try(%v%,0A) _init_try(%v%,0B) _init_try(%v%,0C) _init_try(%v%,0D) _init_try(%v%,0E) _init_try(%v%,0F) _init_try(%v%,10) _init_try(%v%,11) _init_try(%v%,12) _init_try(%v%,13) _init_try(%v%,14) _init_try(%v%,15) _init_try(%v%,16) _init_try(%v%,17) _init_try(%v%,18) _init_try(%v%,19) _init_try(%v%,1A) _init_try(%v%,1B) _init_try(%v%,1C) _init_try(%v%,1D) _init_try(%v%,1E) ENDI IF ((%v% - $20) AND $FF00) = 0 _init_alloc8(%v%,00) _init_alloc8(%v%,01) _init_alloc8(%v%,02) _init_alloc8(%v%,03) _init_alloc8(%v%,04) _init_alloc8(%v%,05) _init_alloc8(%v%,06) _init_alloc8(%v%,07) _init_alloc8(%v%,08) _init_alloc8(%v%,09) _init_alloc8(%v%,0A) _init_alloc8(%v%,0B) _init_alloc8(%v%,0C) _init_alloc8(%v%,0D) _init_alloc8(%v%,0E) _init_alloc8(%v%,0F) ELSE _init_alloc16(%v%,10) _init_alloc16(%v%,11) _init_alloc16(%v%,12) _init_alloc16(%v%,13) _init_alloc16(%v%,14) _init_alloc16(%v%,15) _init_alloc16(%v%,16) _init_alloc16(%v%,17) _init_alloc16(%v%,18) _init_alloc16(%v%,19) _init_alloc16(%v%,1A) _init_alloc16(%v%,1B) _init_alloc16(%v%,1C) _init_alloc16(%v%,1D) _init_alloc16(%v%,1E) ENDI IF _init_const = -1 _init_const EQU $1F SHL 10 _init_escape EQU 1 ENDI ENDM MACRO _emit_cst8(a,b) IF (DEFINED _init_cst_%a%) <> 0 _init_tmp SET (((_init_cst_%a% - $20) AND $FF) SHL 8) ENDI IF (DEFINED _init_cst_%b%) <> 0 _init_tmp SET _init_tmp OR ((_init_cst_%b% - $20) AND $FF) ENDI IF (DEFINED _init_cst_%a%) OR (DEFINED _init_cst_%b%) DECLE _init_tmp ENDI ENDM MACRO _emit_cst16(a) IF (DEFINED _init_cst_%a%) <> 0 DECLE _init_cst_%a% ENDI ENDM ;; ======================================================================== ;; ;; INIT addr, val -- Output an initialization record ;; ;; ======================================================================== ;; MACRO INIT a, v LISTING "code" _init_encode_constant(%v%) IF _init_escape = 0 DECLE _init_const OR %a% ELSE DECLE _init_const OR %a%, %v% ENDI LISTING "prev" ENDM ;; ======================================================================== ;; ;; INIT_DONE Terminate an initialization list. ;; ;; ======================================================================== ;; MACRO INIT_DONE DECLE 0 ENDM ;; ======================================================================== ;; ;; EMIT_CST8 Output the CST8 table. This call must appear after all ;; ;; INIT lists due to assembler restrictions. ;; ;; ======================================================================== ;; MACRO EMIT_CST8 CST8 PROC LISTING "code" IF (DEFINED _cst8_fix) AND ((CST8 AND $8000) = 0) _init_tmp SET $ ORG _cst8_fix CLRC ; patch up INITMEM ORG _init_tmp ENDI _emit_cst8(00, 01) _emit_cst8(02, 03) _emit_cst8(04, 05) _emit_cst8(06, 07) _emit_cst8(08, 09) _emit_cst8(0A, 0B) _emit_cst8(0C, 0D) _emit_cst8(0E, 0F) LISTING "prev" ENDP ENDM ;; ======================================================================== ;; ;; EMIT_CST16 Output the CST16 table. This call must appear after all ;; ;; INIT lists due to assembler restrictions. ;; ;; ======================================================================== ;; MACRO EMIT_CST16 CST16 PROC LISTING "code" _emit_cst16(10) _emit_cst16(11) _emit_cst16(12) _emit_cst16(13) _emit_cst16(14) _emit_cst16(15) _emit_cst16(16) _emit_cst16(17) _emit_cst16(18) _emit_cst16(19) _emit_cst16(1A) _emit_cst16(1B) _emit_cst16(1C) _emit_cst16(1D) _emit_cst16(1E) LISTING "prev" ENDP ENDM INCLUDE "macro/s16.mac" ;; ======================================================================== ;; ;; S16: Macros for packing strings into 16-bit decles. ;; ;; Strings start with a length indicator. Strings can be up to ;; ;; 256 characters long. ;; ;; ;; ;; S16B Same as S16, but omits the length byte. Strings are not ;; ;; terminated by anything. ;; ;; ======================================================================== ;; MACRO s16_pushc(p) IF _s16o = 0 _s16o SET 1 _s16p SET (%p%) SHL 3 ELSE _s16o SET 0 _s16t SET (%p%) _s16p SET _s16p OR ($F800 AND (_s16t SHL 11)) OR (_s16t SHR 5) DECLE _s16p ENDI ENDM MACRO s16_flush IF _s16o = 1 DECLE _s16p _s16o SET 0 ENDI ENDM MACRO S16 s LISTING "code" _s16o SET 0 _s16p SET 0 _s16i SET 0 s16_pushc(STRLEN(%s%)-1) RPT STRLEN(%s%) s16_pushc($FF AND (ASC(%s%,_s16i) - $20)) _s16i SET _s16i + 1 ENDR s16_flush LISTING "prev" ENDM MACRO S16B s LISTING "code" _s16o SET 0 _s16p SET 0 _s16i SET 0 RPT STRLEN(%s%) s16_pushc($FF AND (ASC(%s%,_s16i) - $20)) _s16i SET _s16i + 1 ENDR s16_flush LISTING "prev" ENDM INCLUDE "macro/p16.mac" ;; ======================================================================== ;; ;; P16.MAC ;; ;; Macros that simplify printing. ;; ;; Joseph Zbiciak ;; ;; These macros are hereby released into the Public Domain. ;; ;; ======================================================================== ;; IF (DEFINED _P16_MAC) = 0 0x1 _P16_MAC EQU 1 ;; ======================================================================== ;; ;; P16_CSTK r, c, fg, s ;; ;; Prints a string at r, c, in foreground color 'fg', using P16.FLS. ;; ;; This macro is intended for use in color-stack mode. ;; ;; ;; ;; ARGUMENTS ;; ;; r Row to print string at ;; ;; c Column to print string at ;; ;; fg Color to print string in ;; ;; s String to print. ;; ;; ;; ;; EXAMPLE ;; ;; P16_CSTK 10, 5, Yellow, "Hello World!" ;; ;; ======================================================================== ;; MACRO P16_CSTK r, c, fg, s CALL P16.FLS DECLE gen_cstk_card(0, GROM, %fg%, NoAdvance) DECLE disp_ptr(%r%, %c%) S16 %s% ENDM ;; ======================================================================== ;; ;; P16_FGBG r, c, fg, bg, s ;; ;; Prints a string at r, c, in foreground color 'fg' and background color ;; ;; 'bg', using P16.FLS. This macro is intended for use in ;; ;; Foreground/Background mode. ;; ;; ;; ;; ARGUMENTS ;; ;; r Row to print string at ;; ;; c Column to print string at ;; ;; fg Foreground color for string ;; ;; bg Background color for string ;; ;; s String to print. ;; ;; ;; ;; EXAMPLE ;; ;; P16_FGBG 10, 5, Yellow, Blue, "Hello World!" ;; ;; ======================================================================== ;; MACRO P16_FGBG r, c, fg, bg, s CALL P16.FLS DECLE gen_fgbg_card(0, GROM, %fg%, %bg%) DECLE disp_ptr(%r%, %c%) S16 %s% ENDM ENDI INCLUDE "macro/score.mac" ;; ======================================================================== ;; ;; Scoring macros ;; ;; ======================================================================== ;; MACRO Score(x) ((%x%)/50) ENDM ; Constant score MACRO CSTSCO s CALL ADDSCORE.cst DECLE (%s%) / 50 ENDM ; One of four random scores in R0/R1 MACRO RNDSCO CALL ADDSCORE.rnd ENDM ; Score in register MACRO REGSCO CALL ADDSCORE.reg ENDM MACRO DEFER cst IF (STRLEN("%cst%")<>2) OR (ASC("%cst%",0)<>$52) OR (ASC("%cst",1)<>$30) MVII #%cst%, R0 ENDI ADD DEFSCO, R0 MVO R0, DEFSCO ENDM 0x100 ISRVEC EQU $100 ;-$101 ; ISR jump vector ;; ======================================================================== ;; ;; SCRATCH (8-bit) MEMORY ;; ;; ======================================================================== ;; ;TICK SCRATCH 1 ; Global clock tick 0x102 TICK EQU .SCRMEM ;PTPHAS SCRATCH 1 ; Previous top-mountain phase 0x103 PTPHAS EQU .SCRMEM ;PMPHAS SCRATCH 1 ; Previous mid-mountain phase 0x104 PMPHAS EQU .SCRMEM ;PGPHAS SCRATCH 1 ; Previous ground phase 0x105 PGPHAS EQU .SCRMEM ;PPGPHA SCRATCH 1 ; Previous ground phase 0x106 PPGPHA EQU .SCRMEM ;MOFS SCRATCH 1 ; Previous ground card offset 0x107 MOFS EQU .SCRMEM ;PGCARD SCRATCH 1 ; Previous ground card offset 0x108 PGCARD EQU .SCRMEM ;MIDGFX SCRATCH 1 ; City or mountain for mid gfx. 0x109 MIDGFX EQU .SCRMEM ;MIDMSK SCRATCH 1 ; mask for CITY vs. MOUNTAIN ($3FFF/$1FFF) 0x10a MIDMSK EQU .SCRMEM ;TSKIP SCRATCH 1 ; Top vs. Mid mountain priority flag 0x10b TSKIP EQU .SCRMEM ;INCITY SCRATCH 1 ; Zero if not in CITY. 0x10c INCITY EQU .SCRMEM ;CRATCNT SCRATCH 1 ; Counter until we can make new crater 0x10d CRATCNT EQU .SCRMEM ;GDATA SCRATCH 1 ; Ground pixel pattern 0x10e GDATA EQU .SCRMEM ;HBDATA SCRATCH 1 ; Horizontal bullet pixel pattern 0x10f HBDATA EQU .SCRMEM ;HBCOL0 SCRATCH 1 ; Horizontal bullet column (old) 0x110 HBCOL0 EQU .SCRMEM ;HBCOL1 SCRATCH 1 ; Horizontal bullet column (new) 0x111 HBCOL1 EQU .SCRMEM ;HBCNT SCRATCH 1 ; Horizontal bullet lifetime counter 0x112 HBCNT EQU .SCRMEM ;HBCNT2 SCRATCH 1 ; Horizontal bullet fire-to-fire counter 0x113 HBCNT2 EQU .SCRMEM ;HBROW SCRATCH 1 ; Horizontal bullet row 0x114 HBROW EQU .SCRMEM ;HBKOS SCRATCH 1 ; Horizontal bullet kill-on-scroll 0x115 HBKOS EQU .SCRMEM ;TMCLR SCRATCH 1 ; Title message color 0x116 TMCLR EQU .SCRMEM ;TMADDR SCRATCH 1 ; Title message address 0x117 TMADDR EQU .SCRMEM ;SKIPRC SCRATCH 1 ; XXX -- Skip decoding of rocks/craters ;EXITOK SCRATCH 1 ; XXX -- schedexit trigger, to reuse for pause ;STCNT SCRATCH 1 ; XXX -- Stats div-by-16 counter ;IDLE SCRATCH 1 ; Number of idle ticks ;FDROP SCRATCH 1 ; Number of frames droped (if any) 0x118 FDROP EQU .SCRMEM ;EMODE SCRATCH 1 ; Operating mode for engine 0x119 EMODE EQU .SCRMEM ;CUENUM SCRATCH 1 ; Deferred bad-guy CUE 0x11a CUENUM EQU .SCRMEM ;BGFLAG SCRATCH 1 ; Flag: Bad-guy engine even/odd frame toggle 0x11b BGFLAG EQU .SCRMEM ;BGMPTBL SCRATCH 20 ; Bad-guy motion program table. 0x11c BGMPTBL EQU .SCRMEM ;BGEXIT SCRATCH 5 ; BGMP Exit program table. 0x130 BGEXIT EQU .SCRMEM ;MOBHIT SCRATCH 1 ; LSB set if buggy collides w/ other MOBs 0x135 MOBHIT EQU .SCRMEM ;CAUTFL SCRATCH 1 0x136 CAUTFL EQU .SCRMEM ;CONTS SCRATCH 1 ; Continues left 0x137 CONTS EQU .SCRMEM ;LIVES SCRATCH 1 ; Lives left 0x138 LIVES EQU .SCRMEM ;POINT SCRATCH 1 ; Last passed checkpoint 0x139 POINT EQU .SCRMEM ;COURSE SCRATCH 1 ; Course number (0..7) 0x13a COURSE EQU .SCRMEM ;DEFSCO SCRATCH 1 ; Deferred score (waiting for buggy to land) 0x13b DEFSCO EQU .SCRMEM ;CURBON SCRATCH 1 ; Current bonus threshold 0x13c CURBON EQU .SCRMEM ;WAVE SCRATCH 1 ; Number of currently active saucers 0x13d WAVE EQU .SCRMEM ;WKILL SCRATCH 1 ; Number of saucers killed in this wave 0x13e WKILL EQU .SCRMEM ;DOSCO SCRATCH 1 ; Flag: Do score update 0x13f DOSCO EQU .SCRMEM 0x140 .SPSTART8 SET .SCRMEM ;SPAT SCRATCH 12 ; Attributes for 12 sprites 0x140 SPAT EQU .SCRMEM 0x140 SPAT1 EQU SPAT ; Offset into SPAT table for Group 1 0x145 SPAT2 EQU SPAT + 5 ; Offset into SPAT table for Group 2 ;JMPSCO SCRATCH 5 ; Jumpable-object scoring info fpr SP #0-4 0x14c JMPSCO EQU .SCRMEM ;SPHSCR SCRATCH 5 ; Horizontal-scroll flags for SP #0-4 0x151 SPHSCR EQU .SCRMEM ;LANDED SCRATCH 1 ; Flag: Just landed safely 0x156 LANDED EQU .SCRMEM ;GP1MOB SCRATCH 1 ; Number of MOBs alloc'd to group 1 0x157 GP1MOB EQU .SCRMEM ;GP1ACT SCRATCH 1 ; Number of active sprites in group 1 0x158 GP1ACT EQU .SCRMEM ;GP1CNT SCRATCH 1 ; Multiplex counter for group 1 0x159 GP1CNT EQU .SCRMEM ;GP2MOB SCRATCH 1 ; Number of MOBs alloc'd to group 2 0x15a GP2MOB EQU .SCRMEM ;GP2ACT SCRATCH 1 ; Number of active sprites in group 2 0x15b GP2ACT EQU .SCRMEM ;GP2CNT SCRATCH 1 ; Multiplex counter for group 2 0x15c GP2CNT EQU .SCRMEM 0x15d .SPSTOP8 SET .SCRMEM ;TXLO SCRATCH 1 ; Pixel column of back end of tank 0x15d TXLO EQU .SCRMEM ;FXLO SCRATCH 1 ; Pixel column of follower (minelayer) 0x15e FXLO EQU .SCRMEM ;FHCNT SCRATCH 1 ; Follower fast-hover count 0x15f FHCNT EQU .SCRMEM ;RCCNT SCRATCH 1 0x160 RCCNT EQU .SCRMEM ;RCPIC SCRATCH 1 0x161 RCPIC EQU .SCRMEM ;RCNXT SCRATCH 2 ; RCIDX for next level 0x162 RCNXT EQU .SCRMEM ;RCLVL SCRATCH 2 ; RCIDX for current level 0x164 RCLVL EQU .SCRMEM ;LMCNT SCRATCH 1 ; Level marker counter 0x166 LMCNT EQU .SCRMEM ;LMCHAR SCRATCH 1 ; Level 'character' 0x167 LMCHAR EQU .SCRMEM ;TIMSEC SCRATCH 1 0x168 TIMSEC EQU .SCRMEM ;TIMTIC SCRATCH 1 0x169 TIMTIC EQU .SCRMEM ;CKTOG SCRATCH 1 ; Toggle checking bad guy/good-guy bullets 0x16a CKTOG EQU .SCRMEM ;FCNT SCRATCH 1 ; Counter: Rate-limit bullet firing. 0x16b FCNT EQU .SCRMEM ;EBSY SCRATCH 1 ; Engine Busy flag (in case we drop frames) 0x16c EBSY EQU .SCRMEM ;SPINCNT SCRATCH 1 ; Spinner frame counter 0x16d SPINCNT EQU .SCRMEM ;SPINB SCRATCH 1 ; Spinner bullet in the air 0x16e SPINB EQU .SCRMEM ;WTIMER SCRATCH 1 ; Countdown timer for WAIT 0x16f WTIMER EQU .SCRMEM ;GRATE SCRATCH 1 ; Ground scrolling rate 0x170 GRATE EQU .SCRMEM ;WANTVL SCRATCH 1 ; desired velocity 0x171 WANTVL EQU .SCRMEM ;JVEL SCRATCH 1 ; Current jump velocity (0 == not moving) 0x172 JVEL EQU .SCRMEM ;DOENG SCRATCH 1 0x173 DOENG EQU .SCRMEM ;DNENG SCRATCH 1 0x174 DNENG EQU .SCRMEM ;DBOUT SCRATCH 1 ; Debounced hand controller values 0x175 DBOUT EQU .SCRMEM ;DBCM SCRATCH 1 ; Debounce counter MSB 0x176 DBCM EQU .SCRMEM ;DBCL SCRATCH 1 ; Debounce counter LSB 0x177 DBCL EQU .SCRMEM ;TMP SCRATCH 5 ; Temp storage for whoever needs it 0x178 TMP EQU .SCRMEM 0x178 SCROLL EQU TMP ;RFRSH_M SCRATCH 1 ; Generic counter for music refresh 0x17d RFRSH_M EQU .SCRMEM ;NOTE_A SCRATCH 1 ; Current note on channel A 0x17e NOTE_A EQU .SCRMEM ;NOTE_B SCRATCH 1 ; Current note on channel B 0x17f NOTE_B EQU .SCRMEM ;NOTE_C SCRATCH 1 ; Current note on channel C 0x180 NOTE_C EQU .SCRMEM ;RFRSH_A SCRATCH 1 ; Counter for refresh on channel A 0x181 RFRSH_A EQU .SCRMEM ;RFRSH_B SCRATCH 1 ; Counter for refresh on channel B 0x182 RFRSH_B EQU .SCRMEM ;RFRSH_C SCRATCH 1 ; Counter for refresh on channel C 0x183 RFRSH_C EQU .SCRMEM ;VOL_A SCRATCH 1 ; Current volume on channel A 0x184 VOL_A EQU .SCRMEM ;VOL_B SCRATCH 1 ; Current volume on channel B 0x185 VOL_B EQU .SCRMEM ;VOL_C SCRATCH 1 ; Current volume on channel C 0x186 VOL_C EQU .SCRMEM ;_INSTR_A SCRATCH 1 ; ** available ** 0x187 _INSTR_A EQU .SCRMEM ;_INSTR_B SCRATCH 1 ; ** available ** 0x188 _INSTR_B EQU .SCRMEM ;_INSTR_C SCRATCH 1 ; ** available ** 0x189 _INSTR_C EQU .SCRMEM ;COUNT_A SCRATCH 1 ; Note counter on channel A 0x18a COUNT_A EQU .SCRMEM ;COUNT_B SCRATCH 1 ; Note counter on channel B 0x18b COUNT_B EQU .SCRMEM ;COUNT_C SCRATCH 1 ; Note counter on channel C 0x18c COUNT_C EQU .SCRMEM ;COUNT_M SCRATCH 1 ; Generic counter for music 0x18d COUNT_M EQU .SCRMEM ;COUNT_P SCRATCH 1 ; Pattern counter 0x18e COUNT_P EQU .SCRMEM ;PAT SCRATCH 1 ; Current pattern 0x18f PAT EQU .SCRMEM ;MUS_FLAGS SCRATCH 1 ; Music flags 0x190 MUS_FLAGS EQU .SCRMEM ;SFXTBL SCRATCH 8 0x191 SFXTBL EQU .SCRMEM ;SFXQ SCRATCH 1 0x199 SFXQ EQU .SCRMEM ;SFXBSY SCRATCH 1 0x19a SFXBSY EQU .SCRMEM ;SFXSTMP SCRATCH 1 ; extra state for saucer slide-whistle SFX 0x19b SFXSTMP EQU .SCRMEM ;MUXOK SCRATCH 1 ; Flag: Ok to run UPMUX in ENGINE2 0x19c MUXOK EQU .SCRMEM ;SCORE SCRATCH 2 ; 16-bit score 0x19d SCORE EQU .SCRMEM ;PSCOR SCRATCH 2 ; Peak score this game 0x19f PSCOR EQU .SCRMEM ;TOPSCO SCRATCH 16 ; Top scores for all 8 courses. 0x1a1 TOPSCO EQU .SCRMEM 0x1f0 PSG0 EQU $1F0 ;-$1FD ; PSG base address (master component) 0xf0 PSG1 EQU $0F0 ;-$0FD ; PSG base address (ECS) 0x1fe CTRL0 EQU $1FE ; Right hand controller 0x1ff CTRL1 EQU $1FF ; Left hand controller ;; ======================================================================== ;; ;; SYSTEM (16-bit) MEMORY ;; ;; ======================================================================== ;; 0x2f0 .SPSTART16 SET .SYSMEM ;SDAT SYSTEM 24 ; Shadow copy of STIC regs 0x2f0 SDAT EQU .SYSMEM ;SPXYV SYSTEM 24 ; X/Y velocity for 12 sprites 0x308 SPXYV EQU .SYSMEM ;SPXYP SYSTEM 24 ; Sprite X/Y position, 8Q8 0x320 SPXYP EQU .SYSMEM 0x338 .SPSTOP16 SET .SYSMEM 0x320 SPXY1 EQU SPXYP ; Offset into SPXYP table for Group 1 0x32a SPXY2 EQU SPXYP + 5*2 ; Offset into SPXYP table for Group 2 ;RCIDX SYSTEM 1 ; Rock/crater/spawn index 0x338 RCIDX EQU .SYSMEM ;GGB0 SYSTEM 1 ; good-guy bullet 0 0x339 GGB0 EQU .SYSMEM ;GGB1 SYSTEM 1 ; good-guy bullet 1 0x33a GGB1 EQU .SYSMEM ;GGB2 SYSTEM 1 ; good-guy bullet 2 0x33b GGB2 EQU .SYSMEM ;MGOFS SYSTEM 1 ; Mid-ground graphics offset in GRAM 0x33c MGOFS EQU .SYSMEM ;GPHASE SYSTEM 1 ; ground scroll phase 0x33d GPHASE EQU .SYSMEM ;MPHASE SYSTEM 1 ; midmntn scroll phase 0x33e MPHASE EQU .SYSMEM ;TPHASE SYSTEM 1 ; topmntn scroll phase 0x33f TPHASE EQU .SYSMEM ;MPTR SYSTEM 1 ; mountain gfx ROM pointer 0x340 MPTR EQU .SYSMEM ;WPTR SYSTEM 1 ; wheel gfx ROM pointer 0x341 WPTR EQU .SYSMEM ;RPTR SYSTEM 1 ; rock/crater gfx ROM pointer 0x342 RPTR EQU .SYSMEM ;JHGT SYSTEM 1 ; Current jump height (0 == on ground) 0x343 JHGT EQU .SYSMEM ;MGRAM SYSTEM 1 ; GRAM address for mountain data 0x344 MGRAM EQU .SYSMEM ;SONG SYSTEM 1 ; Tracker variables 0x345 SONG EQU .SYSMEM ;POS_A SYSTEM 1 0x346 POS_A EQU .SYSMEM ;POS_B SYSTEM 1 0x347 POS_B EQU .SYSMEM ;POS_C SYSTEM 1 0x348 POS_C EQU .SYSMEM ;SDATP SYSTEM 1 0x349 SDATP EQU .SYSMEM ;STACK SYSTEM 20 0x34a STACK EQU .SYSMEM 0x35e BGTTMP EQU $35E ; Temporary variable used by BGT routines 0x35f RSEED EQU $35F 0x3000 GROM EQU $3000 0x3800 GRAM EQU $3800 0x1014 ISRRET EQU $1014 ;; ------------------------------------------------------------------------ ;; ;; Magic memory locations in ECS ;; ;; ------------------------------------------------------------------------ ;; 0x4040 ECSOK EQU $4040 ; flag saying whether extra features exist. ;; ------------------------------------------------------------------------ ;; ;; GRAM layout in-game ;; ;; 00 Space character ;; ;; 01 - 07 "Joseph Zbiciak" graphic ;; ;; 03 - 04 "Time" graphic ;; ;; 05 - 07 "Caution" graphic ;; ;; 08 - 0F Middle "mountain" graphics (8 cards) ;; ;; 10 - 19 Numeric digits (10 cards) ;; ;; 1A Circle-C copyright symbol ;; ;; 1A "Pt" graphic ;; ;; 1B Ground terrain (1 cards) ;; ;; 21 Creep #1 (orange ship) ;; ;; 22 Creep #2 (blue ship) ;; ;; 23 Creep #3 (white spinner) ;; ;; 24 Creep missle ;; ;; 25 Buggy vert missle ;; ;; 26 Buggy horiz missle ;; ;; 27 Buggy body ;; ;; 28 - 29 Buggy wheels/guns (2 cards) ;; ;; 2A Solid ground-piece ;; ;; 2B Creep crater-blaster missle ;; ;; 2C - 37 Rock / Crater graphics (12 cards) ;; ;; 38 - 3F Top "mountain" graphics (8 cards) ;; ;; ------------------------------------------------------------------------ ;; 0x38 TCARD EQU $38 0x8 CCARD EQU $08 0x8 MCARD EQU $08 0x2c RCARD EQU $2C 0x1b GCARD EQU $1B 0x1c HBCARD EQU $1C 0x27 BCARD EQU $27 0x28 WCARD EQU $28 0x23 SCARD EQU $23 0x4 TMCARD EQU $04 0x1a PTCARD EQU $1A 0x39c0 TOPGR EQU GRAM + TCARD * 8 ; Top mountains 0x3840 MIDGR EQU GRAM + MCARD * 8 ; Middle mountains 0x3960 RGRAM EQU GRAM + RCARD * 8 ; Rock / Crater 0x38d8 GGRAM EQU GRAM + GCARD * 8 ; Ground terrain 0x3938 BGRAM EQU GRAM + BCARD * 8 ; Buggy body 0x3945 WGRAM EQU GRAM + WCARD * 8 + 5 ; Buggy wheels 0x38e3 HBGRAM EQU GRAM + HBCARD* 8 + 3 ; Horizontal bullet 0x3918 SGRAM EQU GRAM + SCARD * 8 ; Spinner 0x820 TMCARDx EQU $800 + TMCARD * 8 ; "Time" graphic 0x8d0 PTCARDx EQU $800 + PTCARD * 8 ; "Pt" graphic 0x8e0 HBCARDx EQU HBCARD*8 + X_BLK + $0800 0x1967 LMPCARDx EQU RCARD*8 + X_TITL + $0800 0x9963 RCARDx EQU RCARD*8 + X_ROCK + $0800 + $8000 0x9973 RCARD2x EQU (RCARD + 2)*8 + X_ROCK + $0800 + $8000 0x18da GCARDx EQU GCARD*8 + X_GRND + $0800 0x3 TROW_n EQU 3 0x6 CROW_n EQU 6 0x7 MROW_n EQU 7 0x8 GROW_n EQU 8 0x18 TROW_p EQU TROW_n * 8 0x30 CROW_p EQU CROW_n * 8 0x38 MROW_p EQU MROW_n * 8 0x40 GROW_p EQU GROW_n * 8 0x23c TROW EQU $200 + TROW_n*20 0x278 CROW EQU $200 + CROW_n*20 0x28c MROW EQU $200 + MROW_n*20 0x2a0 GROW EQU $200 + GROW_n*20 0x200 STROW1 EQU 0*20 + $200 0x28c STROW2 EQU 7*20 + $200 0x214 RKROW EQU 1*20 + $200 ;; ======================================================================== ;; ;; FONT AND DATA ;; ;; ======================================================================== ;; IF 0 ; Temporary scratch memory ORG $C100, $C100, "+RW" SNDSTRM RMB 8 ; Sound stream table ;STACK RMB 128 ; For now, for debugging purposes STKDEEP RMB 1 ENDI IF (DEFINED DOIDLEHST) <> 0 ORG $CE00, $CE00, "+RW" IDLEHST RMB 256 ENDI 0xd000 ORG $D000 0xd000 _SPATBL EQU $ INCLUDE "gfx/spatbl.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; MOB Attribute Tables, Buggy Collision Tables ;; ;; Copyright 2006, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;; ======================================================================== ;; ;; SPENT: This macro takes several arguments to construct a sprite ;; ;; attribute entry. ;; ;; ;; ;; SPANI: Same as SPENT, but also specifies animation parameters. ;; ;; ;; ;; lbl Label to assign SPAT entry. Becomes SPATBL.lbl ;; ;; intr MOB interaction: One of na, intr ;; ;; xsiz X magnification: One of na, xsiz ;; ;; xofs X offset. Small integer. ;; ;; yres Y height. One of na, yres ;; ;; ysiz Y magnification: One of na, siz2, siz4 ;; ;; xmir X mirroring: One of na, xmir ;; ;; ymir Y mirroring: One of na, ymir ;; ;; yofs Y offset. Small integer. ;; ;; color Color: One of X_BLK thru X_PUR ;; ;; card Integer $00 to $FF (GROM), $100 to $13F (GRAM). ;; ;; bw Bounding box width ;; ;; bh Bounding box height ;; ;; ;; ;; SPANI only: ;; ;; anim Next SPAT in animation sequence. ;; ;; rate Animation rate: One of 60, 30, 15, 0. ;; ;; ;; ;; ;; ;; SPATBL entries are built primarily around the STIC's X/Y/A register ;; ;; structure, with a few extra things thrown in: ;; ;; ;; ;; ;; ;; X Register: Offset 0 ;; ;; ;; ;; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ;; ;; +----+----+----+---+---+---+----+----+---+---+---+---+---+---+---+---+ ;; ;; | Bits 7:3 of | X |VISB|INTR| X Coordinate | ;; ;; | next anim frame |SIZ| | | (0 to 255) | ;; ;; +----+----+----+---+---+---+----+----+---+---+---+---+---+---+---+---+ ;; ;; ;; ;; Y Register: Offset 1 ;; ;; ;; ;; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ;; ;; +----+----+----------+---+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; |Bits 2, 0| Bits 3:2 | Y | X | Y | Y | Y | Y Coordinate | ;; ;; |next anim|of ScorIdx|MIR|MIR|SZ4|SZ2|RES| (0 to 127) | ;; ;; +----+----+----------+---+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; ;; ;; A Register: Offset 2 ;; ;; ;; ;; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ;; ;; +----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; |Animation|PRIO| FG |GRAM| GRAM/GROM Card # (0 to 255) | FG Color | ;; ;; | Rate | |bit3|GROM| (bits 9, 10 ignored for GRAM) | Bits 0-2 | ;; ;; +----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; |ScorIdx| ;; ;; |Bit 1:0| ;; ;; +-------+ ;; ;; ;; ;; Bounding Box: Offset 3 ;; ;; 15 8 7 0 ;; ;; +---------------------------------+----------------------------------+ ;; ;; | Object | Object | ;; ;; | Height | Width | ;; ;; +---------------------------------+----------------------------------+ ;; ;; ;; ;; ;; ;; The animation rate is encoded as a 2 bit number: ;; ;; ;; ;; 00 None ;; ;; 01 8 Hz ;; ;; 11 15 Hz ;; ;; 10 30 Hz ;; ;; ;; ;; The animation frame number refers directly to a SPATBL entry. ;; ;; ;; ;; The ScorIdx value gives a 4 bit number indicating what score is ;; ;; associated with the SPATBL entry if any. Notice that bits 1:0 of ;; ;; the ScorIdx overlap the GRAM/GROM card number. Most SPATBL entries ;; ;; point to GRAM entries, so these bits go unused. Only three objects ;; ;; use GROM entries: The hut, stalactites and land-mines. Only ;; ;; stalactites have a non-zero score. ;; ;; ;; ;; To make stalactites work, they must use a ScorIdx whose bits 1 and 0 ;; ;; match bits 7 and 6 of the card number. Thus stalactites must have a ;; ;; ScorIdx of the form xx10. ;; ;; ;; ;; ======================================================================== ;; MACRO spidx(lbl) ((%lbl% - SPATBL) + 1) ENDM MACRO SPENT lbl,intr,xsiz,xofs,yres,ysiz,xmir,ymir,yofs,color,card,bw,bh,sc @@_%lbl%: DECLE _X.%intr% + _X.visb + _X.%xsiz% + (%xofs%) DECLE _Y.%yres% + _Y.%ysiz% + _Y.%ymir% + _Y.%xmir% + (%yofs%)+SCORIDX.hi%sc% DECLE X_%color% + 8*%card% + SCORIDX.lo%sc% DECLE (%bh%) SHL 8 + %bw% @@%lbl% EQU spidx(@@_%lbl%) ENDM MACRO SPANI lbl,intr,xsiz,xofs,yres,ysiz,xmir,ymir,yofs,color,card,bw,bh,sc,an,rate @@_%lbl%: DECLE _X.%intr% + _X.visb + _X.%xsiz% + (%xofs%) + ((spidx(@@_%an%) AND $F8) SHL 8) DECLE _Y.%yres% + _Y.%ysiz% + _Y.%ymir% + _Y.%xmir% + (%yofs%)+ ((spidx(@@_%an%) AND $4) SHL 13) + ((spidx(@@_%an%) AND 1) SHL 14)+SCORIDX.hi%sc% DECLE X_%color% + 8*%card% + ANI.%rate%+SCORIDX.lo%sc% DECLE %bh% * 256 + %bw% @@%lbl% EQU spidx(@@_%lbl%) ENDM 0xd000 ANI PROC 0x8000 @@30 EQU 2 SHL 14 0xc000 @@15 EQU 3 SHL 14 0x4000 @@8 EQU 1 SHL 14 0x0 @@0 EQU 0 SHL 14 ENDP MACRO scoridx(l, v) SCORIDX.lo%l% EQU ((%v%) AND $3) SHL 9 SCORIDX.hi%l% EQU ((%v%) AND $C) SHL 10 ENDM ;scoridx(0000, $0) 0x0 SCORIDX.lo0000 EQU (($0) AND $3) SHL 9 0x0 SCORIDX.hi0000 EQU (($0) AND $C) SHL 10 ;scoridx(0350, $1) 0x200 SCORIDX.lo0350 EQU (($1) AND $3) SHL 9 0x0 SCORIDX.hi0350 EQU (($1) AND $C) SHL 10 ;scoridx(0500, $2) 0x400 SCORIDX.lo0500 EQU (($2) AND $3) SHL 9 0x0 SCORIDX.hi0500 EQU (($2) AND $C) SHL 10 ;scoridx(0750, $3) 0x600 SCORIDX.lo0750 EQU (($3) AND $3) SHL 9 0x0 SCORIDX.hi0750 EQU (($3) AND $C) SHL 10 ;scoridx(1000, $4) 0x0 SCORIDX.lo1000 EQU (($4) AND $3) SHL 9 0x1000 SCORIDX.hi1000 EQU (($4) AND $C) SHL 10 ;scoridx(1250, $5) 0x200 SCORIDX.lo1250 EQU (($5) AND $3) SHL 9 0x1000 SCORIDX.hi1250 EQU (($5) AND $C) SHL 10 ;scoridx(1450, $6) 0x400 SCORIDX.lo1450 EQU (($6) AND $3) SHL 9 0x1000 SCORIDX.hi1450 EQU (($6) AND $C) SHL 10 ;scoridx(2000, $7) 0x600 SCORIDX.lo2000 EQU (($7) AND $3) SHL 9 0x1000 SCORIDX.hi2000 EQU (($7) AND $C) SHL 10 ;scoridx(2250, $8) 0x0 SCORIDX.lo2250 EQU (($8) AND $3) SHL 9 0x2000 SCORIDX.hi2250 EQU (($8) AND $C) SHL 10 ;scoridx(3750, $9) 0x200 SCORIDX.lo3750 EQU (($9) AND $3) SHL 9 0x2000 SCORIDX.hi3750 EQU (($9) AND $C) SHL 10 ;scoridx(4500, $A) 0x400 SCORIDX.lo4500 EQU (($A) AND $3) SHL 9 0x2000 SCORIDX.hi4500 EQU (($A) AND $C) SHL 10 ;scoridx(6250, $B) 0x600 SCORIDX.lo6250 EQU (($B) AND $3) SHL 9 0x2000 SCORIDX.hi6250 EQU (($B) AND $C) SHL 10 ;scoridx(rnd0, $C) ; 3000/6000/5000/8000 (plant) 0x0 SCORIDX.lornd0 EQU (($C) AND $3) SHL 9 0x3000 SCORIDX.hirnd0 EQU (($C) AND $C) SHL 10 ; 3000/6000/5000/8000 (plant) ;scoridx(rnd1, $D) ; 5000/8000/7500/10000 (follower) 0x200 SCORIDX.lornd1 EQU (($D) AND $3) SHL 9 0x3000 SCORIDX.hirnd1 EQU (($D) AND $C) SHL 10 ; 5000/8000/7500/10000 (follower) ;scoridx(stal, $C) ; 2500/5000/7500/10000 (stalactite) (really $E) 0x0 SCORIDX.lostal EQU (($C) AND $3) SHL 9 0x3000 SCORIDX.histal EQU (($C) AND $C) SHL 10 ; 2500/5000/7500/10000 (stalactite) (really $E) ;scoridx(rnd3, $F) ; ? 0x600 SCORIDX.lornd3 EQU (($F) AND $3) SHL 9 0x3000 SCORIDX.hirnd3 EQU (($F) AND $C) SHL 10 ; ? ;; ======================================================================== ;; ;; SCORTBL -- Lookup table associated with ScorIdx 0000 .. 1011. ;; ;; ======================================================================== ;; 0xd000 SCORTBL PROC ; DECLE pack(Score( 0), Score( 350)) d000 0007 DECLE ((((((0)/50)) AND $FF) SHL 8) OR ((((350)/50)) AND $FF)) ; DECLE pack(Score( 500), Score( 750)) d001 0a0f DECLE ((((((500)/50)) AND $FF) SHL 8) OR ((((750)/50)) AND $FF)) ; DECLE pack(Score(1000), Score(1250)) d002 1419 DECLE ((((((1000)/50)) AND $FF) SHL 8) OR ((((1250)/50)) AND $FF)) ; DECLE pack(Score(1450), Score(2000)) d003 1d28 DECLE ((((((1450)/50)) AND $FF) SHL 8) OR ((((2000)/50)) AND $FF)) ; DECLE pack(Score(2250), Score(3750)) d004 2d4b DECLE ((((((2250)/50)) AND $FF) SHL 8) OR ((((3750)/50)) AND $FF)) ; DECLE pack(Score(4500), Score(6250)) d005 5a7d DECLE ((((((4500)/50)) AND $FF) SHL 8) OR ((((6250)/50)) AND $FF)) ENDP ;; ======================================================================== ;; ;; MOVING OBJECT ATTRIBUTE TABLE ;; ;; ======================================================================== ;; 0xd006 SPATBL PROC 0xd005 @@_done EQU SPATBL-1 0x0 @@0 EQU 0 ;; Saucers must be at head of table. ;; Crater-making Saucers (must be together in one spot for BGSAUCER). ;SPENT wht0, intr,xsiz,-5, na ,siz4,na ,na ,-4,WHT,$123,$0A,$0A,2000 0xd006 @@_wht0: d006 06fb DECLE _X.intr + _X.visb + _X.xsiz + (-5) d007 11fc DECLE _Y.na + _Y.siz4 + _Y.na + _Y.na + (-4)+SCORIDX.hi2000 d008 0f1f DECLE X_WHT + 8*$123 + SCORIDX.lo2000 d009 0a0a DECLE ($0A) SHL 8 + $0A 0x1 @@wht0 EQU ((@@_wht0 - SPATBL) + 1) ;SPENT wht1, intr,xsiz,-8, na ,siz2,na ,na ,+2,GRY,$123,$10,$0A,2000 0xd00a @@_wht1: d00a 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d00b 1102 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+2)+SCORIDX.hi2000 d00c 1f18 DECLE X_GRY + 8*$123 + SCORIDX.lo2000 d00d 0a10 DECLE ($0A) SHL 8 + $10 0x5 @@wht1 EQU ((@@_wht1 - SPATBL) + 1) ;SPENT wht2, intr,na , 0, na ,siz2,na ,na ,+4,WHT,$123,$07,$08,2000 0xd00e @@_wht2: d00e 0300 DECLE _X.intr + _X.visb + _X.na + (0) d00f 1104 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+4)+SCORIDX.hi2000 d010 0f1f DECLE X_WHT + 8*$123 + SCORIDX.lo2000 d011 0807 DECLE ($08) SHL 8 + $07 0x9 @@wht2 EQU ((@@_wht2 - SPATBL) + 1) ;SPENT wht3, intr,na , 0, na ,siz1,na ,na ,+4,CYN,$123,$07,$08,2250 0xd012 @@_wht3: d012 0300 DECLE _X.intr + _X.visb + _X.na + (0) d013 2004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+SCORIDX.hi2250 d014 1919 DECLE X_CYN + 8*$123 + SCORIDX.lo2250 d015 0807 DECLE ($08) SHL 8 + $07 0xd @@wht3 EQU ((@@_wht3 - SPATBL) + 1) ;; Moon Saucers: Pink, Blue ;SPENT pnk0, intr,xsiz,-8, na ,siz2,na ,na ,+0,PNK,$121,$10,$06,1250 0xd016 @@_pnk0: d016 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d017 1100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hi1250 d018 1b0c DECLE X_PNK + 8*$121 + SCORIDX.lo1250 d019 0610 DECLE ($06) SHL 8 + $10 0x11 @@pnk0 EQU ((@@_pnk0 - SPATBL) + 1) ;SPENT blu0, intr,xsiz,-8, na ,siz1,na ,na ,+4,BLU,$122,$10,$05,1250 0xd01a @@_blu0: d01a 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d01b 1004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+SCORIDX.hi1250 d01c 0b11 DECLE X_BLU + 8*$122 + SCORIDX.lo1250 d01d 0510 DECLE ($05) SHL 8 + $10 0x15 @@blu0 EQU ((@@_blu0 - SPATBL) + 1) ;; Mars Saucers: Cyan, Yellow, Grey ;SPANI pnk1, intr,xsiz,-8, na ,siz1,na ,na ,+4,YGR,$121,$10,$08,1250,pnk1b,30 0xd01e @@_pnk1: d01e 1ef8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) + ((((@@_pnk1b - SPATBL) + 1) AND $F8) SHL 8) d01f d004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+ ((((@@_pnk1b - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk1b - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d020 9b0e DECLE X_YGR + 8*$121 + ANI.30+SCORIDX.lo1250 d021 0810 DECLE $08 * 256 + $10 0x19 @@pnk1 EQU ((@@_pnk1 - SPATBL) + 1) ;SPANI pnk1b,intr,xsiz,-8, na ,siz1,na ,na ,+4,GRN,$11A,$10,$08,1250,pnk1c,30 0xd022 @@_pnk1b: d022 26f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) + ((((@@_pnk1c - SPATBL) + 1) AND $F8) SHL 8) d023 5004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+ ((((@@_pnk1c - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk1c - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d024 8ad5 DECLE X_GRN + 8*$11A + ANI.30+SCORIDX.lo1250 d025 0810 DECLE $08 * 256 + $10 0x1d @@pnk1b EQU ((@@_pnk1b - SPATBL) + 1) ;SPANI pnk1c,intr,xsiz,-8, na ,siz1,xmir,na ,+4,YGR,$11A,$10,$08,1250,pnk1d,30 0xd026 @@_pnk1c: d026 26f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) + ((((@@_pnk1d - SPATBL) + 1) AND $F8) SHL 8) d027 d404 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (+4)+ ((((@@_pnk1d - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk1d - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d028 9ad6 DECLE X_YGR + 8*$11A + ANI.30+SCORIDX.lo1250 d029 0810 DECLE $08 * 256 + $10 0x21 @@pnk1c EQU ((@@_pnk1c - SPATBL) + 1) ;SPANI pnk1d,intr,xsiz,-8, na ,siz1,xmir,na ,+4,GRN,$121,$10,$08,1250,pnk1 ,30 0xd02a @@_pnk1d: d02a 1ef8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) + ((((@@_pnk1 - SPATBL) + 1) AND $F8) SHL 8) d02b 5404 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (+4)+ ((((@@_pnk1 - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk1 - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d02c 8b0d DECLE X_GRN + 8*$121 + ANI.30+SCORIDX.lo1250 d02d 0810 DECLE $08 * 256 + $10 0x25 @@pnk1d EQU ((@@_pnk1d - SPATBL) + 1) ;SPENT blu1, intr,xsiz,-8, na ,siz1,na ,na ,+4,YEL,$122,$10,$05,1250 0xd02e @@_blu1: d02e 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d02f 1004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+SCORIDX.hi1250 d030 0b16 DECLE X_YEL + 8*$122 + SCORIDX.lo1250 d031 0510 DECLE ($05) SHL 8 + $10 0x29 @@blu1 EQU ((@@_blu1 - SPATBL) + 1) ;SPENT blu1a,intr,xsiz,-8, na ,siz1,na ,na ,+4,TAN,$122,$10,$05,1250 0xd032 @@_blu1a: d032 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d033 1004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+SCORIDX.hi1250 d034 0b13 DECLE X_TAN + 8*$122 + SCORIDX.lo1250 d035 0510 DECLE ($05) SHL 8 + $10 0x2d @@blu1a EQU ((@@_blu1a - SPATBL) + 1) ;; Pluto Saucers ;SPANI pnk2 ,intr,na , 0, na ,siz1,na ,na ,+4,PUR,$121,$08,$08,1250,pnk2b,8 0xd036 @@_pnk2: d036 3300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_pnk2b - SPATBL) + 1) AND $F8) SHL 8) d037 d004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+ ((((@@_pnk2b - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk2b - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d038 5b0f DECLE X_PUR + 8*$121 + ANI.8+SCORIDX.lo1250 d039 0808 DECLE $08 * 256 + $08 0x31 @@pnk2 EQU ((@@_pnk2 - SPATBL) + 1) ;SPANI pnk2b,intr,na , 0, na ,siz1,xmir,na ,+4,PUR,$121,$08,$08,1250,pnk2 ,8 0xd03a @@_pnk2b: d03a 3300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_pnk2 - SPATBL) + 1) AND $F8) SHL 8) d03b 5404 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (+4)+ ((((@@_pnk2 - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk2 - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d03c 5b0f DECLE X_PUR + 8*$121 + ANI.8+SCORIDX.lo1250 d03d 0808 DECLE $08 * 256 + $08 0x35 @@pnk2b EQU ((@@_pnk2b - SPATBL) + 1) ;SPANI blu2, intr,na , 0, na ,siz1,na ,na ,+4,RED,$103,$08,$05,1250,blu2b,30 0xd03e @@_blu2: d03e 3b00 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_blu2b - SPATBL) + 1) AND $F8) SHL 8) d03f d004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+ ((((@@_blu2b - SPATBL) + 1) AND $4) SHL 13) + ((((@@_blu2b - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d040 8a1a DECLE X_RED + 8*$103 + ANI.30+SCORIDX.lo1250 d041 0508 DECLE $05 * 256 + $08 0x39 @@blu2 EQU ((@@_blu2 - SPATBL) + 1) ;SPANI blu2b,intr,na , 0, na ,siz1,na ,na ,+4,RED,$11A,$08,$05,1250,blu2c,30 0xd042 @@_blu2b: d042 4300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_blu2c - SPATBL) + 1) AND $F8) SHL 8) d043 5004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+ ((((@@_blu2c - SPATBL) + 1) AND $4) SHL 13) + ((((@@_blu2c - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d044 8ad2 DECLE X_RED + 8*$11A + ANI.30+SCORIDX.lo1250 d045 0508 DECLE $05 * 256 + $08 0x3d @@blu2b EQU ((@@_blu2b - SPATBL) + 1) ;SPANI blu2c,intr,na , 0, na ,siz1,xmir,na ,+4,RED,$11A,$08,$05,1250,blu2d,30 0xd046 @@_blu2c: d046 4300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_blu2d - SPATBL) + 1) AND $F8) SHL 8) d047 d404 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (+4)+ ((((@@_blu2d - SPATBL) + 1) AND $4) SHL 13) + ((((@@_blu2d - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d048 8ad2 DECLE X_RED + 8*$11A + ANI.30+SCORIDX.lo1250 d049 0508 DECLE $05 * 256 + $08 0x41 @@blu2c EQU ((@@_blu2c - SPATBL) + 1) ;SPANI blu2d,intr,na , 0, na ,siz1,xmir,na ,+4,RED,$103,$08,$05,1250,blu2 ,30 0xd04a @@_blu2d: d04a 3b00 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_blu2 - SPATBL) + 1) AND $F8) SHL 8) d04b 5404 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (+4)+ ((((@@_blu2 - SPATBL) + 1) AND $4) SHL 13) + ((((@@_blu2 - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1250 d04c 8a1a DECLE X_RED + 8*$103 + ANI.30+SCORIDX.lo1250 d04d 0508 DECLE $05 * 256 + $08 0x45 @@blu2d EQU ((@@_blu2d - SPATBL) + 1) ;; Mercury Saucers ;SPANI pnk3, intr,na , 0, na ,siz1,na ,na ,+4,RED,$121,$08,$06,1450,pnk3b,8 0xd04e @@_pnk3: d04e 4b00 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_pnk3b - SPATBL) + 1) AND $F8) SHL 8) d04f d004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+ ((((@@_pnk3b - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk3b - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1450 d050 4d0a DECLE X_RED + 8*$121 + ANI.8+SCORIDX.lo1450 d051 0608 DECLE $06 * 256 + $08 0x49 @@pnk3 EQU ((@@_pnk3 - SPATBL) + 1) ;SPANI pnk3b,intr,na , 0, na ,siz1,xmir,na ,+4,RED,$121,$08,$06,1450,pnk3 ,8 0xd052 @@_pnk3b: d052 4b00 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_pnk3 - SPATBL) + 1) AND $F8) SHL 8) d053 5404 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (+4)+ ((((@@_pnk3 - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk3 - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1450 d054 4d0a DECLE X_RED + 8*$121 + ANI.8+SCORIDX.lo1450 d055 0608 DECLE $06 * 256 + $08 0x4d @@pnk3b EQU ((@@_pnk3b - SPATBL) + 1) ;SPANI pnk3c,intr,na , 0, na ,siz1,na ,na ,+4,ORG,$121,$08,$06,1450,pnk3d,8 0xd056 @@_pnk3c: d056 5300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_pnk3d - SPATBL) + 1) AND $F8) SHL 8) d057 d004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+ ((((@@_pnk3d - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk3d - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1450 d058 5d0a DECLE X_ORG + 8*$121 + ANI.8+SCORIDX.lo1450 d059 0608 DECLE $06 * 256 + $08 0x51 @@pnk3c EQU ((@@_pnk3c - SPATBL) + 1) ;SPANI pnk3d,intr,na , 0, na ,siz1,xmir,na ,+4,ORG,$121,$08,$06,1450,pnk3c,8 0xd05a @@_pnk3d: d05a 5300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_pnk3c - SPATBL) + 1) AND $F8) SHL 8) d05b 5404 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (+4)+ ((((@@_pnk3c - SPATBL) + 1) AND $4) SHL 13) + ((((@@_pnk3c - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi1450 d05c 5d0a DECLE X_ORG + 8*$121 + ANI.8+SCORIDX.lo1450 d05d 0608 DECLE $06 * 256 + $08 0x55 @@pnk3d EQU ((@@_pnk3d - SPATBL) + 1) ;SPENT blu3, intr,na , 0, na ,siz1,na ,na ,+4,WHT,$11A,$08,$05,1450 0xd05e @@_blu3: d05e 0300 DECLE _X.intr + _X.visb + _X.na + (0) d05f 1004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+SCORIDX.hi1450 d060 0cd7 DECLE X_WHT + 8*$11A + SCORIDX.lo1450 d061 0508 DECLE ($05) SHL 8 + $08 0x59 @@blu3 EQU ((@@_blu3 - SPATBL) + 1) ;SPENT blu3c,intr,na , 0, na ,siz1,na ,na ,+4,YEL,$11A,$08,$05,1450 0xd062 @@_blu3c: d062 0300 DECLE _X.intr + _X.visb + _X.na + (0) d063 1004 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+4)+SCORIDX.hi1450 d064 0cd6 DECLE X_YEL + 8*$11A + SCORIDX.lo1450 d065 0508 DECLE ($05) SHL 8 + $08 0x5d @@blu3c EQU ((@@_blu3c - SPATBL) + 1) 0x5d S_end EQU SPATBL.blu3c ; Last saucer ;; Turrets ;SPENT tur0, intr,na , 0, na ,siz2,na ,na ,+2,DGR,$120,$08,$08,2000 0xd066 @@_tur0: d066 0300 DECLE _X.intr + _X.visb + _X.na + (0) d067 1102 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+2)+SCORIDX.hi2000 d068 0f04 DECLE X_DGR + 8*$120 + SCORIDX.lo2000 d069 0808 DECLE ($08) SHL 8 + $08 0x61 @@tur0 EQU ((@@_tur0 - SPATBL) + 1) ;SPENT tur1, intr,na , 0, na ,siz2,na ,na ,+2,GRN,$120,$08,$08,2000 0xd06a @@_tur1: d06a 0300 DECLE _X.intr + _X.visb + _X.na + (0) d06b 1102 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+2)+SCORIDX.hi2000 d06c 0f05 DECLE X_GRN + 8*$120 + SCORIDX.lo2000 d06d 0808 DECLE ($08) SHL 8 + $08 0x65 @@tur1 EQU ((@@_tur1 - SPATBL) + 1) ;SPENT tur2, intr,na , 0, na ,siz2,na ,na ,+2,BRN,$120,$08,$08,2000 0xd06e @@_tur2: d06e 0300 DECLE _X.intr + _X.visb + _X.na + (0) d06f 1102 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+2)+SCORIDX.hi2000 d070 1f03 DECLE X_BRN + 8*$120 + SCORIDX.lo2000 d071 0808 DECLE ($08) SHL 8 + $08 0x69 @@tur2 EQU ((@@_tur2 - SPATBL) + 1) ;SPENT tur3, intr,na , 0, na ,siz2,na ,na ,+2,BLK,$120,$08,$08,2250 0xd072 @@_tur3: d072 0300 DECLE _X.intr + _X.visb + _X.na + (0) d073 2102 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+2)+SCORIDX.hi2250 d074 0900 DECLE X_BLK + 8*$120 + SCORIDX.lo2250 d075 0808 DECLE ($08) SHL 8 + $08 0x6d @@tur3 EQU ((@@_tur3 - SPATBL) + 1) ;; Boulder (four frames) ;SPANI bld0a,intr,na , 0, na ,siz2,na ,na ,+2,BRN,$122,$08,$08,0500,bld0b,8 0xd076 @@_bld0a: d076 7300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_bld0b - SPATBL) + 1) AND $F8) SHL 8) d077 c102 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+2)+ ((((@@_bld0b - SPATBL) + 1) AND $4) SHL 13) + ((((@@_bld0b - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0500 d078 5d13 DECLE X_BRN + 8*$122 + ANI.8+SCORIDX.lo0500 d079 0808 DECLE $08 * 256 + $08 0x71 @@bld0a EQU ((@@_bld0a - SPATBL) + 1) ;SPANI bld0b,intr,na , 0, na ,siz2,xmir,na ,+2,BRN,$122,$08,$08,0500,bld0c,8 0xd07a @@_bld0b: d07a 7b00 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_bld0c - SPATBL) + 1) AND $F8) SHL 8) d07b 4502 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.xmir + (+2)+ ((((@@_bld0c - SPATBL) + 1) AND $4) SHL 13) + ((((@@_bld0c - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0500 d07c 5d13 DECLE X_BRN + 8*$122 + ANI.8+SCORIDX.lo0500 d07d 0808 DECLE $08 * 256 + $08 0x75 @@bld0b EQU ((@@_bld0b - SPATBL) + 1) ;SPANI bld0c,intr,na , 0, na ,siz2,xmir,ymir,+2,BRN,$122,$08,$08,0500,bld0d,8 0xd07e @@_bld0c: d07e 7b00 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_bld0d - SPATBL) + 1) AND $F8) SHL 8) d07f cd02 DECLE _Y.na + _Y.siz2 + _Y.ymir + _Y.xmir + (+2)+ ((((@@_bld0d - SPATBL) + 1) AND $4) SHL 13) + ((((@@_bld0d - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0500 d080 5d13 DECLE X_BRN + 8*$122 + ANI.8+SCORIDX.lo0500 d081 0808 DECLE $08 * 256 + $08 0x79 @@bld0c EQU ((@@_bld0c - SPATBL) + 1) ;SPANI bld0d,intr,na , 0, na ,siz2,na ,ymir,+2,BRN,$122,$08,$08,0500,bld0a,8 0xd082 @@_bld0d: d082 7300 DECLE _X.intr + _X.visb + _X.na + (0) + ((((@@_bld0a - SPATBL) + 1) AND $F8) SHL 8) d083 4902 DECLE _Y.na + _Y.siz2 + _Y.ymir + _Y.na + (+2)+ ((((@@_bld0a - SPATBL) + 1) AND $4) SHL 13) + ((((@@_bld0a - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0500 d084 5d13 DECLE X_BRN + 8*$122 + ANI.8+SCORIDX.lo0500 d085 0808 DECLE $08 * 256 + $08 0x7d @@bld0d EQU ((@@_bld0d - SPATBL) + 1) ;; Followers (2 MOBs each) ;SPENT fol0a,intr,xsiz,-8, na ,siz2,na ,na ,+0,RED,$11E,$10,$08,rnd1 0xd086 @@_fol0a: d086 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d087 3100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hirnd1 d088 0af2 DECLE X_RED + 8*$11E + SCORIDX.lornd1 d089 0810 DECLE ($08) SHL 8 + $10 0x81 @@fol0a EQU ((@@_fol0a - SPATBL) + 1) ;SPENT fol1a,intr,xsiz,-8, na ,siz2,na ,na ,+0,BLU,$11E,$10,$08,rnd1 0xd08a @@_fol1a: d08a 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d08b 3100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hirnd1 d08c 0af1 DECLE X_BLU + 8*$11E + SCORIDX.lornd1 d08d 0810 DECLE ($08) SHL 8 + $10 0x85 @@fol1a EQU ((@@_fol1a - SPATBL) + 1) ;SPENT fol2a,intr,xsiz,-8, na ,siz2,xmir,na ,+0,DGR,$11E,$10,$08,rnd1 0xd08e @@_fol2a: d08e 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d08f 3500 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.xmir + (+0)+SCORIDX.hirnd1 d090 0af4 DECLE X_DGR + 8*$11E + SCORIDX.lornd1 d091 0810 DECLE ($08) SHL 8 + $10 0x89 @@fol2a EQU ((@@_fol2a - SPATBL) + 1) ;SPENT fol3a,intr,xsiz,-8, na ,siz2,na ,na ,+0,PUR,$11E,$10,$08,rnd1 0xd092 @@_fol3a: d092 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d093 3100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hirnd1 d094 1af7 DECLE X_PUR + 8*$11E + SCORIDX.lornd1 d095 0810 DECLE ($08) SHL 8 + $10 0x8d @@fol3a EQU ((@@_fol3a - SPATBL) + 1) ;SPENT fol0b,intr,xsiz,-8, na ,siz2,na ,na ,+0,BLU,$11D,$10,$08,0000 0xd096 @@_fol0b: d096 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d097 0100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hi0000 d098 08e9 DECLE X_BLU + 8*$11D + SCORIDX.lo0000 d099 0810 DECLE ($08) SHL 8 + $10 0x91 @@fol0b EQU ((@@_fol0b - SPATBL) + 1) ;SPENT fol1b,intr,xsiz,-8, na ,siz2,na ,na ,+0,YEL,$11D,$10,$08,0000 0xd09a @@_fol1b: d09a 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d09b 0100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hi0000 d09c 08ee DECLE X_YEL + 8*$11D + SCORIDX.lo0000 d09d 0810 DECLE ($08) SHL 8 + $10 0x95 @@fol1b EQU ((@@_fol1b - SPATBL) + 1) ;SPENT fol2b,intr,xsiz,-8, na ,siz2,xmir,na ,+0,WHT,$11D,$10,$08,0000 0xd09e @@_fol2b: d09e 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d09f 0500 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.xmir + (+0)+SCORIDX.hi0000 d0a0 08ef DECLE X_WHT + 8*$11D + SCORIDX.lo0000 d0a1 0810 DECLE ($08) SHL 8 + $10 0x99 @@fol2b EQU ((@@_fol2b - SPATBL) + 1) ;SPENT fol3b,intr,xsiz,-8, na ,siz2,na ,na ,+0,BLK,$11D,$10,$08,0000 0xd0a2 @@_fol3b: d0a2 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d0a3 0100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hi0000 d0a4 08e8 DECLE X_BLK + 8*$11D + SCORIDX.lo0000 d0a5 0810 DECLE ($08) SHL 8 + $10 0x9d @@fol3b EQU ((@@_fol3b - SPATBL) + 1) ;; Land Mines ;SPENT lmna, intr,xsiz,-1, na ,siz2,na ,na ,+1,WHT,$00E,$04,$02,0000 0xd0a6 @@_lmna: d0a6 06ff DECLE _X.intr + _X.visb + _X.xsiz + (-1) d0a7 0101 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+1)+SCORIDX.hi0000 d0a8 0077 DECLE X_WHT + 8*$00E + SCORIDX.lo0000 d0a9 0204 DECLE ($02) SHL 8 + $04 0xa1 @@lmna EQU ((@@_lmna - SPATBL) + 1) ;SPENT lmnb, intr,xsiz,-1, na ,siz2,na ,na ,+1,RED,$00E,$04,$02,0000 0xd0aa @@_lmnb: d0aa 06ff DECLE _X.intr + _X.visb + _X.xsiz + (-1) d0ab 0101 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+1)+SCORIDX.hi0000 d0ac 0072 DECLE X_RED + 8*$00E + SCORIDX.lo0000 d0ad 0204 DECLE ($02) SHL 8 + $04 0xa5 @@lmnb EQU ((@@_lmnb - SPATBL) + 1) ;; Space plant ;SPENT plta, intr,na ,+0, na ,siz2,na ,na ,+0,DGR,$101,$08,$07,rnd0 0xd0ae @@_plta: d0ae 0300 DECLE _X.intr + _X.visb + _X.na + (+0) d0af 3100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hirnd0 d0b0 080c DECLE X_DGR + 8*$101 + SCORIDX.lornd0 d0b1 0708 DECLE ($07) SHL 8 + $08 0xa9 @@plta EQU ((@@_plta - SPATBL) + 1) ;SPENT pltb, intr,na ,+0, na ,siz2,na ,na ,+0,DGR,$102,$08,$09,rnd0 0xd0b2 @@_pltb: d0b2 0300 DECLE _X.intr + _X.visb + _X.na + (+0) d0b3 3100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hirnd0 d0b4 0814 DECLE X_DGR + 8*$102 + SCORIDX.lornd0 d0b5 0908 DECLE ($09) SHL 8 + $08 0xad @@pltb EQU ((@@_pltb - SPATBL) + 1) ;SPENT pltc, intr,xsiz,-8, na ,siz4,na ,na ,-8,DGR,$101,$10,$0E,rnd0 0xd0b6 @@_pltc: d0b6 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d0b7 31f8 DECLE _Y.na + _Y.siz4 + _Y.na + _Y.na + (-8)+SCORIDX.hirnd0 d0b8 080c DECLE X_DGR + 8*$101 + SCORIDX.lornd0 d0b9 0e10 DECLE ($0E) SHL 8 + $10 0xb1 @@pltc EQU ((@@_pltc - SPATBL) + 1) ;SPENT pltd, intr,xsiz,-8, na ,siz4,na ,na ,-8,DGR,$102,$10,$12,rnd0 0xd0ba @@_pltd: d0ba 06f8 DECLE _X.intr + _X.visb + _X.xsiz + (-8) d0bb 31f8 DECLE _Y.na + _Y.siz4 + _Y.na + _Y.na + (-8)+SCORIDX.hirnd0 d0bc 0814 DECLE X_DGR + 8*$102 + SCORIDX.lornd0 d0bd 1210 DECLE ($12) SHL 8 + $10 0xb5 @@pltd EQU ((@@_pltd - SPATBL) + 1) ;; Bullets: Crater, Bomb, Vert tank, Gun turret ;SPANI b1, intr,na ,+0, na ,siz2,na ,na ,+0,WHT,$124,$03,$03,0350,b1b ,15 0xd0be @@_b1: d0be bb00 DECLE _X.intr + _X.visb + _X.na + (+0) + ((((@@_b1b - SPATBL) + 1) AND $F8) SHL 8) d0bf c100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+ ((((@@_b1b - SPATBL) + 1) AND $4) SHL 13) + ((((@@_b1b - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0350 d0c0 cb27 DECLE X_WHT + 8*$124 + ANI.15+SCORIDX.lo0350 d0c1 0303 DECLE $03 * 256 + $03 0xb9 @@b1 EQU ((@@_b1 - SPATBL) + 1) ;SPANI b1b, intr,na ,+0, na ,siz2,na ,na ,+0,RED,$124,$03,$03,0350,b1 ,15 0xd0c2 @@_b1b: d0c2 bb00 DECLE _X.intr + _X.visb + _X.na + (+0) + ((((@@_b1 - SPATBL) + 1) AND $F8) SHL 8) d0c3 4100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+ ((((@@_b1 - SPATBL) + 1) AND $4) SHL 13) + ((((@@_b1 - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0350 d0c4 cb22 DECLE X_RED + 8*$124 + ANI.15+SCORIDX.lo0350 d0c5 0303 DECLE $03 * 256 + $03 0xbd @@b1b EQU ((@@_b1b - SPATBL) + 1) ;SPENT b2, intr,na ,+0, na ,siz2,na ,na ,+0,WHT,$126,$05,$05,0000 0xd0c6 @@_b2: d0c6 0300 DECLE _X.intr + _X.visb + _X.na + (+0) d0c7 0100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hi0000 d0c8 0937 DECLE X_WHT + 8*$126 + SCORIDX.lo0000 d0c9 0505 DECLE ($05) SHL 8 + $05 0xc1 @@b2 EQU ((@@_b2 - SPATBL) + 1) ;SPENT b3, na ,na ,+0, na ,siz2,na ,na ,+0,WHT,$125,$00,$00,0000 0xd0ca @@_b3: d0ca 0200 DECLE _X.na + _X.visb + _X.na + (+0) d0cb 0100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.hi0000 d0cc 092f DECLE X_WHT + 8*$125 + SCORIDX.lo0000 d0cd 0000 DECLE ($00) SHL 8 + $00 0xc5 @@b3 EQU ((@@_b3 - SPATBL) + 1) ;SPENT b4, intr,na ,-2, na ,na ,na ,na ,+3,BLK,$00D,$0A,$08,0000 0xd0ce @@_b4: d0ce 02fe DECLE _X.intr + _X.visb + _X.na + (-2) d0cf 0003 DECLE _Y.na + _Y.na + _Y.na + _Y.na + (+3)+SCORIDX.hi0000 d0d0 0068 DECLE X_BLK + 8*$00D + SCORIDX.lo0000 d0d1 080a DECLE ($08) SHL 8 + $0A 0xc9 @@b4 EQU ((@@_b4 - SPATBL) + 1) ;SPENT b5, intr,na ,+0, na ,na ,na ,na ,+4,BLK,$00D,$08,$08,0000 0xd0d2 @@_b5: d0d2 0300 DECLE _X.intr + _X.visb + _X.na + (+0) d0d3 0004 DECLE _Y.na + _Y.na + _Y.na + _Y.na + (+4)+SCORIDX.hi0000 d0d4 0068 DECLE X_BLK + 8*$00D + SCORIDX.lo0000 d0d5 0808 DECLE ($08) SHL 8 + $08 0xcd @@b5 EQU ((@@_b5 - SPATBL) + 1) ;; Explosion frames ... large/medium/small ;SPANI x1, na ,xsiz,-8, na ,siz2,na ,na ,+0,CYN,$11F,$00,$00,0000,x2 ,15 0xd0d6 @@_x1: d0d6 d5f8 DECLE _X.na + _X.visb + _X.xsiz + (-8) + ((((@@_x2 - SPATBL) + 1) AND $F8) SHL 8) d0d7 c100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+ ((((@@_x2 - SPATBL) + 1) AND $4) SHL 13) + ((((@@_x2 - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0000 d0d8 d8f9 DECLE X_CYN + 8*$11F + ANI.15+SCORIDX.lo0000 d0d9 0000 DECLE $00 * 256 + $00 0xd1 @@x1 EQU ((@@_x1 - SPATBL) + 1) ;SPANI x2, na ,xsiz,-8, na ,siz1,na ,na ,+2,YGR,$11F,$00,$00,0000,x3 ,15 0xd0da @@_x2: d0da ddf8 DECLE _X.na + _X.visb + _X.xsiz + (-8) + ((((@@_x3 - SPATBL) + 1) AND $F8) SHL 8) d0db 4002 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+2)+ ((((@@_x3 - SPATBL) + 1) AND $4) SHL 13) + ((((@@_x3 - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0000 d0dc d8fe DECLE X_YGR + 8*$11F + ANI.15+SCORIDX.lo0000 d0dd 0000 DECLE $00 * 256 + $00 0xd5 @@x2 EQU ((@@_x2 - SPATBL) + 1) ;SPANI x3, na ,na ,-4, na ,siz1,na ,na ,+2,RED,$11F,$00,$00,0000,done,15 0xd0de @@_x3: d0de 01fc DECLE _X.na + _X.visb + _X.na + (-4) + ((((@@_done - SPATBL) + 1) AND $F8) SHL 8) d0df 0002 DECLE _Y.na + _Y.siz1 + _Y.na + _Y.na + (+2)+ ((((@@_done - SPATBL) + 1) AND $4) SHL 13) + ((((@@_done - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.hi0000 d0e0 c8fa DECLE X_RED + 8*$11F + ANI.15+SCORIDX.lo0000 d0e1 0000 DECLE $00 * 256 + $00 0xd9 @@x3 EQU ((@@_x3 - SPATBL) + 1) ;; Stalactites ;SPENT stal, intr,na ,-4, na ,siz2,na ,na ,+0,DGR,$092,$08,$08,stal 0xd0e2 @@_stal: d0e2 02fc DECLE _X.intr + _X.visb + _X.na + (-4) d0e3 3100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.histal d0e4 0494 DECLE X_DGR + 8*$092 + SCORIDX.lostal d0e5 0808 DECLE ($08) SHL 8 + $08 0xdd @@stal EQU ((@@_stal - SPATBL) + 1) ;SPANI stala,intr,na ,-3, na ,siz2,na ,na ,+1,DGR,$092,$08,$08,stal,stalb,30 0xd0e6 @@_stala: d0e6 e2fd DECLE _X.intr + _X.visb + _X.na + (-3) + ((((@@_stalb - SPATBL) + 1) AND $F8) SHL 8) d0e7 f101 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+1)+ ((((@@_stalb - SPATBL) + 1) AND $4) SHL 13) + ((((@@_stalb - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.histal d0e8 8494 DECLE X_DGR + 8*$092 + ANI.30+SCORIDX.lostal d0e9 0808 DECLE $08 * 256 + $08 0xe1 @@stala EQU ((@@_stala - SPATBL) + 1) ;SPANI stalb,intr,na ,-4, na ,siz2,na ,na ,+1,DGR,$092,$08,$08,stal,stala,30 0xd0ea @@_stalb: d0ea e2fc DECLE _X.intr + _X.visb + _X.na + (-4) + ((((@@_stala - SPATBL) + 1) AND $F8) SHL 8) d0eb 7101 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+1)+ ((((@@_stala - SPATBL) + 1) AND $4) SHL 13) + ((((@@_stala - SPATBL) + 1) AND 1) SHL 14)+SCORIDX.histal d0ec 8494 DECLE X_DGR + 8*$092 + ANI.30+SCORIDX.lostal d0ed 0808 DECLE $08 * 256 + $08 0xe5 @@stalb EQU ((@@_stalb - SPATBL) + 1) ;SPENT stalf,intr,na ,-4, na ,siz2,na ,na ,+0,DGR+_A.prio,$092,$08,$08,stal 0xd0ee @@_stalf: d0ee 02fc DECLE _X.intr + _X.visb + _X.na + (-4) d0ef 3100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (+0)+SCORIDX.histal d0f0 2494 DECLE X_DGR+_A.prio + 8*$092 + SCORIDX.lostal d0f1 0808 DECLE ($08) SHL 8 + $08 0xe9 @@stalf EQU ((@@_stalf - SPATBL) + 1) ;; Hut ;SPENT hut0, na, na, -$C, na ,siz2,na ,na, $48,WHT,$12C, 0, 0,0000 0xd0f2 @@_hut0: d0f2 01f4 DECLE _X.na + _X.visb + _X.na + (-$C) d0f3 0148 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + ($48)+SCORIDX.hi0000 d0f4 0967 DECLE X_WHT + 8*$12C + SCORIDX.lo0000 d0f5 0000 DECLE (0) SHL 8 + 0 0xed @@hut0 EQU ((@@_hut0 - SPATBL) + 1) ;SPENT hut1, na, na, -$4, na ,siz2,na ,na, $48,LBL,$12D, 0, 0,0000 0xd0f6 @@_hut1: d0f6 01fc DECLE _X.na + _X.visb + _X.na + (-$4) d0f7 0148 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + ($48)+SCORIDX.hi0000 d0f8 196d DECLE X_LBL + 8*$12D + SCORIDX.lo0000 d0f9 0000 DECLE (0) SHL 8 + 0 0xf1 @@hut1 EQU ((@@_hut1 - SPATBL) + 1) ;SPENT hut2, na, na, -$5, na ,siz2,na ,na, $48,WHT, 159, 0, 0,0000 0xd0fa @@_hut2: d0fa 01fb DECLE _X.na + _X.visb + _X.na + (-$5) d0fb 0148 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + ($48)+SCORIDX.hi0000 d0fc 04ff DECLE X_WHT + 8*159 + SCORIDX.lo0000 d0fd 0000 DECLE (0) SHL 8 + 0 0xf5 @@hut2 EQU ((@@_hut2 - SPATBL) + 1) ;SPENT hut3, na, na, -$A, na ,siz4,na ,na, $40,BLK,$12E, 0, 0,0000 0xd0fe @@_hut3: d0fe 01f6 DECLE _X.na + _X.visb + _X.na + (-$A) d0ff 0240 DECLE _Y.na + _Y.siz4 + _Y.na + _Y.na + ($40)+SCORIDX.hi0000 d100 0970 DECLE X_BLK + 8*$12E + SCORIDX.lo0000 d101 0000 DECLE (0) SHL 8 + 0 0xf9 @@hut3 EQU ((@@_hut3 - SPATBL) + 1) ;; crat6 ;SPENT crat6,na, xsiz, 0, na ,siz2,na ,na , 0,GRN,95, 0, 0,0000 0xd102 @@_crat6: d102 0600 DECLE _X.na + _X.visb + _X.xsiz + (0) d103 0100 DECLE _Y.na + _Y.siz2 + _Y.na + _Y.na + (0)+SCORIDX.hi0000 d104 02fd DECLE X_GRN + 8*95 + SCORIDX.lo0000 d105 0000 DECLE (0) SHL 8 + 0 0xfd @@crat6 EQU ((@@_crat6 - SPATBL) + 1) ENDP ;; ======================================================================== ;; ;; SPRITE ATTRIBUTES for level marker. ;; ;; ======================================================================== ;; 0xd106 SPATLM PROC d106 0200 0154 0000 DECLE _X.visb, _Y.siz2 + GROW_p + 20, X_BLK ENDP ;__ 0x109 _SPATBL.size EQU $ - _SPATBL 0xd109 _SPAWN EQU $ INCLUDE "bg/bgmpind.asm" ;; ======================================================================== ;; ;; BGMPIND -- Indirect lookup table for Bad Guy Motion Program state ;; ;; functions. Up to 255 different states across all BGMPs ;; ;; are possible. Initial states are confined to first 127. ;; ;; Exit states are confined to first 8. ;; ;; ======================================================================== ;; 0xd109 BGMPIND PROC d109 5252 @@sauc_ex DECLE BGT_SAUC_EX ; Exit functions must be in 1st 8. d10a 533e @@flexit DECLE BGT_FLEXIT ; d10b 5367 @@fladv DECLE BGT_FLADV ; d10c 612e @@null DECLE BGT_RET d10d 5034 @@boulder0 DECLE BGT_BOULDER0 0xd10c @@boulder1 EQU @@null d10e 5043 @@mine0 DECLE BGT_MINE0 d10f 504f @@mine1 DECLE BGT_MINE1 d110 503f @@plant0 DECLE BGT_PLANT0 d111 5067 @@plant1 DECLE BGT_PLANT1 d112 51fb @@sauc_f0 DECLE BGT_SAUC_F0 ; blue, pink firing programs d113 51b6 @@sauc_f1 DECLE BGT_SAUC_F1 ; white firing program d114 5149 @@sauc_lr DECLE BGT_SAUC_LR d115 518f @@sauc_ud DECLE BGT_SAUC_UD d116 5030 @@turret0 DECLE BGT_TURRET0 d117 5091 @@turret1 DECLE BGT_TURRET1 d118 526b @@follow0 DECLE BGT_FOLLOW0 ; Thinker for the follower d119 5294 @@follow1 DECLE BGT_FOLLOW1 ; No thinker for 2nd half of follower d11a 50b2 @@stal0 DECLE BGT_STAL0 d11b 50ce @@stal1 DECLE BGT_STAL1 d11c 50df @@stal2 DECLE BGT_STAL2 ENDP 0x0 BGI STRUCT 0 0x5 @@boulder0 EQU BGMPIND.boulder0 - BGMPIND + 1 0x4 @@boulder1 EQU BGMPIND.boulder1 - BGMPIND + 1 0x6 @@mine0 EQU BGMPIND.mine0 - BGMPIND + 1 0x7 @@mine1 EQU BGMPIND.mine1 - BGMPIND + 1 0x8 @@plant0 EQU BGMPIND.plant0 - BGMPIND + 1 0x9 @@plant1 EQU BGMPIND.plant1 - BGMPIND + 1 0xa @@sauc_f0 EQU BGMPIND.sauc_f0 - BGMPIND + 1 0xb @@sauc_f1 EQU BGMPIND.sauc_f1 - BGMPIND + 1 0xc @@sauc_lr EQU BGMPIND.sauc_lr - BGMPIND + 1 0xd @@sauc_ud EQU BGMPIND.sauc_ud - BGMPIND + 1 0x1 @@sauc_ex EQU BGMPIND.sauc_ex - BGMPIND + 1 0xe @@turret0 EQU BGMPIND.turret0 - BGMPIND + 1 0xf @@turret1 EQU BGMPIND.turret1 - BGMPIND + 1 0x10 @@follow0 EQU BGMPIND.follow0 - BGMPIND + 1 0x11 @@follow1 EQU BGMPIND.follow1 - BGMPIND + 1 0x2 @@flexit EQU BGMPIND.flexit - BGMPIND + 1 0x3 @@fladv EQU BGMPIND.fladv - BGMPIND + 1 0x12 @@stal0 EQU BGMPIND.stal0 - BGMPIND + 1 0x13 @@stal1 EQU BGMPIND.stal1 - BGMPIND + 1 0x14 @@stal2 EQU BGMPIND.stal2 - BGMPIND + 1 0x4 @@null EQU BGMPIND.null - BGMPIND + 1 ENDS ;__ INCLUDE "world/spawns.asm" ;; ------------------------------------------------------------------------ ;; ;; SPAWN cue, last, type, bgmp, exitmp, exittag, xpos, ypos ;; ;; ------------------------------------------------------------------------ ;; MACRO SPAWN c, e, t, b, eb, et, xp, yp CUE.%c% EQU (($ - SPAWNTBL) / 4) SHL 8 DECLE (%e% SHL 15) + (%b% SHL 8) + (EXIT.%et% SHR 5) + (%eb%) DECLE @@%t% DECLE $0000 DECLE (%yp% SHL 8) + %xp% ENDM ;; ------------------------------------------------------------------------ ;; ;; SPAWNX cue, last, type, bgmp, exitmp, exittag, xpos, ypos, stat0, stat1 ;; ;; ------------------------------------------------------------------------ ;; MACRO SPAWNX c, e, t, b, eb, et, xp, yp, s0, s1 CUE.%c% EQU (($ - SPAWNTBL) / 4) SHL 8 DECLE (%e% SHL 15) + (%b% SHL 8) + (EXIT.%et% SHR 5) + (%eb%) DECLE @@%t% DECLE (%s1% SHL 8) + %s0% DECLE (%yp% SHL 8) + %xp% ENDM ;; ------------------------------------------------------------------------ ;; ;; BGTAG tag, value ;; ;; ------------------------------------------------------------------------ ;; MACRO BGTAG t, v SPAWNTBL.%t% EQU %v% ENDM ;; ------------------------------------------------------------------------ ;; ;; EXITTAG tag, value ;; ;; ------------------------------------------------------------------------ ;; MACRO EXITTAG t, v EXIT.%t% EQU ((%v%) SHL 8) ENDM ;; ------------------------------------------------------------------------ ;; ;; Bad Guy Tag defs. Must be unique. 8 and up scroll w/the screen. ;; ;; ------------------------------------------------------------------------ ;; ;BGTAG pnk , 0 0x0 SPAWNTBL.pnk EQU 0 ;BGTAG blu , 1 0x1 SPAWNTBL.blu EQU 1 ;BGTAG wht , 2 0x2 SPAWNTBL.wht EQU 2 ;BGTAG fola , 3 0x3 SPAWNTBL.fola EQU 3 ;BGTAG folb , 4 0x4 SPAWNTBL.folb EQU 4 ;BGTAG pn2 , 5 0x5 SPAWNTBL.pn2 EQU 5 ;BGTAG bl2 , 6 0x6 SPAWNTBL.bl2 EQU 6 ;BGTAG wh2 , 7 0x7 SPAWNTBL.wh2 EQU 7 ;BGTAG tur , 8 0x8 SPAWNTBL.tur EQU 8 ;BGTAG bld , 9 0x9 SPAWNTBL.bld EQU 9 ;BGTAG mine , 10 0xa SPAWNTBL.mine EQU 10 ;BGTAG plant , 11 0xb SPAWNTBL.plant EQU 11 ;BGTAG plbig , 12 0xc SPAWNTBL.plbig EQU 12 ;BGTAG stal , 13 0xd SPAWNTBL.stal EQU 13 ;BGTAG crat6 , 13 0xd SPAWNTBL.crat6 EQU 13 ;; ------------------------------------------------------------------------ ;; ;; EXIT TAG definitions. The same value can be given to more than one. ;; ;; ------------------------------------------------------------------------ ;; ;EXITTAG 0, 0 ; no exit tag 0x0 EXIT.0 EQU ((0) SHL 8) ; no exit tag ;EXITTAG pink_a, 1 0x100 EXIT.pink_a EQU ((1) SHL 8) ;EXITTAG blue_a, 2 0x200 EXIT.blue_a EQU ((2) SHL 8) ;EXITTAG whit_a, 3 0x300 EXIT.whit_a EQU ((3) SHL 8) ;EXITTAG pin2_a, 4 0x400 EXIT.pin2_a EQU ((4) SHL 8) ;EXITTAG blu2_a, 5 0x500 EXIT.blu2_a EQU ((5) SHL 8) ;EXITTAG whi2_a, 6 0x600 EXIT.whi2_a EQU ((6) SHL 8) ;EXITTAG pink_b, 7 0x700 EXIT.pink_b EQU ((7) SHL 8) ;EXITTAG blue_b, 8 0x800 EXIT.blue_b EQU ((8) SHL 8) ;EXITTAG whit_b, 9 0x900 EXIT.whit_b EQU ((9) SHL 8) ;EXITTAG pin2_b, 10 0xa00 EXIT.pin2_b EQU ((10) SHL 8) ;EXITTAG blu2_b, 11 0xb00 EXIT.blu2_b EQU ((11) SHL 8) ;EXITTAG whi2_b, 12 0xc00 EXIT.whi2_b EQU ((12) SHL 8) ;EXITTAG pink_c, 13 0xd00 EXIT.pink_c EQU ((13) SHL 8) ;EXITTAG blue_c, 14 0xe00 EXIT.blue_c EQU ((14) SHL 8) ;EXITTAG whit_c, 15 0xf00 EXIT.whit_c EQU ((15) SHL 8) ;EXITTAG pin2_c, 16 0x1000 EXIT.pin2_c EQU ((16) SHL 8) ;EXITTAG blu2_c, 17 0x1100 EXIT.blu2_c EQU ((17) SHL 8) ;EXITTAG whi2_c, 18 0x1200 EXIT.whi2_c EQU ((18) SHL 8) ;EXITTAG pink_d, 19 0x1300 EXIT.pink_d EQU ((19) SHL 8) ;EXITTAG blue_d, 20 0x1400 EXIT.blue_d EQU ((20) SHL 8) ;EXITTAG whit_d, 21 0x1500 EXIT.whit_d EQU ((21) SHL 8) ;EXITTAG pin2_d, 22 0x1600 EXIT.pin2_d EQU ((22) SHL 8) ;EXITTAG blu2_d, 23 0x1700 EXIT.blu2_d EQU ((23) SHL 8) ;EXITTAG whi2_d, 24 0x1800 EXIT.whi2_d EQU ((24) SHL 8) ;EXITTAG pink_e, 25 0x1900 EXIT.pink_e EQU ((25) SHL 8) ;EXITTAG blue_e, 26 0x1a00 EXIT.blue_e EQU ((26) SHL 8) ;EXITTAG whit_e, 27 0x1b00 EXIT.whit_e EQU ((27) SHL 8) ;EXITTAG pin2_e, 28 0x1c00 EXIT.pin2_e EQU ((28) SHL 8) ;EXITTAG blu2_e, 29 0x1d00 EXIT.blu2_e EQU ((29) SHL 8) ;EXITTAG whi2_e, 30 0x1e00 EXIT.whi2_e EQU ((30) SHL 8) ;EXITTAG flexit, 31 0x1f00 EXIT.flexit EQU ((31) SHL 8) ;; ------------------------------------------------------------------------ ;; ;; SPAWNTBL: Where all the spawns live! ;; ;; ------------------------------------------------------------------------ ;; 0xd11d SPAWNTBL PROC ; two mines right next to each other, lo/hi ;SPAWN 2_mine_a, 0, mine, BGI.mine0, 0, 0, $A8, $49 ; two mines, lo/hi 0x0 CUE.2_mine_a EQU (($ - SPAWNTBL) / 4) SHL 8 d11d 0600 DECLE (0 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d11e 000a DECLE @@mine d11f 0000 DECLE $0000 d120 49a8 DECLE ($49 SHL 8) + $A8 ; two mines, lo/hi ;SPAWN 1_mine_a, 1, mine, BGI.mine0, 0, 0, $A0, $4A ; one mine, hi 0x100 CUE.1_mine_a EQU (($ - SPAWNTBL) / 4) SHL 8 d121 8600 DECLE (1 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d122 000a DECLE @@mine d123 0000 DECLE $0000 d124 4aa0 DECLE ($4A SHL 8) + $A0 ; one mine, hi ; two mines, about 40 pixels apart, hi/lo ;SPAWN 2_mine_b, 0, mine, BGI.mine0, 0, 0, $AB, $4A ; two mines, hi/lo 0x200 CUE.2_mine_b EQU (($ - SPAWNTBL) / 4) SHL 8 d125 0600 DECLE (0 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d126 000a DECLE @@mine d127 0000 DECLE $0000 d128 4aab DECLE ($4A SHL 8) + $AB ; two mines, hi/lo ;SPAWN 1_mine_b, 1, mine, BGI.mine0, 0, 0, $A0, $49 ; one mine, lo 0x300 CUE.1_mine_b EQU (($ - SPAWNTBL) / 4) SHL 8 d129 8600 DECLE (1 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d12a 000a DECLE @@mine d12b 0000 DECLE $0000 d12c 49a0 DECLE ($49 SHL 8) + $A0 ; one mine, lo ; two mines, about 45 pixels apart, lo/hi ;SPAWN 2_mine_c, 0, mine, BGI.mine0, 0, 0, $AE, $49 ; two mines, lo/hi 0x400 CUE.2_mine_c EQU (($ - SPAWNTBL) / 4) SHL 8 d12d 0600 DECLE (0 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d12e 000a DECLE @@mine d12f 0000 DECLE $0000 d130 49ae DECLE ($49 SHL 8) + $AE ; two mines, lo/hi ;SPAWN 1_mine_c, 1, mine, BGI.mine0, 0, 0, $A0, $4A ; one mine, hi 0x500 CUE.1_mine_c EQU (($ - SPAWNTBL) / 4) SHL 8 d131 8600 DECLE (1 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d132 000a DECLE @@mine d133 0000 DECLE $0000 d134 4aa0 DECLE ($4A SHL 8) + $A0 ; one mine, hi ; two mines, about 45 pixels apart, lo/hi ;SPAWN 2_mine_d, 0, mine, BGI.mine0, 0, 0, $A6, $4A ; two mines, hi/lo 0x600 CUE.2_mine_d EQU (($ - SPAWNTBL) / 4) SHL 8 d135 0600 DECLE (0 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d136 000a DECLE @@mine d137 0000 DECLE $0000 d138 4aa6 DECLE ($4A SHL 8) + $A6 ; two mines, hi/lo ;SPAWN 1_mine_d, 1, mine, BGI.mine0, 0, 0, $A0, $49 ; one mine, lo 0x700 CUE.1_mine_d EQU (($ - SPAWNTBL) / 4) SHL 8 d139 8600 DECLE (1 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d13a 000a DECLE @@mine d13b 0000 DECLE $0000 d13c 49a0 DECLE ($49 SHL 8) + $A0 ; one mine, lo ; two mines, about 45 pixels apart, lo/hi ;SPAWN 2_mine_e, 0, mine, BGI.mine0, 0, 0, $A5, $49 ; two mines, lo/hi 0x800 CUE.2_mine_e EQU (($ - SPAWNTBL) / 4) SHL 8 d13d 0600 DECLE (0 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d13e 000a DECLE @@mine d13f 0000 DECLE $0000 d140 49a5 DECLE ($49 SHL 8) + $A5 ; two mines, lo/hi ;SPAWN 1_mine_e, 1, mine, BGI.mine0, 0, 0, $A0, $4A ; one mine, hi 0x900 CUE.1_mine_e EQU (($ - SPAWNTBL) / 4) SHL 8 d141 8600 DECLE (1 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d142 000a DECLE @@mine d143 0000 DECLE $0000 d144 4aa0 DECLE ($4A SHL 8) + $A0 ; one mine, hi ; two mines, about 45 pixels apart, lo/hi ;SPAWN 2_mine_f, 0, mine, BGI.mine0, 0, 0, $A9, $49 ; two mines, lo/lo 0xa00 CUE.2_mine_f EQU (($ - SPAWNTBL) / 4) SHL 8 d145 0600 DECLE (0 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d146 000a DECLE @@mine d147 0000 DECLE $0000 d148 49a9 DECLE ($49 SHL 8) + $A9 ; two mines, lo/lo ;SPAWN 1_mine_f, 1, mine, BGI.mine0, 0, 0, $A0, $49 ; one mine, hi 0xb00 CUE.1_mine_f EQU (($ - SPAWNTBL) / 4) SHL 8 d149 8600 DECLE (1 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d14a 000a DECLE @@mine d14b 0000 DECLE $0000 d14c 49a0 DECLE ($49 SHL 8) + $A0 ; one mine, hi ; Plants and boulders ;SPAWN 1_plant, 1, plant, BGI.plant0, 0, 0, $AE, $4C ; one plant, lo 0xc00 CUE.1_plant EQU (($ - SPAWNTBL) / 4) SHL 8 d14d 8800 DECLE (1 SHL 15) + (BGI.plant0 SHL 8) + (EXIT.0 SHR 5) + (0) d14e 000b DECLE @@plant d14f 0000 DECLE $0000 d150 4cae DECLE ($4C SHL 8) + $AE ; one plant, lo ;SPAWN 1_plbig, 1, plbig, BGI.plant0, 0, 0, $B6, $4E ; one plant, lo 0xd00 CUE.1_plbig EQU (($ - SPAWNTBL) / 4) SHL 8 d151 8800 DECLE (1 SHL 15) + (BGI.plant0 SHL 8) + (EXIT.0 SHR 5) + (0) d152 000c DECLE @@plbig d153 0000 DECLE $0000 d154 4eb6 DECLE ($4E SHL 8) + $B6 ; one plant, lo ;SPAWN 1_turret, 1, tur, BGI.turret0, 0, 0, $A4, $47 ; One gun turret 0xe00 CUE.1_turret EQU (($ - SPAWNTBL) / 4) SHL 8 d155 8e00 DECLE (1 SHL 15) + (BGI.turret0 SHL 8) + (EXIT.0 SHR 5) + (0) d156 0008 DECLE @@tur d157 0000 DECLE $0000 d158 47a4 DECLE ($47 SHL 8) + $A4 ; One gun turret ; boulders are close to each other ;SPAWN 2_boulc, 0, bld, BGI.boulder0, 0, 0, $B2, $46 ; Two boulders 0xf00 CUE.2_boulc EQU (($ - SPAWNTBL) / 4) SHL 8 d159 0500 DECLE (0 SHL 15) + (BGI.boulder0 SHL 8) + (EXIT.0 SHR 5) + (0) d15a 0009 DECLE @@bld d15b 0000 DECLE $0000 d15c 46b2 DECLE ($46 SHL 8) + $B2 ; Two boulders ;SPAWN 1_boulc, 1, bld, BGI.boulder0, 0, 0, $A8, $46 ; One boulder 0x1000 CUE.1_boulc EQU (($ - SPAWNTBL) / 4) SHL 8 d15d 8500 DECLE (1 SHL 15) + (BGI.boulder0 SHL 8) + (EXIT.0 SHR 5) + (0) d15e 0009 DECLE @@bld d15f 0000 DECLE $0000 d160 46a8 DECLE ($46 SHL 8) + $A8 ; One boulder ; boulders are spaced as the arcade ;SPAWN 2_bould, 0, bld, BGI.boulder0, 0, 0, $B8, $46 ; Two boulders 0x1100 CUE.2_bould EQU (($ - SPAWNTBL) / 4) SHL 8 d161 0500 DECLE (0 SHL 15) + (BGI.boulder0 SHL 8) + (EXIT.0 SHR 5) + (0) d162 0009 DECLE @@bld d163 0000 DECLE $0000 d164 46b8 DECLE ($46 SHL 8) + $B8 ; Two boulders ;SPAWN 1_bould, 1, bld, BGI.boulder0, 0, 0, $A8, $46 ; One boulder 0x1200 CUE.1_bould EQU (($ - SPAWNTBL) / 4) SHL 8 d165 8500 DECLE (1 SHL 15) + (BGI.boulder0 SHL 8) + (EXIT.0 SHR 5) + (0) d166 0009 DECLE @@bld d167 0000 DECLE $0000 d168 46a8 DECLE ($46 SHL 8) + $A8 ; One boulder ; Saucers! ; A "0" will use the FLIGHT (see bg/saucer.sct) ; next saucer 1 ends XPOS YPOS PROG LEAVE ZERO ; xpos = 00 to A0h ; ypos = 01 to 25h (max is 60h) ;SPAWNX 3_pink_a, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_a, $11, $15, $07, $00 0x1300 CUE.3_pink_a EQU (($ - SPAWNTBL) / 4) SHL 8 d169 0c09 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_a SHR 5) + (BGI.sauc_ex) d16a 0000 DECLE @@pnk d16b 0007 DECLE ($00 SHL 8) + $07 d16c 1511 DECLE ($15 SHL 8) + $11 ;SPAWNX 2_pink_a, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_a, $71, $05, $05, $00 0x1400 CUE.2_pink_a EQU (($ - SPAWNTBL) / 4) SHL 8 d16d 0c09 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_a SHR 5) + (BGI.sauc_ex) d16e 0000 DECLE @@pnk d16f 0005 DECLE ($00 SHL 8) + $05 d170 0571 DECLE ($05 SHL 8) + $71 ;SPAWNX 1_pink_a, 1, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_a, $A0, $20, $00, $00 0x1500 CUE.1_pink_a EQU (($ - SPAWNTBL) / 4) SHL 8 d171 8c09 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_a SHR 5) + (BGI.sauc_ex) d172 0000 DECLE @@pnk d173 0000 DECLE ($00 SHL 8) + $00 d174 20a0 DECLE ($20 SHL 8) + $A0 ;SPAWNX 3_pink_b, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_b, $89, $06, $01, $00 0x1600 CUE.3_pink_b EQU (($ - SPAWNTBL) / 4) SHL 8 d175 0c39 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_b SHR 5) + (BGI.sauc_ex) d176 0000 DECLE @@pnk d177 0001 DECLE ($00 SHL 8) + $01 d178 0689 DECLE ($06 SHL 8) + $89 ;SPAWNX 2_pink_b, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_b, $35, $07, $06, $00 0x1700 CUE.2_pink_b EQU (($ - SPAWNTBL) / 4) SHL 8 d179 0c39 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_b SHR 5) + (BGI.sauc_ex) d17a 0000 DECLE @@pnk d17b 0006 DECLE ($00 SHL 8) + $06 d17c 0735 DECLE ($07 SHL 8) + $35 ;SPAWNX 1_pink_b, 1, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_b, $16, $05, $05, $00 0x1800 CUE.1_pink_b EQU (($ - SPAWNTBL) / 4) SHL 8 d17d 8c39 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_b SHR 5) + (BGI.sauc_ex) d17e 0000 DECLE @@pnk d17f 0005 DECLE ($00 SHL 8) + $05 d180 0516 DECLE ($05 SHL 8) + $16 ;SPAWNX 3_pink_c, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_c, $73, $04, $02, $00 0x1900 CUE.3_pink_c EQU (($ - SPAWNTBL) / 4) SHL 8 d181 0c69 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_c SHR 5) + (BGI.sauc_ex) d182 0000 DECLE @@pnk d183 0002 DECLE ($00 SHL 8) + $02 d184 0473 DECLE ($04 SHL 8) + $73 ;SPAWNX 2_pink_c, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_c, $91, $06, $04, $00 0x1a00 CUE.2_pink_c EQU (($ - SPAWNTBL) / 4) SHL 8 d185 0c69 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_c SHR 5) + (BGI.sauc_ex) d186 0000 DECLE @@pnk d187 0004 DECLE ($00 SHL 8) + $04 d188 0691 DECLE ($06 SHL 8) + $91 ;SPAWNX 1_pink_c, 1, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_c, $41, $05, $03, $00 0x1b00 CUE.1_pink_c EQU (($ - SPAWNTBL) / 4) SHL 8 d189 8c69 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_c SHR 5) + (BGI.sauc_ex) d18a 0000 DECLE @@pnk d18b 0003 DECLE ($00 SHL 8) + $03 d18c 0541 DECLE ($05 SHL 8) + $41 ;SPAWNX 2_pink_d, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_d, $54, $06, $00, $00 0x1c00 CUE.2_pink_d EQU (($ - SPAWNTBL) / 4) SHL 8 d18d 0c99 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_d SHR 5) + (BGI.sauc_ex) d18e 0000 DECLE @@pnk d18f 0000 DECLE ($00 SHL 8) + $00 d190 0654 DECLE ($06 SHL 8) + $54 ;SPAWNX 1_pink_d, 1, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_d, $88, $04, $03, $00 0x1d00 CUE.1_pink_d EQU (($ - SPAWNTBL) / 4) SHL 8 d191 8c99 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_d SHR 5) + (BGI.sauc_ex) d192 0000 DECLE @@pnk d193 0003 DECLE ($00 SHL 8) + $03 d194 0488 DECLE ($04 SHL 8) + $88 ;SPAWNX 3_pink_e, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_e, $95, $04, $02, $00 0x1e00 CUE.3_pink_e EQU (($ - SPAWNTBL) / 4) SHL 8 d195 0cc9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_e SHR 5) + (BGI.sauc_ex) d196 0000 DECLE @@pnk d197 0002 DECLE ($00 SHL 8) + $02 d198 0495 DECLE ($04 SHL 8) + $95 ;SPAWNX 2_pink_e, 0, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_e, $04, $15, $01, $00 0x1f00 CUE.2_pink_e EQU (($ - SPAWNTBL) / 4) SHL 8 d199 0cc9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_e SHR 5) + (BGI.sauc_ex) d19a 0000 DECLE @@pnk d19b 0001 DECLE ($00 SHL 8) + $01 d19c 1504 DECLE ($15 SHL 8) + $04 ;SPAWNX 1_pink_e, 1, pnk, BGI.sauc_lr, BGI.sauc_ex, pink_e, $61, $05, $04, $00 0x2000 CUE.1_pink_e EQU (($ - SPAWNTBL) / 4) SHL 8 d19d 8cc9 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pink_e SHR 5) + (BGI.sauc_ex) d19e 0000 DECLE @@pnk d19f 0004 DECLE ($00 SHL 8) + $04 d1a0 0561 DECLE ($05 SHL 8) + $61 ; ;SPAWNX 3_pin2_a, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_a, $09, $13, $00, $00 0x2100 CUE.3_pin2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d1a1 0c21 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_a SHR 5) + (BGI.sauc_ex) d1a2 0005 DECLE @@pn2 d1a3 0000 DECLE ($00 SHL 8) + $00 d1a4 1309 DECLE ($13 SHL 8) + $09 ;SPAWNX 2_pin2_a, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_a, $75, $06, $06, $00 0x2200 CUE.2_pin2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d1a5 0c21 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_a SHR 5) + (BGI.sauc_ex) d1a6 0005 DECLE @@pn2 d1a7 0006 DECLE ($00 SHL 8) + $06 d1a8 0675 DECLE ($06 SHL 8) + $75 ;SPAWNX 1_pin2_a, 1, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_a, $A0, $18, $05, $00 0x2300 CUE.1_pin2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d1a9 8c21 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_a SHR 5) + (BGI.sauc_ex) d1aa 0005 DECLE @@pn2 d1ab 0005 DECLE ($00 SHL 8) + $05 d1ac 18a0 DECLE ($18 SHL 8) + $A0 ;SPAWNX 2_pin2_b, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_b, $39, $06, $01, $00 0x2400 CUE.2_pin2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d1ad 0c51 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_b SHR 5) + (BGI.sauc_ex) d1ae 0005 DECLE @@pn2 d1af 0001 DECLE ($00 SHL 8) + $01 d1b0 0639 DECLE ($06 SHL 8) + $39 ;SPAWNX 1_pin2_b, 1, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_b, $27, $04, $02, $00 0x2500 CUE.1_pin2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d1b1 8c51 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_b SHR 5) + (BGI.sauc_ex) d1b2 0005 DECLE @@pn2 d1b3 0002 DECLE ($00 SHL 8) + $02 d1b4 0427 DECLE ($04 SHL 8) + $27 ;SPAWNX 3_pin2_c, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_c, $72, $05, $04, $00 0x2600 CUE.3_pin2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d1b5 0c81 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_c SHR 5) + (BGI.sauc_ex) d1b6 0005 DECLE @@pn2 d1b7 0004 DECLE ($00 SHL 8) + $04 d1b8 0572 DECLE ($05 SHL 8) + $72 ;SPAWNX 2_pin2_c, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_c, $97, $04, $07, $00 0x2700 CUE.2_pin2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d1b9 0c81 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_c SHR 5) + (BGI.sauc_ex) d1ba 0005 DECLE @@pn2 d1bb 0007 DECLE ($00 SHL 8) + $07 d1bc 0497 DECLE ($04 SHL 8) + $97 ;SPAWNX 1_pin2_c, 1, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_c, $30, $06, $03, $00 0x2800 CUE.1_pin2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d1bd 8c81 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_c SHR 5) + (BGI.sauc_ex) d1be 0005 DECLE @@pn2 d1bf 0003 DECLE ($00 SHL 8) + $03 d1c0 0630 DECLE ($06 SHL 8) + $30 ;SPAWNX 3_pin2_d, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_d, $32, $04, $07, $00 0x2900 CUE.3_pin2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d1c1 0cb1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_d SHR 5) + (BGI.sauc_ex) d1c2 0005 DECLE @@pn2 d1c3 0007 DECLE ($00 SHL 8) + $07 d1c4 0432 DECLE ($04 SHL 8) + $32 ;SPAWNX 2_pin2_d, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_d, $56, $05, $05, $00 0x2a00 CUE.2_pin2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d1c5 0cb1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_d SHR 5) + (BGI.sauc_ex) d1c6 0005 DECLE @@pn2 d1c7 0005 DECLE ($00 SHL 8) + $05 d1c8 0556 DECLE ($05 SHL 8) + $56 ;SPAWNX 1_pin2_d, 1, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_d, $94, $06, $03, $00 0x2b00 CUE.1_pin2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d1c9 8cb1 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_d SHR 5) + (BGI.sauc_ex) d1ca 0005 DECLE @@pn2 d1cb 0003 DECLE ($00 SHL 8) + $03 d1cc 0694 DECLE ($06 SHL 8) + $94 ;SPAWNX 2_pin2_e, 0, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_e, $04, $13, $02, $00 0x2c00 CUE.2_pin2_e EQU (($ - SPAWNTBL) / 4) SHL 8 d1cd 0ce1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_e SHR 5) + (BGI.sauc_ex) d1ce 0005 DECLE @@pn2 d1cf 0002 DECLE ($00 SHL 8) + $02 d1d0 1304 DECLE ($13 SHL 8) + $04 ;SPAWNX 1_pin2_e, 1, pn2, BGI.sauc_lr, BGI.sauc_ex, pin2_e, $63, $06, $04, $00 0x2d00 CUE.1_pin2_e EQU (($ - SPAWNTBL) / 4) SHL 8 d1d1 8ce1 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.pin2_e SHR 5) + (BGI.sauc_ex) d1d2 0005 DECLE @@pn2 d1d3 0004 DECLE ($00 SHL 8) + $04 d1d4 0663 DECLE ($06 SHL 8) + $63 ;---------------------------------------------------------------------------- ;SPAWNX 2_blue_a, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_a, $A0, $1A, $01, $00 0x2e00 CUE.2_blue_a EQU (($ - SPAWNTBL) / 4) SHL 8 d1d5 0c11 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_a SHR 5) + (BGI.sauc_ex) d1d6 0001 DECLE @@blu d1d7 0001 DECLE ($00 SHL 8) + $01 d1d8 1aa0 DECLE ($1A SHL 8) + $A0 ;SPAWNX 1_blue_a, 1, blu, BGI.sauc_lr, BGI.sauc_ex, blue_a, $52, $04, $00, $00 0x2f00 CUE.1_blue_a EQU (($ - SPAWNTBL) / 4) SHL 8 d1d9 8c11 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_a SHR 5) + (BGI.sauc_ex) d1da 0001 DECLE @@blu d1db 0000 DECLE ($00 SHL 8) + $00 d1dc 0452 DECLE ($04 SHL 8) + $52 ;SPAWNX 3_blue_b, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_b, $58, $06, $04, $00 0x3000 CUE.3_blue_b EQU (($ - SPAWNTBL) / 4) SHL 8 d1dd 0c41 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_b SHR 5) + (BGI.sauc_ex) d1de 0001 DECLE @@blu d1df 0004 DECLE ($00 SHL 8) + $04 d1e0 0658 DECLE ($06 SHL 8) + $58 ;SPAWNX 2_blue_b, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_b, $96, $04, $03, $00 0x3100 CUE.2_blue_b EQU (($ - SPAWNTBL) / 4) SHL 8 d1e1 0c41 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_b SHR 5) + (BGI.sauc_ex) d1e2 0001 DECLE @@blu d1e3 0003 DECLE ($00 SHL 8) + $03 d1e4 0496 DECLE ($04 SHL 8) + $96 ;SPAWNX 1_blue_b, 1, blu, BGI.sauc_lr, BGI.sauc_ex, blue_b, $33, $05, $01, $00 0x3200 CUE.1_blue_b EQU (($ - SPAWNTBL) / 4) SHL 8 d1e5 8c41 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_b SHR 5) + (BGI.sauc_ex) d1e6 0001 DECLE @@blu d1e7 0001 DECLE ($00 SHL 8) + $01 d1e8 0533 DECLE ($05 SHL 8) + $33 ;SPAWNX 3_blue_c, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_c, $14, $04, $05, $00 0x3300 CUE.3_blue_c EQU (($ - SPAWNTBL) / 4) SHL 8 d1e9 0c71 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_c SHR 5) + (BGI.sauc_ex) d1ea 0001 DECLE @@blu d1eb 0005 DECLE ($00 SHL 8) + $05 d1ec 0414 DECLE ($04 SHL 8) + $14 ;SPAWNX 2_blue_c, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_c, $83, $05, $07, $00 0x3400 CUE.2_blue_c EQU (($ - SPAWNTBL) / 4) SHL 8 d1ed 0c71 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_c SHR 5) + (BGI.sauc_ex) d1ee 0001 DECLE @@blu d1ef 0007 DECLE ($00 SHL 8) + $07 d1f0 0583 DECLE ($05 SHL 8) + $83 ;SPAWNX 1_blue_c, 1, blu, BGI.sauc_lr, BGI.sauc_ex, blue_c, $A0, $15, $02, $00 0x3500 CUE.1_blue_c EQU (($ - SPAWNTBL) / 4) SHL 8 d1f1 8c71 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_c SHR 5) + (BGI.sauc_ex) d1f2 0001 DECLE @@blu d1f3 0002 DECLE ($00 SHL 8) + $02 d1f4 15a0 DECLE ($15 SHL 8) + $A0 ;SPAWNX 3_blue_d, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_d, $04, $1E, $06, $00 0x3600 CUE.3_blue_d EQU (($ - SPAWNTBL) / 4) SHL 8 d1f5 0ca1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_d SHR 5) + (BGI.sauc_ex) d1f6 0001 DECLE @@blu d1f7 0006 DECLE ($00 SHL 8) + $06 d1f8 1e04 DECLE ($1E SHL 8) + $04 ;SPAWNX 2_blue_d, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_d, $38, $05, $04, $00 0x3700 CUE.2_blue_d EQU (($ - SPAWNTBL) / 4) SHL 8 d1f9 0ca1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_d SHR 5) + (BGI.sauc_ex) d1fa 0001 DECLE @@blu d1fb 0004 DECLE ($00 SHL 8) + $04 d1fc 0538 DECLE ($05 SHL 8) + $38 ;SPAWNX 1_blue_d, 1, blu, BGI.sauc_lr, BGI.sauc_ex, blue_d, $77, $04, $03, $00 0x3800 CUE.1_blue_d EQU (($ - SPAWNTBL) / 4) SHL 8 d1fd 8ca1 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_d SHR 5) + (BGI.sauc_ex) d1fe 0001 DECLE @@blu d1ff 0003 DECLE ($00 SHL 8) + $03 d200 0477 DECLE ($04 SHL 8) + $77 ;SPAWNX 3_blue_e, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_e, $31, $04, $02, $00 0x3900 CUE.3_blue_e EQU (($ - SPAWNTBL) / 4) SHL 8 d201 0cd1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_e SHR 5) + (BGI.sauc_ex) d202 0001 DECLE @@blu d203 0002 DECLE ($00 SHL 8) + $02 d204 0431 DECLE ($04 SHL 8) + $31 ;SPAWNX 2_blue_e, 0, blu, BGI.sauc_lr, BGI.sauc_ex, blue_e, $69, $05, $05, $00 0x3a00 CUE.2_blue_e EQU (($ - SPAWNTBL) / 4) SHL 8 d205 0cd1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_e SHR 5) + (BGI.sauc_ex) d206 0001 DECLE @@blu d207 0005 DECLE ($00 SHL 8) + $05 d208 0569 DECLE ($05 SHL 8) + $69 ;SPAWNX 1_blue_e, 1, blu, BGI.sauc_lr, BGI.sauc_ex, blue_e, $12, $09, $00, $00 0x3b00 CUE.1_blue_e EQU (($ - SPAWNTBL) / 4) SHL 8 d209 8cd1 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blue_e SHR 5) + (BGI.sauc_ex) d20a 0001 DECLE @@blu d20b 0000 DECLE ($00 SHL 8) + $00 d20c 0912 DECLE ($09 SHL 8) + $12 ; ;SPAWNX 2_blu2_a, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_a, $A0, $1C, $07, $00 0x3c00 CUE.2_blu2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d20d 0c29 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_a SHR 5) + (BGI.sauc_ex) d20e 0006 DECLE @@bl2 d20f 0007 DECLE ($00 SHL 8) + $07 d210 1ca0 DECLE ($1C SHL 8) + $A0 ;SPAWNX 1_blu2_a, 1, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_a, $46, $04, $00, $00 0x3d00 CUE.1_blu2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d211 8c29 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_a SHR 5) + (BGI.sauc_ex) d212 0006 DECLE @@bl2 d213 0000 DECLE ($00 SHL 8) + $00 d214 0446 DECLE ($04 SHL 8) + $46 ;SPAWNX 3_blu2_b, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_b, $98, $06, $02, $00 0x3e00 CUE.3_blu2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d215 0c59 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_b SHR 5) + (BGI.sauc_ex) d216 0006 DECLE @@bl2 d217 0002 DECLE ($00 SHL 8) + $02 d218 0698 DECLE ($06 SHL 8) + $98 ;SPAWNX 2_blu2_b, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_b, $47, $04, $05, $00 0x3f00 CUE.2_blu2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d219 0c59 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_b SHR 5) + (BGI.sauc_ex) d21a 0006 DECLE @@bl2 d21b 0005 DECLE ($00 SHL 8) + $05 d21c 0447 DECLE ($04 SHL 8) + $47 ;SPAWNX 1_blu2_b, 1, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_b, $24, $05, $03, $00 0x4000 CUE.1_blu2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d21d 8c59 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_b SHR 5) + (BGI.sauc_ex) d21e 0006 DECLE @@bl2 d21f 0003 DECLE ($00 SHL 8) + $03 d220 0524 DECLE ($05 SHL 8) + $24 ;SPAWNX 3_blu2_c, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_c, $13, $05, $06, $00 0x4100 CUE.3_blu2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d221 0c89 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_c SHR 5) + (BGI.sauc_ex) d222 0006 DECLE @@bl2 d223 0006 DECLE ($00 SHL 8) + $06 d224 0513 DECLE ($05 SHL 8) + $13 ;SPAWNX 2_blu2_c, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_c, $84, $04, $03, $00 0x4200 CUE.2_blu2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d225 0c89 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_c SHR 5) + (BGI.sauc_ex) d226 0006 DECLE @@bl2 d227 0003 DECLE ($00 SHL 8) + $03 d228 0484 DECLE ($04 SHL 8) + $84 ;SPAWNX 1_blu2_c, 1, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_c, $A0, $17, $02, $00 0x4300 CUE.1_blu2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d229 8c89 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_c SHR 5) + (BGI.sauc_ex) d22a 0006 DECLE @@bl2 d22b 0002 DECLE ($00 SHL 8) + $02 d22c 17a0 DECLE ($17 SHL 8) + $A0 ;SPAWNX 3_blu2_d, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_d, $04, $1C, $04, $00 0x4400 CUE.3_blu2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d22d 0cb9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_d SHR 5) + (BGI.sauc_ex) d22e 0006 DECLE @@bl2 d22f 0004 DECLE ($00 SHL 8) + $04 d230 1c04 DECLE ($1C SHL 8) + $04 ;SPAWNX 2_blu2_d, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_d, $42, $04, $01, $00 0x4500 CUE.2_blu2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d231 0cb9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_d SHR 5) + (BGI.sauc_ex) d232 0006 DECLE @@bl2 d233 0001 DECLE ($00 SHL 8) + $01 d234 0442 DECLE ($04 SHL 8) + $42 ;SPAWNX 1_blu2_d, 1, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_d, $74, $05, $00, $00 0x4600 CUE.1_blu2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d235 8cb9 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_d SHR 5) + (BGI.sauc_ex) d236 0006 DECLE @@bl2 d237 0000 DECLE ($00 SHL 8) + $00 d238 0574 DECLE ($05 SHL 8) + $74 ;SPAWNX 3_blu2_e, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_e, $34, $05, $04, $00 0x4700 CUE.3_blu2_e EQU (($ - SPAWNTBL) / 4) SHL 8 d239 0ce9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_e SHR 5) + (BGI.sauc_ex) d23a 0006 DECLE @@bl2 d23b 0004 DECLE ($00 SHL 8) + $04 d23c 0534 DECLE ($05 SHL 8) + $34 ;SPAWNX 2_blu2_e, 0, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_e, $68, $04, $05, $00 0x4800 CUE.2_blu2_e EQU (($ - SPAWNTBL) / 4) SHL 8 d23d 0ce9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_e SHR 5) + (BGI.sauc_ex) d23e 0006 DECLE @@bl2 d23f 0005 DECLE ($00 SHL 8) + $05 d240 0468 DECLE ($04 SHL 8) + $68 ;SPAWNX 1_blu2_e, 1, bl2, BGI.sauc_lr, BGI.sauc_ex, blu2_e, $07, $0F, $01, $00 0x4900 CUE.1_blu2_e EQU (($ - SPAWNTBL) / 4) SHL 8 d241 8ce9 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.blu2_e SHR 5) + (BGI.sauc_ex) d242 0006 DECLE @@bl2 d243 0001 DECLE ($00 SHL 8) + $01 d244 0f07 DECLE ($0F SHL 8) + $07 ;---------------------------------------------------------------------------- ;SPAWNX 3_whit_a, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_a, $15, $16, $07, $00 0x4a00 CUE.3_whit_a EQU (($ - SPAWNTBL) / 4) SHL 8 d245 0c19 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_a SHR 5) + (BGI.sauc_ex) d246 0002 DECLE @@wht d247 0007 DECLE ($00 SHL 8) + $07 d248 1615 DECLE ($16 SHL 8) + $15 ;SPAWNX 2_whit_a, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_a, $A0, $23, $05, $00 0x4b00 CUE.2_whit_a EQU (($ - SPAWNTBL) / 4) SHL 8 d249 0c19 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_a SHR 5) + (BGI.sauc_ex) d24a 0002 DECLE @@wht d24b 0005 DECLE ($00 SHL 8) + $05 d24c 23a0 DECLE ($23 SHL 8) + $A0 ;SPAWNX 1_whit_a, 1, wht, BGI.sauc_lr, BGI.sauc_ex, whit_a, $50, $05, $03, $00 0x4c00 CUE.1_whit_a EQU (($ - SPAWNTBL) / 4) SHL 8 d24d 8c19 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_a SHR 5) + (BGI.sauc_ex) d24e 0002 DECLE @@wht d24f 0003 DECLE ($00 SHL 8) + $03 d250 0550 DECLE ($05 SHL 8) + $50 ;SPAWNX 3_whit_b, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_b, $85, $04, $06, $00 0x4d00 CUE.3_whit_b EQU (($ - SPAWNTBL) / 4) SHL 8 d251 0c49 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_b SHR 5) + (BGI.sauc_ex) d252 0002 DECLE @@wht d253 0006 DECLE ($00 SHL 8) + $06 d254 0485 DECLE ($04 SHL 8) + $85 ;SPAWNX 2_whit_b, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_b, $A0, $25, $01, $00 0x4e00 CUE.2_whit_b EQU (($ - SPAWNTBL) / 4) SHL 8 d255 0c49 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_b SHR 5) + (BGI.sauc_ex) d256 0002 DECLE @@wht d257 0001 DECLE ($00 SHL 8) + $01 d258 25a0 DECLE ($25 SHL 8) + $A0 ;SPAWNX 1_whit_b, 1, wht, BGI.sauc_lr, BGI.sauc_ex, whit_b, $36, $05, $03, $00 0x4f00 CUE.1_whit_b EQU (($ - SPAWNTBL) / 4) SHL 8 d259 8c49 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_b SHR 5) + (BGI.sauc_ex) d25a 0002 DECLE @@wht d25b 0003 DECLE ($00 SHL 8) + $03 d25c 0536 DECLE ($05 SHL 8) + $36 ;SPAWNX 3_whit_c, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_c, $90, $04, $07, $00 0x5000 CUE.3_whit_c EQU (($ - SPAWNTBL) / 4) SHL 8 d25d 0c79 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_c SHR 5) + (BGI.sauc_ex) d25e 0002 DECLE @@wht d25f 0007 DECLE ($00 SHL 8) + $07 d260 0490 DECLE ($04 SHL 8) + $90 ;SPAWNX 2_whit_c, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_c, $40, $06, $02, $00 0x5100 CUE.2_whit_c EQU (($ - SPAWNTBL) / 4) SHL 8 d261 0c79 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_c SHR 5) + (BGI.sauc_ex) d262 0002 DECLE @@wht d263 0002 DECLE ($00 SHL 8) + $02 d264 0640 DECLE ($06 SHL 8) + $40 ;SPAWNX 1_whit_c, 1, wht, BGI.sauc_lr, BGI.sauc_ex, whit_c, $70, $05, $00, $00 0x5200 CUE.1_whit_c EQU (($ - SPAWNTBL) / 4) SHL 8 d265 8c79 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_c SHR 5) + (BGI.sauc_ex) d266 0002 DECLE @@wht d267 0000 DECLE ($00 SHL 8) + $00 d268 0570 DECLE ($05 SHL 8) + $70 ;SPAWNX 3_whit_d, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_d, $76, $04, $06, $00 0x5300 CUE.3_whit_d EQU (($ - SPAWNTBL) / 4) SHL 8 d269 0ca9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_d SHR 5) + (BGI.sauc_ex) d26a 0002 DECLE @@wht d26b 0006 DECLE ($00 SHL 8) + $06 d26c 0476 DECLE ($04 SHL 8) + $76 ;SPAWNX 2_whit_d, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_d, $45, $05, $04, $00 0x5400 CUE.2_whit_d EQU (($ - SPAWNTBL) / 4) SHL 8 d26d 0ca9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_d SHR 5) + (BGI.sauc_ex) d26e 0002 DECLE @@wht d26f 0004 DECLE ($00 SHL 8) + $04 d270 0545 DECLE ($05 SHL 8) + $45 ;SPAWNX 1_whit_d, 1, wht, BGI.sauc_lr, BGI.sauc_ex, whit_d, $08, $15, $01, $00 0x5500 CUE.1_whit_d EQU (($ - SPAWNTBL) / 4) SHL 8 d271 8ca9 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_d SHR 5) + (BGI.sauc_ex) d272 0002 DECLE @@wht d273 0001 DECLE ($00 SHL 8) + $01 d274 1508 DECLE ($15 SHL 8) + $08 ;SPAWNX 3_whit_e, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_e, $04, $17, $00, $00 0x5600 CUE.3_whit_e EQU (($ - SPAWNTBL) / 4) SHL 8 d275 0cd9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_e SHR 5) + (BGI.sauc_ex) d276 0002 DECLE @@wht d277 0000 DECLE ($00 SHL 8) + $00 d278 1704 DECLE ($17 SHL 8) + $04 ;SPAWNX 2_whit_e, 0, wht, BGI.sauc_lr, BGI.sauc_ex, whit_e, $20, $05, $04, $00 0x5700 CUE.2_whit_e EQU (($ - SPAWNTBL) / 4) SHL 8 d279 0cd9 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_e SHR 5) + (BGI.sauc_ex) d27a 0002 DECLE @@wht d27b 0004 DECLE ($00 SHL 8) + $04 d27c 0520 DECLE ($05 SHL 8) + $20 ;SPAWNX 1_whit_e, 1, wht, BGI.sauc_lr, BGI.sauc_ex, whit_e, $60, $04, $02, $00 0x5800 CUE.1_whit_e EQU (($ - SPAWNTBL) / 4) SHL 8 d27d 8cd9 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whit_e SHR 5) + (BGI.sauc_ex) d27e 0002 DECLE @@wht d27f 0002 DECLE ($00 SHL 8) + $02 d280 0460 DECLE ($04 SHL 8) + $60 ; ;SPAWNX 3_whi2_a, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_a, $10, $14, $01, $00 0x5900 CUE.3_whi2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d281 0c31 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_a SHR 5) + (BGI.sauc_ex) d282 0007 DECLE @@wh2 d283 0001 DECLE ($00 SHL 8) + $01 d284 1410 DECLE ($14 SHL 8) + $10 ;SPAWNX 2_whi2_a, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_a, $A0, $16, $05, $00 0x5a00 CUE.2_whi2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d285 0c31 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_a SHR 5) + (BGI.sauc_ex) d286 0007 DECLE @@wh2 d287 0005 DECLE ($00 SHL 8) + $05 d288 16a0 DECLE ($16 SHL 8) + $A0 ;SPAWNX 1_whi2_a, 1, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_a, $57, $04, $03, $00 0x5b00 CUE.1_whi2_a EQU (($ - SPAWNTBL) / 4) SHL 8 d289 8c31 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_a SHR 5) + (BGI.sauc_ex) d28a 0007 DECLE @@wh2 d28b 0003 DECLE ($00 SHL 8) + $03 d28c 0457 DECLE ($04 SHL 8) + $57 ;SPAWNX 3_whi2_b, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_b, $92, $04, $04, $00 0x5c00 CUE.3_whi2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d28d 0c61 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_b SHR 5) + (BGI.sauc_ex) d28e 0007 DECLE @@wh2 d28f 0004 DECLE ($00 SHL 8) + $04 d290 0492 DECLE ($04 SHL 8) + $92 ;SPAWNX 2_whi2_b, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_b, $A0, $22, $01, $00 0x5d00 CUE.2_whi2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d291 0c61 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_b SHR 5) + (BGI.sauc_ex) d292 0007 DECLE @@wh2 d293 0001 DECLE ($00 SHL 8) + $01 d294 22a0 DECLE ($22 SHL 8) + $A0 ;SPAWNX 1_whi2_b, 1, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_b, $44, $05, $05, $00 0x5e00 CUE.1_whi2_b EQU (($ - SPAWNTBL) / 4) SHL 8 d295 8c61 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_b SHR 5) + (BGI.sauc_ex) d296 0007 DECLE @@wh2 d297 0005 DECLE ($00 SHL 8) + $05 d298 0544 DECLE ($05 SHL 8) + $44 ;SPAWNX 3_whi2_c, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_c, $93, $05, $07, $00 0x5f00 CUE.3_whi2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d299 0c91 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_c SHR 5) + (BGI.sauc_ex) d29a 0007 DECLE @@wh2 d29b 0007 DECLE ($00 SHL 8) + $07 d29c 0593 DECLE ($05 SHL 8) + $93 ;SPAWNX 2_whi2_c, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_c, $28, $04, $02, $00 0x6000 CUE.2_whi2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d29d 0c91 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_c SHR 5) + (BGI.sauc_ex) d29e 0007 DECLE @@wh2 d29f 0002 DECLE ($00 SHL 8) + $02 d2a0 0428 DECLE ($04 SHL 8) + $28 ;SPAWNX 1_whi2_c, 1, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_c, $67, $06, $00, $00 0x6100 CUE.1_whi2_c EQU (($ - SPAWNTBL) / 4) SHL 8 d2a1 8c91 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_c SHR 5) + (BGI.sauc_ex) d2a2 0007 DECLE @@wh2 d2a3 0000 DECLE ($00 SHL 8) + $00 d2a4 0667 DECLE ($06 SHL 8) + $67 ;SPAWNX 3_whi2_d, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_d, $62, $06, $00, $00 0x6200 CUE.3_whi2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d2a5 0cc1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_d SHR 5) + (BGI.sauc_ex) d2a6 0007 DECLE @@wh2 d2a7 0000 DECLE ($00 SHL 8) + $00 d2a8 0662 DECLE ($06 SHL 8) + $62 ;SPAWNX 2_whi2_d, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_d, $43, $04, $02, $00 0x6300 CUE.2_whi2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d2a9 0cc1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_d SHR 5) + (BGI.sauc_ex) d2aa 0007 DECLE @@wh2 d2ab 0002 DECLE ($00 SHL 8) + $02 d2ac 0443 DECLE ($04 SHL 8) + $43 ;SPAWNX 1_whi2_d, 1, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_d, $06, $17, $04, $00 0x6400 CUE.1_whi2_d EQU (($ - SPAWNTBL) / 4) SHL 8 d2ad 8cc1 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_d SHR 5) + (BGI.sauc_ex) d2ae 0007 DECLE @@wh2 d2af 0004 DECLE ($00 SHL 8) + $04 d2b0 1706 DECLE ($17 SHL 8) + $06 ;SPAWNX 2_whi2_e, 0, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_e, $26, $06, $06, $00 0x6500 CUE.2_whi2_e EQU (($ - SPAWNTBL) / 4) SHL 8 d2b1 0cf1 DECLE (0 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_e SHR 5) + (BGI.sauc_ex) d2b2 0007 DECLE @@wh2 d2b3 0006 DECLE ($00 SHL 8) + $06 d2b4 0626 DECLE ($06 SHL 8) + $26 ;SPAWNX 1_whi2_e, 1, wh2, BGI.sauc_lr, BGI.sauc_ex, whi2_e, $64, $05, $03, $00 0x6600 CUE.1_whi2_e EQU (($ - SPAWNTBL) / 4) SHL 8 d2b5 8cf1 DECLE (1 SHL 15) + (BGI.sauc_lr SHL 8) + (EXIT.whi2_e SHR 5) + (BGI.sauc_ex) d2b6 0007 DECLE @@wh2 d2b7 0003 DECLE ($00 SHL 8) + $03 d2b8 0564 DECLE ($05 SHL 8) + $64 ;---------------------------------------------------------------------------- ;; Follower ;SPAWN follower, 0, fola, BGI.follow0, BGI.flexit, flexit, $9, $47 ; Body of follower 0x6700 CUE.follower EQU (($ - SPAWNTBL) / 4) SHL 8 d2b9 10fa DECLE (0 SHL 15) + (BGI.follow0 SHL 8) + (EXIT.flexit SHR 5) + (BGI.flexit) d2ba 0003 DECLE @@fola d2bb 0000 DECLE $0000 d2bc 4709 DECLE ($47 SHL 8) + $9 ; Body of follower ;SPAWN _followr, 1, folb, BGI.null, BGI.null, 0, $9, $47 ; decoration on follower 0x6800 CUE._followr EQU (($ - SPAWNTBL) / 4) SHL 8 d2bd 8404 DECLE (1 SHL 15) + (BGI.null SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2be 0004 DECLE @@folb d2bf 0000 DECLE $0000 d2c0 4709 DECLE ($47 SHL 8) + $9 ; decoration on follower ;; Mine-laying follower: Lays 2 mines. ;SPAWN minelyr2, 0, fola, BGI.follow0, BGI.flexit, flexit, $9, $47 0x6900 CUE.minelyr2 EQU (($ - SPAWNTBL) / 4) SHL 8 d2c1 10fa DECLE (0 SHL 15) + (BGI.follow0 SHL 8) + (EXIT.flexit SHR 5) + (BGI.flexit) d2c2 0003 DECLE @@fola d2c3 0000 DECLE $0000 d2c4 4709 DECLE ($47 SHL 8) + $9 ;SPAWNX _minlyr2, 1, folb, BGI.null, BGI.null, 0, $9, $47, 2, 0 0x6a00 CUE._minlyr2 EQU (($ - SPAWNTBL) / 4) SHL 8 d2c5 8404 DECLE (1 SHL 15) + (BGI.null SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2c6 0004 DECLE @@folb d2c7 0002 DECLE (0 SHL 8) + 2 d2c8 4709 DECLE ($47 SHL 8) + $9 ;; Mine-laying follower: Lays 5 mines. ;SPAWN minelyr5, 0, fola, BGI.follow0, BGI.flexit, flexit, $9, $47 0x6b00 CUE.minelyr5 EQU (($ - SPAWNTBL) / 4) SHL 8 d2c9 10fa DECLE (0 SHL 15) + (BGI.follow0 SHL 8) + (EXIT.flexit SHR 5) + (BGI.flexit) d2ca 0003 DECLE @@fola d2cb 0000 DECLE $0000 d2cc 4709 DECLE ($47 SHL 8) + $9 ;SPAWNX _minlyr5, 1, folb, BGI.null, BGI.null, 0, $9, $47, 5, 0 0x6c00 CUE._minlyr5 EQU (($ - SPAWNTBL) / 4) SHL 8 d2cd 8404 DECLE (1 SHL 15) + (BGI.null SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2ce 0004 DECLE @@folb d2cf 0005 DECLE (0 SHL 8) + 5 d2d0 4709 DECLE ($47 SHL 8) + $9 ;; Land-mine left by mine-laying follower ;SPAWN laidmine, 1, mine, BGI.mine0, 0, 0, $00, $49 0x6d00 CUE.laidmine EQU (($ - SPAWNTBL) / 4) SHL 8 d2d1 8600 DECLE (1 SHL 15) + (BGI.mine0 SHL 8) + (EXIT.0 SHR 5) + (0) d2d2 000a DECLE @@mine d2d3 0000 DECLE $0000 d2d4 4900 DECLE ($49 SHL 8) + $00 ;; Charger: Reverse-flying follower ;SPAWN charger, 0, fola, BGI.follow0, BGI.fladv, flexit, $A8, $47 0x6e00 CUE.charger EQU (($ - SPAWNTBL) / 4) SHL 8 d2d5 10fb DECLE (0 SHL 15) + (BGI.follow0 SHL 8) + (EXIT.flexit SHR 5) + (BGI.fladv) d2d6 0003 DECLE @@fola d2d7 0000 DECLE $0000 d2d8 47a8 DECLE ($47 SHL 8) + $A8 ;SPAWNX _chargr, 1, folb, BGI.null, BGI.null, 0, $A8, $47, 3, 0 0x6f00 CUE._chargr EQU (($ - SPAWNTBL) / 4) SHL 8 d2d9 8404 DECLE (1 SHL 15) + (BGI.null SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2da 0004 DECLE @@folb d2db 0003 DECLE (0 SHL 8) + 3 d2dc 47a8 DECLE ($47 SHL 8) + $A8 ;; Charger: Reverse-flying follower ;SPAWN charger5, 0, fola, BGI.follow0, BGI.fladv, flexit, $A8, $47 0x7000 CUE.charger5 EQU (($ - SPAWNTBL) / 4) SHL 8 d2dd 10fb DECLE (0 SHL 15) + (BGI.follow0 SHL 8) + (EXIT.flexit SHR 5) + (BGI.fladv) d2de 0003 DECLE @@fola d2df 0000 DECLE $0000 d2e0 47a8 DECLE ($47 SHL 8) + $A8 ;SPAWNX _chargr5, 1, folb, BGI.null, BGI.null, 0, $A8, $47, 5, 0 0x7100 CUE._chargr5 EQU (($ - SPAWNTBL) / 4) SHL 8 d2e1 8404 DECLE (1 SHL 15) + (BGI.null SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2e2 0004 DECLE @@folb d2e3 0005 DECLE (0 SHL 8) + 5 d2e4 47a8 DECLE ($47 SHL 8) + $A8 ;; Charger: Reverse-flying follower ;SPAWN charger7, 0, fola, BGI.follow0, BGI.fladv, flexit, $A8, $47 0x7200 CUE.charger7 EQU (($ - SPAWNTBL) / 4) SHL 8 d2e5 10fb DECLE (0 SHL 15) + (BGI.follow0 SHL 8) + (EXIT.flexit SHR 5) + (BGI.fladv) d2e6 0003 DECLE @@fola d2e7 0000 DECLE $0000 d2e8 47a8 DECLE ($47 SHL 8) + $A8 ;SPAWNX _chargr7, 1, folb, BGI.null, BGI.null, 0, $A8, $47, 7, 0 0x7300 CUE._chargr7 EQU (($ - SPAWNTBL) / 4) SHL 8 d2e9 8404 DECLE (1 SHL 15) + (BGI.null SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2ea 0004 DECLE @@folb d2eb 0007 DECLE (0 SHL 8) + 7 d2ec 47a8 DECLE ($47 SHL 8) + $A8 ;; Stalactites ;SPAWNX stal_a, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $29, $00 ; will hit the tank at slow speed 0x7400 CUE.stal_a EQU (($ - SPAWNTBL) / 4) SHL 8 d2ed 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2ee 000d DECLE @@stal d2ef 0029 DECLE ($00 SHL 8) + $29 d2f0 04a8 DECLE (4 SHL 8) + $A8 ; will hit the tank at slow speed ;SPAWNX stal_b, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $38, $00 ; will hit the tank at slow speed 0x7500 CUE.stal_b EQU (($ - SPAWNTBL) / 4) SHL 8 d2f1 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2f2 000d DECLE @@stal d2f3 0038 DECLE ($00 SHL 8) + $38 d2f4 04a8 DECLE (4 SHL 8) + $A8 ; will hit the tank at slow speed ;SPAWNX stal_c, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $47, $00 ; will hit the tank at standard speed 0x7600 CUE.stal_c EQU (($ - SPAWNTBL) / 4) SHL 8 d2f5 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2f6 000d DECLE @@stal d2f7 0047 DECLE ($00 SHL 8) + $47 d2f8 04a8 DECLE (4 SHL 8) + $A8 ; will hit the tank at standard speed ;SPAWNX stal_d, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $56, $00 ; will hit the tank at standard speed 0x7700 CUE.stal_d EQU (($ - SPAWNTBL) / 4) SHL 8 d2f9 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2fa 000d DECLE @@stal d2fb 0056 DECLE ($00 SHL 8) + $56 d2fc 04a8 DECLE (4 SHL 8) + $A8 ; will hit the tank at standard speed ;SPAWNX stal_e, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $65, $00 ; will hit the tank at full speed 0x7800 CUE.stal_e EQU (($ - SPAWNTBL) / 4) SHL 8 d2fd 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d2fe 000d DECLE @@stal d2ff 0065 DECLE ($00 SHL 8) + $65 d300 04a8 DECLE (4 SHL 8) + $A8 ; will hit the tank at full speed ;SPAWNX stal_f, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $76, $00 ; you must slow down if you are going full speed 0x7900 CUE.stal_f EQU (($ - SPAWNTBL) / 4) SHL 8 d301 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d302 000d DECLE @@stal d303 0076 DECLE ($00 SHL 8) + $76 d304 04a8 DECLE (4 SHL 8) + $A8 ; you must slow down if you are going full speed ;SPAWNX stal_g, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $84, $00 0x7a00 CUE.stal_g EQU (($ - SPAWNTBL) / 4) SHL 8 d305 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d306 000d DECLE @@stal d307 0084 DECLE ($00 SHL 8) + $84 d308 04a8 DECLE (4 SHL 8) + $A8 ;SPAWNX stal_h, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $94, $00 0x7b00 CUE.stal_h EQU (($ - SPAWNTBL) / 4) SHL 8 d309 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d30a 000d DECLE @@stal d30b 0094 DECLE ($00 SHL 8) + $94 d30c 04a8 DECLE (4 SHL 8) + $A8 ;SPAWNX stal_i, 1, stal, BGI.stal0, BGI.null, 0, $A8, 4, $A7, $00 0x7c00 CUE.stal_i EQU (($ - SPAWNTBL) / 4) SHL 8 d30d 9204 DECLE (1 SHL 15) + (BGI.stal0 SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d30e 000d DECLE @@stal d30f 00a7 DECLE ($00 SHL 8) + $A7 d310 04a8 DECLE (4 SHL 8) + $A8 ;---------------------------------------------------------------------------- ;SPAWN crat6, 1, crat6,BGI.null, BGI.null, 0, $A9, $50 0x7d00 CUE.crat6 EQU (($ - SPAWNTBL) / 4) SHL 8 d311 8404 DECLE (1 SHL 15) + (BGI.null SHL 8) + (EXIT.0 SHR 5) + (BGI.null) d312 000d DECLE @@crat6 d313 0000 DECLE $0000 d314 50a9 DECLE ($50 SHL 8) + $A9 ENDP ;__ 0x20c _SPAWN.size EQU $ - _SPAWN INCLUDE "gfx/rcsdata.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2006, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; 0xd315 RCS1 PROC 0x8000 @@nosc EQU $8000 + (0 SHL 9) 0x8200 @@sc500 EQU $8000 + (1 SHL 9) 0x8400 @@sc750 EQU $8000 + (2 SHL 9) 0x8600 @@sc1K EQU $8000 + (3 SHL 9) d315 9963 @@rock1 DECLE ($0800 + (RCARD + 0) * 8 + X_ROCK) + @@nosc ; small rock d316 9b6b DECLE ($0800 + (RCARD + 1) * 8 + X_ROCK) + @@sc500 ; d317 0001 DECLE $0001 d318 9973 @@rock2 DECLE ($0800 + (RCARD + 2) * 8 + X_ROCK) + @@nosc ; midsize rock d319 9d7b DECLE ($0800 + (RCARD + 3) * 8 + X_ROCK) + @@sc750 ; d31a 0001 DECLE $0001 d31b 9983 @@rock3 DECLE ($0800 + (RCARD + 4) * 8 + X_ROCK) + @@nosc ; super rock d31c 998b DECLE ($0800 + (RCARD + 5) * 8 + X_ROCK) + @@nosc ; d31d 9f93 DECLE ($0800 + (RCARD + 6) * 8 + X_ROCK) + @@sc1K ; d31e 0001 DECLE $0001 d31f 8800 @@crat1 DECLE $0800 + @@nosc ; small crater d320 8a00 DECLE $0800 + @@sc500 ; d321 0001 DECLE $0001 d322 8800 @@crat3 DECLE $0800 + @@nosc ; small crater d323 8a00 DECLE $0800 + @@sc500 ; d324 8800 @@crat2 DECLE $0800 + @@nosc ; large crater d325 8800 DECLE $0800 + @@nosc ; d326 8e00 DECLE $0800 + @@sc1K ; d327 0001 DECLE $0001 d328 8800 @@crat4 DECLE $0800 + @@nosc ; large crater d329 8800 DECLE $0800 + @@nosc ; d32a 8800 DECLE $0800 + @@nosc ; d32b 8a00 DECLE $0800 + @@sc500 ; small crater d32c 8e00 DECLE $0800 + @@sc1K ; d32d 0001 @@blank DECLE $0001 d32e 0001 @@cratz DECLE $0001 ENDP 0xd32f RCS2 PROC 0x8000 @@nosc EQU $8000 + (0 SHL 9) 0x8200 @@sc500 EQU $8000 + (1 SHL 9) 0x8400 @@sc750 EQU $8000 + (2 SHL 9) 0x8600 @@sc1K EQU $8000 + (3 SHL 9) d32f 18da @@rock1 DECLE GCARDx ; small rock d330 18da DECLE GCARDx ; d331 18da DECLE GCARDx d332 18da @@rock2 DECLE GCARDx ; midsize rock d333 18da DECLE GCARDx ; d334 18da DECLE GCARDx d335 18da @@rock3 DECLE GCARDx ; super rock d336 18da DECLE GCARDx ; d337 18da DECLE GCARDx ; d338 18da DECLE GCARDx d339 999a @@crat1 DECLE ($1802 + (RCARD + 7) * 8) + @@nosc ; small crater d33a 99a2 DECLE ($1802 + (RCARD + 8) * 8) + @@nosc ; d33b 18da DECLE GCARDx d33c 999a @@crat3 DECLE ($1802 + (RCARD + 7) * 8) + @@nosc ; small crater d33d 99a2 DECLE ($1802 + (RCARD + 8) * 8) + @@nosc ; d33e 99aa @@crat2 DECLE ($1802 + (RCARD + 9) * 8) + @@nosc ; super crater d33f 99b2 DECLE ($1802 + (RCARD +10) * 8) + @@nosc ; d340 99ba DECLE ($1802 + (RCARD +11) * 8) + @@nosc ; d341 18da DECLE GCARDx d342 99aa @@crat4 DECLE ($1802 + (RCARD + 9) * 8) + @@nosc ; super crater d343 99b2 DECLE ($1802 + (RCARD +10) * 8) + @@nosc ; d344 99ba DECLE ($1802 + (RCARD +11) * 8) + @@nosc ; d345 999a DECLE ($1802 + (RCARD + 7) * 8) + @@nosc ; small crater d346 99a2 DECLE ($1802 + (RCARD + 8) * 8) + @@nosc ; d347 18da @@blank DECLE GCARDx d348 0000 DECLE 0 ENDP ;__ 0xd349 _WORLD EQU $ INCLUDE "world/world.asm" 0xd349 WINDEX PROC d349 d351 d3ad DECLE MOON_B, MOON_C d34b d428 d494 DECLE MARS_B, MARS_C d34d d670 d6f1 DECLE PLUT_B, PLUT_C d34f d528 d5c0 DECLE MERC_B, MERC_C ENDP 0xd351 MOON_B PROC ; INCLUDE "genasm/demolvl.asm" INCLUDE "genasm/beg_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd351 @@ckpt_0a: d351 1915 DECLE @@blank + ( 22 - 1) ; $0000 0 BLANK d352 0b09 DECLE @@crat1 + ( 10 - 1) ; $0001 22 CRAT1 d353 0b0d DECLE @@crat1 + ( 14 - 1) ; $0002 32 CRAT1 d354 0108 DECLE @@rock1 + ( 9 - 1) ; $0003 46 ROCK1 d355 0b10 DECLE @@crat1 + ( 17 - 1) ; $0004 55 CRAT1 d356 1d00 DECLE @@caut1 + ( 1 - 1) ; $0005 72 CAUTION 1 d357 0106 DECLE @@rock1 + ( 7 - 1) ; $0006 73 ROCK1 d358 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $0007 80 LEVEL 'A' 0xd359 @@ckpt_0b: d359 190a DECLE @@blank + ( 11 - 1) ; $0008 81 BLANK d35a 941b DECLE @@cue + ( 28 - 1) + CUE.2_pink_a ; $0009 92 CUE '2_pink_a' d35b bc10 DECLE @@cue + ( 17 - 1) + CUE.2_blu2_a ; $000A 120 CUE '2_blu2_a' d35c 6107 DECLE @@exit + ( 8 - 1) + EXIT.pink_a ; $000B 137 EXIT 'pink_a' d35d 011a DECLE @@rock1 + ( 27 - 1) ; $000C 145 ROCK1 d35e 6500 DECLE @@exit + ( 1 - 1) + EXIT.blu2_a ; $000D 172 EXIT 'blu2_a' d35f 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $000E 173 LEVEL 'B' 0xd360 @@ckpt_0c: d360 1901 DECLE @@blank + ( 2 - 1) ; $000F 174 BLANK d361 9704 DECLE @@cue + ( 5 - 1) + CUE.2_pink_b ; $0010 176 CUE '2_pink_b' d362 0128 DECLE @@rock1 + ( 41 - 1) ; $0011 181 ROCK1 d363 0109 DECLE @@rock1 + ( 10 - 1) ; $0012 222 ROCK1 d364 6701 DECLE @@exit + ( 2 - 1) + EXIT.pink_b ; $0013 232 EXIT 'pink_b' d365 0b0a DECLE @@crat1 + ( 11 - 1) ; $0014 234 CRAT1 d366 010b DECLE @@rock1 + ( 12 - 1) ; $0015 245 ROCK1 d367 0109 DECLE @@rock1 + ( 10 - 1) ; $0016 257 ROCK1 d368 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $0017 267 LEVEL 'C' 0xd369 @@ckpt_0d: d369 190e DECLE @@blank + ( 15 - 1) ; $0018 268 BLANK d36a 1d04 DECLE @@caut1 + ( 5 - 1) ; $0019 283 CAUTION 1 d36b 0b09 DECLE @@crat1 + ( 10 - 1) ; $001A 288 CRAT1 d36c 0b04 DECLE @@crat1 + ( 5 - 1) ; $001B 298 CRAT1 d36d c11c DECLE @@cue + ( 29 - 1) + CUE.3_blu2_c ; $001C 303 CUE '3_blu2_c' d36e 0117 DECLE @@rock1 + ( 24 - 1) ; $001D 332 ROCK1 d36f 7103 DECLE @@exit + ( 4 - 1) + EXIT.blu2_c ; $001E 356 EXIT 'blu2_c' d370 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $001F 360 LEVEL 'D' 0xd371 @@ckpt_0e: d371 1901 DECLE @@blank + ( 2 - 1) ; $0020 361 BLANK d372 da1f DECLE @@cue + ( 32 - 1) + CUE.2_whi2_a ; $0021 363 CUE '2_whi2_a' d373 9c12 DECLE @@cue + ( 19 - 1) + CUE.2_pink_d ; $0022 395 CUE '2_pink_d' d374 6614 DECLE @@exit + ( 21 - 1) + EXIT.whi2_a ; $0023 414 EXIT 'whi2_a' d375 0102 DECLE @@rock1 + ( 3 - 1) ; $0024 435 ROCK1 d376 7306 DECLE @@exit + ( 7 - 1) + EXIT.pink_d ; $0025 438 EXIT 'pink_d' d377 0b07 DECLE @@crat1 + ( 8 - 1) ; $0026 445 CRAT1 d378 4400 DECLE @@level + ( 1 - 1) + ( 36 SHL 8) ; $0027 453 LEVEL 'k' d379 1900 DECLE @@blank + ( 1 - 1) ; $0028 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 12 ;; TOTAL OBJECTS 29 ;; TOTAL WORDS 41 ;; ======================================================================== ;; INCLUDE "genasm/beg_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd37a @@ckpt_0f: d37a 190b DECLE @@blank + ( 12 - 1) ; $0000 0 BLANK d37b e510 DECLE @@cue + ( 17 - 1) + CUE.2_whi2_e ; $0001 12 CUE '2_whi2_e' d37c c723 DECLE @@cue + ( 36 - 1) + CUE.3_blu2_e ; $0002 29 CUE '3_blu2_e' d37d 7e01 DECLE @@exit + ( 2 - 1) + EXIT.whi2_e ; $0003 65 EXIT 'whi2_e' d37e 0b07 DECLE @@crat1 + ( 8 - 1) ; $0004 67 CRAT1 d37f 0103 DECLE @@rock1 + ( 4 - 1) ; $0005 75 ROCK1 d380 7d00 DECLE @@exit + ( 1 - 1) + EXIT.blu2_e ; $0006 79 EXIT 'blu2_e' d381 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $0007 80 LEVEL 'F' 0xd382 @@ckpt_0g: d382 1903 DECLE @@blank + ( 4 - 1) ; $0008 81 BLANK d383 0b0a DECLE @@crat1 + ( 11 - 1) ; $0009 85 CRAT1 d384 1002 DECLE @@crat2 + ( 3 - 1) ; $000A 96 CRAT2 d385 010c DECLE @@rock1 + ( 13 - 1) ; $000B 99 ROCK1 d386 0409 DECLE @@rock2 + ( 10 - 1) ; $000C 112 ROCK2 d387 070a DECLE @@rock3 + ( 11 - 1) ; $000D 122 ROCK3 d388 0409 DECLE @@rock2 + ( 10 - 1) ; $000E 133 ROCK2 d389 0107 DECLE @@rock1 + ( 8 - 1) ; $000F 143 ROCK1 d38a 0b0a DECLE @@crat1 + ( 11 - 1) ; $0010 151 CRAT1 d38b 0407 DECLE @@rock2 + ( 8 - 1) ; $0011 162 ROCK2 d38c 0402 DECLE @@rock2 + ( 3 - 1) ; $0012 170 ROCK2 d38d 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $0013 173 LEVEL 'G' 0xd38e @@ckpt_0h: d38e 1905 DECLE @@blank + ( 6 - 1) ; $0014 174 BLANK d38f 1d02 DECLE @@caut1 + ( 3 - 1) ; $0015 180 CAUTION 1 d390 1009 DECLE @@crat2 + ( 10 - 1) ; $0016 183 CRAT2 d391 0406 DECLE @@rock2 + ( 7 - 1) ; $0017 193 ROCK2 d392 1009 DECLE @@crat2 + ( 10 - 1) ; $0018 200 CRAT2 d393 a601 DECLE @@cue + ( 2 - 1) + CUE.3_pin2_c ; $0019 210 CUE '3_pin2_c' d394 0412 DECLE @@rock2 + ( 19 - 1) ; $001A 212 ROCK2 d395 0423 DECLE @@rock2 + ( 36 - 1) ; $001B 231 ROCK2 d396 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $001C 267 LEVEL 'H' 0xd397 @@ckpt_0i: d397 1900 DECLE @@blank + ( 1 - 1) ; $001D 268 BLANK d398 dd02 DECLE @@cue + ( 3 - 1) + CUE.2_whi2_b ; $001E 269 CUE '2_whi2_b' d399 7025 DECLE @@exit + ( 38 - 1) + EXIT.pin2_c ; $001F 272 EXIT 'pin2_c' d39a ac16 DECLE @@cue + ( 23 - 1) + CUE.2_pin2_e ; $0020 310 CUE '2_pin2_e' d39b 6c17 DECLE @@exit + ( 24 - 1) + EXIT.whi2_b ; $0021 333 EXIT 'whi2_b' d39c e300 DECLE @@cue + ( 1 - 1) + CUE.2_whi2_d ; $0022 357 CUE '2_whi2_d' d39d 7c01 DECLE @@exit + ( 2 - 1) + EXIT.pin2_e ; $0023 358 EXIT 'pin2_e' d39e 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $0024 360 LEVEL 'I' 0xd39f @@ckpt_0j: d39f 1907 DECLE @@blank + ( 8 - 1) ; $0025 361 BLANK d3a0 d817 DECLE @@cue + ( 24 - 1) + CUE.1_whit_e ; $0026 369 CUE '1_whit_e' d3a1 0408 DECLE @@rock2 + ( 9 - 1) ; $0027 393 ROCK2 d3a2 7b02 DECLE @@exit + ( 3 - 1) + EXIT.whit_e ; $0028 402 EXIT 'whit_e' d3a3 1001 DECLE @@crat2 + ( 2 - 1) ; $0029 405 CRAT2 d3a4 7807 DECLE @@exit + ( 8 - 1) + EXIT.whi2_d ; $002A 407 EXIT 'whi2_d' d3a5 0709 DECLE @@rock3 + ( 10 - 1) ; $002B 415 ROCK3 d3a6 010c DECLE @@rock1 + ( 13 - 1) ; $002C 425 ROCK1 d3a7 0707 DECLE @@rock3 + ( 8 - 1) ; $002D 438 ROCK3 d3a8 1e02 DECLE @@caut2 + ( 3 - 1) ; $002E 446 CAUTION 2 d3a9 1003 DECLE @@crat2 + ( 4 - 1) ; $002F 449 CRAT2 d3aa 4900 DECLE @@level + ( 1 - 1) + ( 41 SHL 8) ; $0030 453 LEVEL 'p' d3ab 1900 DECLE @@blank + ( 1 - 1) ; $0031 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 14 ;; TOTAL OBJECTS 36 ;; TOTAL WORDS 50 ;; ======================================================================== ;; d3ac 0000 DECLE 0 ENDP 0xd3ad MOON_C PROC INCLUDE "genasm/chl_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd3ad @@ckpt_0a: d3ad 190b DECLE @@blank + ( 12 - 1) ; $0000 0 BLANK d3ae a115 DECLE @@cue + ( 22 - 1) + CUE.3_pin2_a ; $0001 12 CUE '3_pin2_a' d3af c720 DECLE @@cue + ( 33 - 1) + CUE.3_blu2_e ; $0002 34 CUE '3_blu2_e' d3b0 6408 DECLE @@exit + ( 9 - 1) + EXIT.pin2_a ; $0003 67 EXIT 'pin2_a' d3b1 7d03 DECLE @@exit + ( 4 - 1) + EXIT.blu2_e ; $0004 76 EXIT 'blu2_e' d3b2 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $0005 80 LEVEL 'A' 0xd3b3 @@ckpt_0b: d3b3 1900 DECLE @@blank + ( 1 - 1) ; $0006 81 BLANK d3b4 1f07 DECLE @@caut3 + ( 8 - 1) ; $0007 82 CAUTION 3 d3b5 e747 DECLE @@cue + ( 72 - 1) + CUE.follower ; $0008 90 CUE 'follower' d3b6 7f09 DECLE @@exit + ( 10 - 1) + EXIT.flexit ; $0009 162 EXIT 'flexit' d3b7 7f00 DECLE @@exit + ( 1 - 1) + EXIT.flexit ; $000A 172 EXIT 'flexit' d3b8 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $000B 173 LEVEL 'B' 0xd3b9 @@ckpt_0c: d3b9 1919 DECLE @@blank + ( 26 - 1) ; $000C 174 BLANK d3ba 7f0c DECLE @@exit + ( 13 - 1) + EXIT.flexit ; $000D 200 EXIT 'flexit' d3bb 8e06 DECLE @@cue + ( 7 - 1) + CUE.1_turret ; $000E 213 CUE '1_turret' d3bc 0404 DECLE @@rock2 + ( 5 - 1) ; $000F 220 ROCK2 d3bd 040b DECLE @@rock2 + ( 12 - 1) ; $0010 225 ROCK2 d3be 0109 DECLE @@rock1 + ( 10 - 1) ; $0011 237 ROCK1 d3bf 1002 DECLE @@crat2 + ( 3 - 1) ; $0012 247 CRAT2 d3c0 8e04 DECLE @@cue + ( 5 - 1) + CUE.1_turret ; $0013 250 CUE '1_turret' d3c1 100b DECLE @@crat2 + ( 12 - 1) ; $0014 255 CRAT2 d3c2 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $0015 267 LEVEL 'C' 0xd3c3 @@ckpt_0d: d3c3 1900 DECLE @@blank + ( 1 - 1) ; $0016 268 BLANK d3c4 8e07 DECLE @@cue + ( 8 - 1) + CUE.1_turret ; $0017 269 CUE '1_turret' d3c5 8e07 DECLE @@cue + ( 8 - 1) + CUE.1_turret ; $0018 277 CUE '1_turret' d3c6 8e08 DECLE @@cue + ( 9 - 1) + CUE.1_turret ; $0019 285 CUE '1_turret' d3c7 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $001A 294 CUE '1_turret' d3c8 1006 DECLE @@crat2 + ( 7 - 1) ; $001B 296 CRAT2 d3c9 0407 DECLE @@rock2 + ( 8 - 1) ; $001C 303 ROCK2 d3ca 0408 DECLE @@rock2 + ( 9 - 1) ; $001D 311 ROCK2 d3cb 8e05 DECLE @@cue + ( 6 - 1) + CUE.1_turret ; $001E 320 CUE '1_turret' d3cc 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $001F 326 CUE '1_turret' d3cd 1006 DECLE @@crat2 + ( 7 - 1) ; $0020 328 CRAT2 d3ce 040c DECLE @@rock2 + ( 13 - 1) ; $0021 335 ROCK2 d3cf 8e06 DECLE @@cue + ( 7 - 1) + CUE.1_turret ; $0022 348 CUE '1_turret' d3d0 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $0023 355 CUE '1_turret' d3d1 1002 DECLE @@crat2 + ( 3 - 1) ; $0024 357 CRAT2 d3d2 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $0025 360 LEVEL 'D' 0xd3d3 @@ckpt_0e: d3d3 1901 DECLE @@blank + ( 2 - 1) ; $0026 361 BLANK d3d4 1d13 DECLE @@caut1 + ( 20 - 1) ; $0027 363 CAUTION 1 d3d5 a602 DECLE @@cue + ( 3 - 1) + CUE.3_pin2_c ; $0028 383 CUE '3_pin2_c' d3d6 1007 DECLE @@crat2 + ( 8 - 1) ; $0029 386 CRAT2 d3d7 1008 DECLE @@crat2 + ( 9 - 1) ; $002A 394 CRAT2 d3d8 1009 DECLE @@crat2 + ( 10 - 1) ; $002B 403 CRAT2 d3d9 040a DECLE @@rock2 + ( 11 - 1) ; $002C 413 ROCK2 d3da 0408 DECLE @@rock2 + ( 9 - 1) ; $002D 424 ROCK2 d3db 100e DECLE @@crat2 + ( 15 - 1) ; $002E 433 CRAT2 d3dc 0402 DECLE @@rock2 + ( 3 - 1) ; $002F 448 ROCK2 d3dd 7001 DECLE @@exit + ( 2 - 1) + EXIT.pin2_c ; $0030 451 EXIT 'pin2_c' d3de 4400 DECLE @@level + ( 1 - 1) + ( 36 SHL 8) ; $0031 453 LEVEL 'k' d3df 1900 DECLE @@blank + ( 1 - 1) ; $0032 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 20 ;; TOTAL OBJECTS 31 ;; TOTAL WORDS 51 ;; ======================================================================== ;; INCLUDE "genasm/chl_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd3e0 @@ckpt_0f: d3e0 1909 DECLE @@blank + ( 10 - 1) ; $0000 0 BLANK d3e1 da04 DECLE @@cue + ( 5 - 1) + CUE.2_whi2_a ; $0001 10 CUE '2_whi2_a' d3e2 dc40 DECLE @@cue + ( 65 - 1) + CUE.3_whi2_b ; $0002 15 CUE '3_whi2_b' d3e3 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $0003 80 LEVEL 'F' 0xd3e4 @@ckpt_0g: d3e4 1900 DECLE @@blank + ( 1 - 1) ; $0004 81 BLANK d3e5 6601 DECLE @@exit + ( 2 - 1) + EXIT.whi2_a ; $0005 82 EXIT 'whi2_a' d3e6 6c00 DECLE @@exit + ( 1 - 1) + EXIT.whi2_b ; $0006 84 EXIT 'whi2_b' d3e7 0702 DECLE @@rock3 + ( 3 - 1) ; $0007 85 ROCK3 d3e8 0e08 DECLE @@crat3 + ( 9 - 1) ; $0008 88 CRAT3 d3e9 040c DECLE @@rock2 + ( 13 - 1) ; $0009 97 ROCK2 d3ea 1002 DECLE @@crat2 + ( 3 - 1) ; $000A 110 CRAT2 d3eb 0408 DECLE @@rock2 + ( 9 - 1) ; $000B 113 ROCK2 d3ec 1009 DECLE @@crat2 + ( 10 - 1) ; $000C 122 CRAT2 d3ed 1007 DECLE @@crat2 + ( 8 - 1) ; $000D 132 CRAT2 d3ee 0402 DECLE @@rock2 + ( 3 - 1) ; $000E 140 ROCK2 d3ef 0e09 DECLE @@crat3 + ( 10 - 1) ; $000F 143 CRAT3 d3f0 1002 DECLE @@crat2 + ( 3 - 1) ; $0010 153 CRAT2 d3f1 1d05 DECLE @@caut1 + ( 6 - 1) ; $0011 156 CAUTION 1 d3f2 010a DECLE @@rock1 + ( 11 - 1) ; $0012 162 ROCK1 d3f3 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $0013 173 LEVEL 'G' 0xd3f4 @@ckpt_0h: d3f4 1901 DECLE @@blank + ( 2 - 1) ; $0014 174 BLANK d3f5 e303 DECLE @@cue + ( 4 - 1) + CUE.2_whi2_d ; $0015 176 CUE '2_whi2_d' d3f6 e513 DECLE @@cue + ( 20 - 1) + CUE.2_whi2_e ; $0016 180 CUE '2_whi2_e' d3f7 aa09 DECLE @@cue + ( 10 - 1) + CUE.2_pin2_d ; $0017 200 CUE '2_pin2_d' d3f8 9a15 DECLE @@cue + ( 22 - 1) + CUE.2_pink_c ; $0018 210 CUE '2_pink_c' d3f9 7600 DECLE @@exit + ( 1 - 1) + EXIT.pin2_d ; $0019 232 EXIT 'pin2_d' d3fa 0e03 DECLE @@crat3 + ( 4 - 1) ; $001A 233 CRAT3 d3fb 6d01 DECLE @@exit + ( 2 - 1) + EXIT.pink_c ; $001B 237 EXIT 'pink_c' d3fc 7803 DECLE @@exit + ( 4 - 1) + EXIT.whi2_d ; $001C 239 EXIT 'whi2_d' d3fd 7e08 DECLE @@exit + ( 9 - 1) + EXIT.whi2_e ; $001D 243 EXIT 'whi2_e' d3fe 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $001E 252 CUE '1_plant' d3ff 0b07 DECLE @@crat1 + ( 8 - 1) ; $001F 253 CRAT1 d400 0401 DECLE @@rock2 + ( 2 - 1) ; $0020 261 ROCK2 d401 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0021 263 CUE '1_plant' d402 0b00 DECLE @@crat1 + ( 1 - 1) ; $0022 264 CRAT1 d403 1d01 DECLE @@caut1 + ( 2 - 1) ; $0023 265 CAUTION 1 d404 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $0024 267 LEVEL 'H' 0xd405 @@ckpt_0i: d405 1910 DECLE @@blank + ( 17 - 1) ; $0025 268 BLANK d406 be0e DECLE @@cue + ( 15 - 1) + CUE.3_blu2_b ; $0026 285 CUE '3_blu2_b' d407 9400 DECLE @@cue + ( 1 - 1) + CUE.2_pink_a ; $0027 300 CUE '2_pink_a' d408 0e08 DECLE @@crat3 + ( 9 - 1) ; $0028 301 CRAT3 d409 9802 DECLE @@cue + ( 3 - 1) + CUE.1_pink_b ; $0029 310 CUE '1_pink_b' d40a 101b DECLE @@crat2 + ( 28 - 1) ; $002A 313 CRAT2 d40b 6b00 DECLE @@exit + ( 1 - 1) + EXIT.blu2_b ; $002B 341 EXIT 'blu2_b' d40c 0401 DECLE @@rock2 + ( 2 - 1) ; $002C 342 ROCK2 d40d 0e0a DECLE @@crat3 + ( 11 - 1) ; $002D 344 CRAT3 d40e 1404 DECLE @@crat4 + ( 5 - 1) ; $002E 355 CRAT4 d40f 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $002F 360 LEVEL 'I' 0xd410 @@ckpt_0j: d410 1902 DECLE @@blank + ( 3 - 1) ; $0030 361 BLANK d411 ce01 DECLE @@cue + ( 2 - 1) + CUE.2_whit_b ; $0031 364 CUE '2_whit_b' d412 e002 DECLE @@cue + ( 3 - 1) + CUE.2_whi2_c ; $0032 366 CUE '2_whi2_c' d413 6100 DECLE @@exit + ( 1 - 1) + EXIT.pink_a ; $0033 369 EXIT 'pink_a' d414 6707 DECLE @@exit + ( 8 - 1) + EXIT.pink_b ; $0034 370 EXIT 'pink_b' d415 1009 DECLE @@crat2 + ( 10 - 1) ; $0035 378 CRAT2 d416 0409 DECLE @@rock2 + ( 10 - 1) ; $0036 388 ROCK2 d417 6903 DECLE @@exit + ( 4 - 1) + EXIT.whit_b ; $0037 398 EXIT 'whit_b' d418 7203 DECLE @@exit + ( 4 - 1) + EXIT.whi2_c ; $0038 402 EXIT 'whi2_c' d419 1009 DECLE @@crat2 + ( 10 - 1) ; $0039 406 CRAT2 d41a 0402 DECLE @@rock2 + ( 3 - 1) ; $003A 416 ROCK2 d41b 0401 DECLE @@rock2 + ( 2 - 1) ; $003B 419 ROCK2 d41c 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $003C 421 CUE '1_plant' d41d 0b07 DECLE @@crat1 + ( 8 - 1) ; $003D 422 CRAT1 d41e 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $003E 430 CUE '1_plant' d41f 0b07 DECLE @@crat1 + ( 8 - 1) ; $003F 431 CRAT1 d420 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0040 439 CUE '1_plant' d421 0b07 DECLE @@crat1 + ( 8 - 1) ; $0041 440 CRAT1 d422 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0042 448 CUE '1_plant' d423 0b01 DECLE @@crat1 + ( 2 - 1) ; $0043 449 CRAT1 d424 0401 DECLE @@rock2 + ( 2 - 1) ; $0044 451 ROCK2 d425 4900 DECLE @@level + ( 1 - 1) + ( 41 SHL 8) ; $0045 453 LEVEL 'p' d426 1900 DECLE @@blank + ( 1 - 1) ; $0046 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 28 ;; TOTAL OBJECTS 43 ;; TOTAL WORDS 71 ;; ======================================================================== ;; d427 0000 DECLE 0 ENDP 0xd428 MARS_B PROC INCLUDE "genasm/mab_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd428 @@ckpt_0a: d428 1915 DECLE @@blank + ( 22 - 1) ; $0000 0 BLANK d429 0e0b DECLE @@crat3 + ( 12 - 1) ; $0001 22 CRAT3 d42a 1008 DECLE @@crat2 + ( 9 - 1) ; $0002 34 CRAT2 d42b 0b0b DECLE @@crat1 + ( 12 - 1) ; $0003 43 CRAT1 d42c 0406 DECLE @@rock2 + ( 7 - 1) ; $0004 55 ROCK2 d42d 0b07 DECLE @@crat1 + ( 8 - 1) ; $0005 62 CRAT1 d42e 0105 DECLE @@rock1 + ( 6 - 1) ; $0006 70 ROCK1 d42f 0103 DECLE @@rock1 + ( 4 - 1) ; $0007 76 ROCK1 d430 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $0008 80 LEVEL 'A' 0xd431 @@ckpt_0b: d431 1903 DECLE @@blank + ( 4 - 1) ; $0009 81 BLANK d432 1d09 DECLE @@caut1 + ( 10 - 1) ; $000A 85 CAUTION 1 d433 a322 DECLE @@cue + ( 35 - 1) + CUE.1_pin2_a ; $000B 95 CUE '1_pin2_a' d434 a213 DECLE @@cue + ( 20 - 1) + CUE.2_pin2_a ; $000C 130 CUE '2_pin2_a' d435 6415 DECLE @@exit + ( 22 - 1) + EXIT.pin2_a ; $000D 150 EXIT 'pin2_a' d436 6400 DECLE @@exit + ( 1 - 1) + EXIT.pin2_a ; $000E 172 EXIT 'pin2_a' d437 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $000F 173 LEVEL 'B' 0xd438 @@ckpt_0c: d438 1905 DECLE @@blank + ( 6 - 1) ; $0010 174 BLANK d439 0404 DECLE @@rock2 + ( 5 - 1) ; $0011 180 ROCK2 d43a 1f12 DECLE @@caut3 + ( 19 - 1) ; $0012 185 CAUTION 3 d43b e90f DECLE @@cue + ( 16 - 1) + CUE.minelyr2 ; $0013 204 CUE 'minelyr2' d43c 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0014 220 EXIT 'flexit' d43d 7f0d DECLE @@exit + ( 14 - 1) + EXIT.flexit ; $0015 225 EXIT 'flexit' d43e 7f0a DECLE @@exit + ( 11 - 1) + EXIT.flexit ; $0016 239 EXIT 'flexit' d43f 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0017 250 EXIT 'flexit' d440 7f09 DECLE @@exit + ( 10 - 1) + EXIT.flexit ; $0018 255 EXIT 'flexit' d441 0701 DECLE @@rock3 + ( 2 - 1) ; $0019 265 ROCK3 d442 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $001A 267 LEVEL 'C' 0xd443 @@ckpt_0d: d443 1909 DECLE @@blank + ( 10 - 1) ; $001B 268 BLANK d444 1d09 DECLE @@caut1 + ( 10 - 1) ; $001C 278 CAUTION 1 d445 c310 DECLE @@cue + ( 17 - 1) + CUE.1_blu2_c ; $001D 288 CUE '1_blu2_c' d446 bf0e DECLE @@cue + ( 15 - 1) + CUE.2_blu2_b ; $001E 305 CUE '2_blu2_b' d447 7104 DECLE @@exit + ( 5 - 1) + EXIT.blu2_c ; $001F 320 EXIT 'blu2_c' d448 bd09 DECLE @@cue + ( 10 - 1) + CUE.1_blu2_a ; $0020 325 CUE '1_blu2_a' d449 6b09 DECLE @@exit + ( 10 - 1) + EXIT.blu2_b ; $0021 335 EXIT 'blu2_b' d44a c50c DECLE @@cue + ( 13 - 1) + CUE.2_blu2_d ; $0022 345 CUE '2_blu2_d' d44b 6500 DECLE @@exit + ( 1 - 1) + EXIT.blu2_a ; $0023 358 EXIT 'blu2_a' d44c 7700 DECLE @@exit + ( 1 - 1) + EXIT.blu2_d ; $0024 359 EXIT 'blu2_d' d44d 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $0025 360 LEVEL 'D' 0xd44e @@ckpt_0e: d44e 1901 DECLE @@blank + ( 2 - 1) ; $0026 361 BLANK d44f d80a DECLE @@cue + ( 11 - 1) + CUE.1_whit_e ; $0027 363 CUE '1_whit_e' d450 0b05 DECLE @@crat1 + ( 6 - 1) ; $0028 374 CRAT1 d451 cb1d DECLE @@cue + ( 30 - 1) + CUE.2_whit_a ; $0029 380 CUE '2_whit_a' d452 0b1a DECLE @@crat1 + ( 27 - 1) ; $002A 410 CRAT1 d453 0b0f DECLE @@crat1 + ( 16 - 1) ; $002B 437 CRAT1 d454 4405 DECLE @@level + ( 6 - 1) + ( 36 SHL 8) ; $002C 453 LEVEL 'k' d455 6300 DECLE @@exit + ( 1 - 1) + EXIT.whit_a ; $002D 459 EXIT 'whit_a' d456 7b00 DECLE @@exit + ( 1 - 1) + EXIT.whit_e ; $002E 460 EXIT 'whit_e' d457 1900 DECLE @@blank + ( 1 - 1) ; $002F 461 BLANK ; 462 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 22 ;; TOTAL OBJECTS 26 ;; TOTAL WORDS 48 ;; ======================================================================== ;; INCLUDE "genasm/mab_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd458 @@ckpt_0f: d458 1909 DECLE @@blank + ( 10 - 1) ; $0000 0 BLANK d459 1d04 DECLE @@caut1 + ( 5 - 1) ; $0001 10 CAUTION 1 d45a ac09 DECLE @@cue + ( 10 - 1) + CUE.2_pin2_e ; $0002 15 CUE '2_pin2_e' d45b 0b0e DECLE @@crat1 + ( 15 - 1) ; $0003 25 CRAT1 d45c c80e DECLE @@cue + ( 15 - 1) + CUE.2_blu2_e ; $0004 40 CUE '2_blu2_e' d45d 9809 DECLE @@cue + ( 10 - 1) + CUE.1_pink_b ; $0005 55 CUE '1_pink_b' d45e 7c09 DECLE @@exit + ( 10 - 1) + EXIT.pin2_e ; $0006 65 EXIT 'pin2_e' d45f 0103 DECLE @@rock1 + ( 4 - 1) ; $0007 75 ROCK1 d460 7d00 DECLE @@exit + ( 1 - 1) + EXIT.blu2_e ; $0008 79 EXIT 'blu2_e' d461 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $0009 80 LEVEL 'F' 0xd462 @@ckpt_0g: d462 1906 DECLE @@blank + ( 7 - 1) ; $000A 81 BLANK d463 0e07 DECLE @@crat3 + ( 8 - 1) ; $000B 88 CRAT3 d464 1001 DECLE @@crat2 + ( 2 - 1) ; $000C 96 CRAT2 d465 6700 DECLE @@exit + ( 1 - 1) + EXIT.pink_b ; $000D 98 EXIT 'pink_b' d466 0105 DECLE @@rock1 + ( 6 - 1) ; $000E 99 ROCK1 d467 1410 DECLE @@crat4 + ( 17 - 1) ; $000F 105 CRAT4 d468 070a DECLE @@rock3 + ( 11 - 1) ; $0010 122 ROCK3 d469 0409 DECLE @@rock2 + ( 10 - 1) ; $0011 133 ROCK2 d46a 0107 DECLE @@rock1 + ( 8 - 1) ; $0012 143 ROCK1 d46b 0b04 DECLE @@crat1 + ( 5 - 1) ; $0013 151 CRAT1 d46c 0b07 DECLE @@crat1 + ( 8 - 1) ; $0014 156 CRAT1 d46d 0b08 DECLE @@crat1 + ( 9 - 1) ; $0015 164 CRAT1 d46e 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $0016 173 LEVEL 'G' 0xd46f @@ckpt_0h: d46f 1905 DECLE @@blank + ( 6 - 1) ; $0017 174 BLANK d470 1d09 DECLE @@caut1 + ( 10 - 1) ; $0018 180 CAUTION 1 d471 af02 DECLE @@cue + ( 3 - 1) + CUE.1_blue_a ; $0019 190 CUE '1_blue_a' d472 0701 DECLE @@rock3 + ( 2 - 1) ; $001A 193 ROCK3 d473 a704 DECLE @@cue + ( 5 - 1) + CUE.2_pin2_c ; $001B 195 CUE '2_pin2_c' d474 040b DECLE @@rock2 + ( 12 - 1) ; $001C 200 ROCK2 d475 0412 DECLE @@rock2 + ( 19 - 1) ; $001D 212 ROCK2 d476 0403 DECLE @@rock2 + ( 4 - 1) ; $001E 231 ROCK2 d477 b717 DECLE @@cue + ( 24 - 1) + CUE.2_blue_d ; $001F 235 CUE '2_blue_d' d478 1d00 DECLE @@caut1 + ( 1 - 1) ; $0020 259 CAUTION 1 d479 7002 DECLE @@exit + ( 3 - 1) + EXIT.pin2_c ; $0021 260 EXIT 'pin2_c' d47a 6201 DECLE @@exit + ( 2 - 1) + EXIT.blue_a ; $0022 263 EXIT 'blue_a' d47b 7401 DECLE @@exit + ( 2 - 1) + EXIT.blue_d ; $0023 265 EXIT 'blue_d' d47c 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $0024 267 LEVEL 'H' 0xd47d @@ckpt_0i: d47d 1900 DECLE @@blank + ( 1 - 1) ; $0025 268 BLANK d47e dd28 DECLE @@cue + ( 41 - 1) + CUE.2_whi2_b ; $0026 269 CUE '2_whi2_b' d47f 9416 DECLE @@cue + ( 23 - 1) + CUE.2_pink_a ; $0027 310 CUE '2_pink_a' d480 6c10 DECLE @@exit + ( 17 - 1) + EXIT.whi2_b ; $0028 333 EXIT 'whi2_b' d481 8e06 DECLE @@cue + ( 7 - 1) + CUE.1_turret ; $0029 350 CUE '1_turret' d482 d400 DECLE @@cue + ( 1 - 1) + CUE.2_whit_d ; $002A 357 CUE '2_whit_d' d483 6101 DECLE @@exit + ( 2 - 1) + EXIT.pink_a ; $002B 358 EXIT 'pink_a' d484 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $002C 360 LEVEL 'I' 0xd485 @@ckpt_0j: d485 190f DECLE @@blank + ( 16 - 1) ; $002D 361 BLANK d486 ba0f DECLE @@cue + ( 16 - 1) + CUE.2_blue_e ; $002E 377 CUE '2_blue_e' d487 140a DECLE @@crat4 + ( 11 - 1) ; $002F 393 CRAT4 d488 7504 DECLE @@exit + ( 5 - 1) + EXIT.whit_d ; $0030 404 EXIT 'whit_d' d489 8e00 DECLE @@cue + ( 1 - 1) + CUE.1_turret ; $0031 409 CUE '1_turret' d48a 7a08 DECLE @@exit + ( 9 - 1) + EXIT.blue_e ; $0032 410 EXIT 'blue_e' d48b 0e08 DECLE @@crat3 + ( 9 - 1) ; $0033 419 CRAT3 d48c 9d01 DECLE @@cue + ( 2 - 1) + CUE.1_pink_d ; $0034 428 CUE '1_pink_d' d48d 0107 DECLE @@rock1 + ( 8 - 1) ; $0035 430 ROCK1 d48e 0705 DECLE @@rock3 + ( 6 - 1) ; $0036 438 ROCK3 d48f 0408 DECLE @@rock2 + ( 9 - 1) ; $0037 444 ROCK2 d490 4902 DECLE @@level + ( 3 - 1) + ( 41 SHL 8) ; $0038 453 LEVEL 'p' d491 7300 DECLE @@exit + ( 1 - 1) + EXIT.pink_d ; $0039 456 EXIT 'pink_d' d492 1900 DECLE @@blank + ( 1 - 1) ; $003A 457 BLANK ; 458 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 24 ;; TOTAL OBJECTS 35 ;; TOTAL WORDS 59 ;; ======================================================================== ;; d493 0000 DECLE 0 ENDP 0xd494 MARS_C PROC INCLUDE "genasm/mac_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd494 @@ckpt_0a: d494 190e DECLE @@blank + ( 15 - 1) ; $0000 0 BLANK d495 9504 DECLE @@cue + ( 5 - 1) + CUE.1_pink_a ; $0001 15 CUE '1_pink_a' d496 bd09 DECLE @@cue + ( 10 - 1) + CUE.1_blu2_a ; $0002 20 CUE '1_blu2_a' d497 0409 DECLE @@rock2 + ( 10 - 1) ; $0003 30 ROCK2 d498 a50e DECLE @@cue + ( 15 - 1) + CUE.1_pin2_b ; $0004 40 CUE '1_pin2_b' d499 b10b DECLE @@cue + ( 12 - 1) + CUE.2_blue_b ; $0005 55 CUE '2_blue_b' d49a 6108 DECLE @@exit + ( 9 - 1) + EXIT.pink_a ; $0006 67 EXIT 'pink_a' d49b 6503 DECLE @@exit + ( 4 - 1) + EXIT.blu2_a ; $0007 76 EXIT 'blu2_a' d49c 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $0008 80 LEVEL 'A' 0xd49d @@ckpt_0b: d49d 1906 DECLE @@blank + ( 7 - 1) ; $0009 81 BLANK d49e 1006 DECLE @@crat2 + ( 7 - 1) ; $000A 88 CRAT2 d49f 9b03 DECLE @@cue + ( 4 - 1) + CUE.1_pink_c ; $000B 95 CUE '1_pink_c' d4a0 0409 DECLE @@rock2 + ( 10 - 1) ; $000C 99 ROCK2 d4a1 8e09 DECLE @@cue + ( 10 - 1) + CUE.1_turret ; $000D 109 CUE '1_turret' d4a2 010c DECLE @@rock1 + ( 13 - 1) ; $000E 119 ROCK1 d4a3 9206 DECLE @@cue + ( 7 - 1) + CUE.1_bould ; $000F 132 CUE '1_bould' d4a4 9200 DECLE @@cue + ( 1 - 1) + CUE.1_bould ; $0010 139 CUE '1_bould' d4a5 ab07 DECLE @@cue + ( 8 - 1) + CUE.1_pin2_d ; $0011 140 CUE '1_pin2_d' d4a6 9206 DECLE @@cue + ( 7 - 1) + CUE.1_bould ; $0012 148 CUE '1_bould' d4a7 9207 DECLE @@cue + ( 8 - 1) + CUE.1_bould ; $0013 155 CUE '1_bould' d4a8 9105 DECLE @@cue + ( 6 - 1) + CUE.2_bould ; $0014 163 CUE '2_bould' d4a9 8f03 DECLE @@cue + ( 4 - 1) + CUE.2_boulc ; $0015 169 CUE '2_boulc' d4aa 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $0016 173 LEVEL 'B' 0xd4ab @@ckpt_0c: d4ab 1901 DECLE @@blank + ( 2 - 1) ; $0017 174 BLANK d4ac 9203 DECLE @@cue + ( 4 - 1) + CUE.1_bould ; $0018 176 CUE '1_bould' d4ad 9101 DECLE @@cue + ( 2 - 1) + CUE.2_bould ; $0019 180 CUE '2_bould' d4ae b507 DECLE @@cue + ( 8 - 1) + CUE.1_blue_c ; $001A 182 CUE '1_blue_c' d4af 0107 DECLE @@rock1 + ( 8 - 1) ; $001B 190 ROCK1 d4b0 0102 DECLE @@rock1 + ( 3 - 1) ; $001C 198 ROCK1 d4b1 0101 DECLE @@rock1 + ( 2 - 1) ; $001D 201 ROCK1 d4b2 b806 DECLE @@cue + ( 7 - 1) + CUE.1_blue_d ; $001E 203 CUE '1_blue_d' d4b3 1007 DECLE @@crat2 + ( 8 - 1) ; $001F 210 CRAT2 d4b4 0b15 DECLE @@crat1 + ( 22 - 1) ; $0020 218 CRAT1 d4b5 8e02 DECLE @@cue + ( 3 - 1) + CUE.1_turret ; $0021 240 CUE '1_turret' d4b6 0408 DECLE @@rock2 + ( 9 - 1) ; $0022 243 ROCK2 d4b7 8e07 DECLE @@cue + ( 8 - 1) + CUE.1_turret ; $0023 252 CUE '1_turret' d4b8 8e02 DECLE @@cue + ( 3 - 1) + CUE.1_turret ; $0024 260 CUE '1_turret' d4b9 0101 DECLE @@rock1 + ( 2 - 1) ; $0025 263 ROCK1 d4ba 0101 DECLE @@rock1 + ( 2 - 1) ; $0026 265 ROCK1 d4bb 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $0027 267 LEVEL 'C' 0xd4bc @@ckpt_0d: d4bc 1905 DECLE @@blank + ( 6 - 1) ; $0028 268 BLANK d4bd 0405 DECLE @@rock2 + ( 6 - 1) ; $0029 274 ROCK2 d4be 0102 DECLE @@rock1 + ( 3 - 1) ; $002A 280 ROCK1 d4bf 040d DECLE @@rock2 + ( 14 - 1) ; $002B 283 ROCK2 d4c0 8e08 DECLE @@cue + ( 9 - 1) + CUE.1_turret ; $002C 297 CUE '1_turret' d4c1 070c DECLE @@rock3 + ( 13 - 1) ; $002D 306 ROCK3 d4c2 9106 DECLE @@cue + ( 7 - 1) + CUE.2_bould ; $002E 319 CUE '2_bould' d4c3 0b0a DECLE @@crat1 + ( 11 - 1) ; $002F 326 CRAT1 d4c4 1009 DECLE @@crat2 + ( 10 - 1) ; $0030 337 CRAT2 d4c5 100a DECLE @@crat2 + ( 11 - 1) ; $0031 347 CRAT2 d4c6 1001 DECLE @@crat2 + ( 2 - 1) ; $0032 358 CRAT2 d4c7 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $0033 360 LEVEL 'D' 0xd4c8 @@ckpt_0e: d4c8 1905 DECLE @@blank + ( 6 - 1) ; $0034 361 BLANK d4c9 8d00 DECLE @@cue + ( 1 - 1) + CUE.1_plbig ; $0035 367 CUE '1_plbig' d4ca 1001 DECLE @@crat2 + ( 2 - 1) ; $0036 368 CRAT2 d4cb bb09 DECLE @@cue + ( 10 - 1) + CUE.1_blue_e ; $0037 370 CUE '1_blue_e' d4cc a013 DECLE @@cue + ( 20 - 1) + CUE.1_pink_e ; $0038 380 CUE '1_pink_e' d4cd c00b DECLE @@cue + ( 12 - 1) + CUE.1_blu2_b ; $0039 400 CUE '1_blu2_b' d4ce 1002 DECLE @@crat2 + ( 3 - 1) ; $003A 412 CRAT2 d4cf a808 DECLE @@cue + ( 9 - 1) + CUE.1_pin2_c ; $003B 415 CUE '1_pin2_c' d4d0 1405 DECLE @@crat4 + ( 6 - 1) ; $003C 424 CRAT4 d4d1 af09 DECLE @@cue + ( 10 - 1) + CUE.1_blue_a ; $003D 430 CUE '1_blue_a' d4d2 1008 DECLE @@crat2 + ( 9 - 1) ; $003E 440 CRAT2 d4d3 0101 DECLE @@rock1 + ( 2 - 1) ; $003F 449 ROCK1 d4d4 0101 DECLE @@rock1 + ( 2 - 1) ; $0040 451 ROCK1 d4d5 4402 DECLE @@level + ( 3 - 1) + ( 36 SHL 8) ; $0041 453 LEVEL 'k' d4d6 6200 DECLE @@exit + ( 1 - 1) + EXIT.blue_a ; $0042 456 EXIT 'blue_a' d4d7 1900 DECLE @@blank + ( 1 - 1) ; $0043 457 BLANK ; 458 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 31 ;; TOTAL OBJECTS 37 ;; TOTAL WORDS 68 ;; ======================================================================== ;; INCLUDE "genasm/mac_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd4d8 @@ckpt_0f: d4d8 1909 DECLE @@blank + ( 10 - 1) ; $0000 0 BLANK d4d9 0703 DECLE @@rock3 + ( 4 - 1) ; $0001 10 ROCK3 d4da 1406 DECLE @@crat4 + ( 7 - 1) ; $0002 14 CRAT4 d4db 0107 DECLE @@rock1 + ( 8 - 1) ; $0003 21 ROCK1 d4dc e40a DECLE @@cue + ( 11 - 1) + CUE.1_whi2_d ; $0004 29 CUE '1_whi2_d' d4dd 100b DECLE @@crat2 + ( 12 - 1) ; $0005 40 CRAT2 d4de cf07 DECLE @@cue + ( 8 - 1) + CUE.1_whit_b ; $0006 52 CUE '1_whit_b' d4df 0b0e DECLE @@crat1 + ( 15 - 1) ; $0007 60 CRAT1 d4e0 0b01 DECLE @@crat1 + ( 2 - 1) ; $0008 75 CRAT1 d4e1 7800 DECLE @@exit + ( 1 - 1) + EXIT.whi2_d ; $0009 77 EXIT 'whi2_d' d4e2 6901 DECLE @@exit + ( 2 - 1) + EXIT.whit_b ; $000A 78 EXIT 'whit_b' d4e3 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $000B 80 LEVEL 'F' 0xd4e4 @@ckpt_0g: d4e4 1905 DECLE @@blank + ( 6 - 1) ; $000C 81 BLANK d4e5 8104 DECLE @@cue + ( 5 - 1) + CUE.1_mine_a ; $000D 87 CUE '1_mine_a' d4e6 1f03 DECLE @@caut3 + ( 4 - 1) ; $000E 92 CAUTION 3 d4e7 8302 DECLE @@cue + ( 3 - 1) + CUE.1_mine_b ; $000F 96 CUE '1_mine_b' d4e8 eb01 DECLE @@cue + ( 2 - 1) + CUE.minelyr5 ; $0010 99 CUE 'minelyr5' d4e9 830b DECLE @@cue + ( 12 - 1) + CUE.1_mine_b ; $0011 101 CUE '1_mine_b' d4ea 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0012 113 EXIT 'flexit' d4eb 7f00 DECLE @@exit + ( 1 - 1) + EXIT.flexit ; $0013 118 EXIT 'flexit' d4ec 010c DECLE @@rock1 + ( 13 - 1) ; $0014 119 ROCK1 d4ed 7f07 DECLE @@exit + ( 8 - 1) + EXIT.flexit ; $0015 132 EXIT 'flexit' d4ee 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0016 140 EXIT 'flexit' d4ef 7f09 DECLE @@exit + ( 10 - 1) + EXIT.flexit ; $0017 145 EXIT 'flexit' d4f0 7f09 DECLE @@exit + ( 10 - 1) + EXIT.flexit ; $0018 155 EXIT 'flexit' d4f1 7f06 DECLE @@exit + ( 7 - 1) + EXIT.flexit ; $0019 165 EXIT 'flexit' d4f2 7f00 DECLE @@exit + ( 1 - 1) + EXIT.flexit ; $001A 172 EXIT 'flexit' d4f3 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $001B 173 LEVEL 'G' 0xd4f4 @@ckpt_0h: d4f4 1901 DECLE @@blank + ( 2 - 1) ; $001C 174 BLANK d4f5 8305 DECLE @@cue + ( 6 - 1) + CUE.1_mine_b ; $001D 176 CUE '1_mine_b' d4f6 8102 DECLE @@cue + ( 3 - 1) + CUE.1_mine_a ; $001E 182 CUE '1_mine_a' d4f7 1d07 DECLE @@caut1 + ( 8 - 1) ; $001F 185 CAUTION 1 d4f8 8101 DECLE @@cue + ( 2 - 1) + CUE.1_mine_a ; $0020 193 CUE '1_mine_a' d4f9 ae0e DECLE @@cue + ( 15 - 1) + CUE.2_blue_a ; $0021 195 CUE '2_blue_a' d4fa d502 DECLE @@cue + ( 3 - 1) + CUE.1_whit_d ; $0022 210 CUE '1_whit_d' d4fb 1009 DECLE @@crat2 + ( 10 - 1) ; $0023 213 CRAT2 d4fc d109 DECLE @@cue + ( 10 - 1) + CUE.2_whit_c ; $0024 223 CUE '2_whit_c' d4fd 0b05 DECLE @@crat1 + ( 6 - 1) ; $0025 233 CRAT1 d4fe aa0c DECLE @@cue + ( 13 - 1) + CUE.2_pin2_d ; $0026 239 CUE '2_pin2_d' d4ff 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0027 252 CUE '1_plant' d500 0b02 DECLE @@crat1 + ( 3 - 1) ; $0028 253 CRAT1 d501 7501 DECLE @@exit + ( 2 - 1) + EXIT.whit_d ; $0029 256 EXIT 'whit_d' d502 6f02 DECLE @@exit + ( 3 - 1) + EXIT.whit_c ; $002A 258 EXIT 'whit_c' d503 0402 DECLE @@rock2 + ( 3 - 1) ; $002B 261 ROCK2 d504 6201 DECLE @@exit + ( 2 - 1) + EXIT.blue_a ; $002C 264 EXIT 'blue_a' d505 7600 DECLE @@exit + ( 1 - 1) + EXIT.pin2_d ; $002D 266 EXIT 'pin2_d' d506 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $002E 267 LEVEL 'H' 0xd507 @@ckpt_0i: d507 1904 DECLE @@blank + ( 5 - 1) ; $002F 268 BLANK d508 040a DECLE @@rock2 + ( 11 - 1) ; $0030 273 ROCK2 d509 0702 DECLE @@rock3 + ( 3 - 1) ; $0031 284 ROCK3 d50a 9f03 DECLE @@cue + ( 4 - 1) + CUE.2_pink_e ; $0032 287 CUE '2_pink_e' d50b 0105 DECLE @@rock1 + ( 6 - 1) ; $0033 291 ROCK1 d50c 0707 DECLE @@rock3 + ( 8 - 1) ; $0034 297 ROCK3 d50d b304 DECLE @@cue + ( 5 - 1) + CUE.3_blue_c ; $0035 305 CUE '3_blue_c' d50e 0409 DECLE @@rock2 + ( 10 - 1) ; $0036 310 ROCK2 d50f a204 DECLE @@cue + ( 5 - 1) + CUE.2_pin2_a ; $0037 320 CUE '2_pin2_a' d510 040e DECLE @@rock2 + ( 15 - 1) ; $0038 325 ROCK2 d511 8e06 DECLE @@cue + ( 7 - 1) + CUE.1_turret ; $0039 340 CUE '1_turret' d512 8e02 DECLE @@cue + ( 3 - 1) + CUE.1_turret ; $003A 347 CUE '1_turret' d513 7905 DECLE @@exit + ( 6 - 1) + EXIT.pink_e ; $003B 350 EXIT 'pink_e' d514 6401 DECLE @@exit + ( 2 - 1) + EXIT.pin2_a ; $003C 356 EXIT 'pin2_a' d515 6e00 DECLE @@exit + ( 1 - 1) + EXIT.blue_c ; $003D 358 EXIT 'blue_c' d516 8e00 DECLE @@cue + ( 1 - 1) + CUE.1_turret ; $003E 359 CUE '1_turret' d517 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $003F 360 LEVEL 'I' 0xd518 @@ckpt_0j: d518 1908 DECLE @@blank + ( 9 - 1) ; $0040 361 BLANK d519 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $0041 370 CUE '1_turret' d51a 0e0d DECLE @@crat3 + ( 14 - 1) ; $0042 372 CRAT3 d51b 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0043 386 CUE '1_plant' d51c 0b08 DECLE @@crat1 + ( 9 - 1) ; $0044 387 CRAT1 d51d d60c DECLE @@cue + ( 13 - 1) + CUE.3_whit_e ; $0045 396 CUE '3_whit_e' d51e 100e DECLE @@crat2 + ( 15 - 1) ; $0046 409 CRAT2 d51f 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0047 424 CUE '1_plant' d520 0b00 DECLE @@crat1 + ( 1 - 1) ; $0048 425 CRAT1 d521 d914 DECLE @@cue + ( 21 - 1) + CUE.3_whi2_a ; $0049 426 CUE '3_whi2_a' d522 1405 DECLE @@crat4 + ( 6 - 1) ; $004A 447 CRAT4 d523 4900 DECLE @@level + ( 1 - 1) + ( 41 SHL 8) ; $004B 453 LEVEL 'p' d524 7b04 DECLE @@exit + ( 5 - 1) + EXIT.whit_e ; $004C 454 EXIT 'whit_e' d525 6600 DECLE @@exit + ( 1 - 1) + EXIT.whi2_a ; $004D 459 EXIT 'whi2_a' d526 1900 DECLE @@blank + ( 1 - 1) ; $004E 460 BLANK ; 461 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 44 ;; TOTAL OBJECTS 35 ;; TOTAL WORDS 79 ;; ======================================================================== ;; d527 0000 DECLE 0 ENDP 0xd528 MERC_B PROC INCLUDE "genasm/hgb_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd528 @@ckpt_0a: d528 1909 DECLE @@blank + ( 10 - 1) ; $0000 0 BLANK d529 9d0b DECLE @@cue + ( 12 - 1) + CUE.1_pink_d ; $0001 10 CUE '1_pink_d' d52a 0b09 DECLE @@crat1 + ( 10 - 1) ; $0002 22 CRAT1 d52b c90d DECLE @@cue + ( 14 - 1) + CUE.1_blu2_e ; $0003 32 CUE '1_blu2_e' d52c 0b08 DECLE @@crat1 + ( 9 - 1) ; $0004 46 CRAT1 d52d 0711 DECLE @@rock3 + ( 18 - 1) ; $0005 55 ROCK3 d52e 0104 DECLE @@rock1 + ( 5 - 1) ; $0006 73 ROCK1 d52f 7300 DECLE @@exit + ( 1 - 1) + EXIT.pink_d ; $0007 78 EXIT 'pink_d' d530 7d00 DECLE @@exit + ( 1 - 1) + EXIT.blu2_e ; $0008 79 EXIT 'blu2_e' d531 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $0009 80 LEVEL 'A' 0xd532 @@ckpt_0b: d532 1900 DECLE @@blank + ( 1 - 1) ; $000A 81 BLANK d533 1d09 DECLE @@caut1 + ( 10 - 1) ; $000B 82 CAUTION 1 d534 d107 DECLE @@cue + ( 8 - 1) + CUE.2_whit_c ; $000C 92 CUE '2_whit_c' d535 b22c DECLE @@cue + ( 45 - 1) + CUE.1_blue_b ; $000D 100 CUE '1_blue_b' d536 010e DECLE @@rock1 + ( 15 - 1) ; $000E 145 ROCK1 d537 6f00 DECLE @@exit + ( 1 - 1) + EXIT.whit_c ; $000F 160 EXIT 'whit_c' d538 0108 DECLE @@rock1 + ( 9 - 1) ; $0010 161 ROCK1 d539 6802 DECLE @@exit + ( 3 - 1) + EXIT.blue_b ; $0011 170 EXIT 'blue_b' d53a 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $0012 173 LEVEL 'B' 0xd53b @@ckpt_0c: d53b 1901 DECLE @@blank + ( 2 - 1) ; $0013 174 BLANK d53c 9504 DECLE @@cue + ( 5 - 1) + CUE.1_pink_a ; $0014 176 CUE '1_pink_a' d53d 0401 DECLE @@rock2 + ( 2 - 1) ; $0015 181 ROCK2 d53e 9826 DECLE @@cue + ( 39 - 1) + CUE.1_pink_b ; $0016 183 CUE '1_pink_b' d53f 010c DECLE @@rock1 + ( 13 - 1) ; $0017 222 ROCK1 d540 9b0e DECLE @@cue + ( 15 - 1) + CUE.1_pink_c ; $0018 235 CUE '1_pink_c' d541 0709 DECLE @@rock3 + ( 10 - 1) ; $0019 250 ROCK3 d542 6101 DECLE @@exit + ( 2 - 1) + EXIT.pink_a ; $001A 260 EXIT 'pink_a' d543 6701 DECLE @@exit + ( 2 - 1) + EXIT.pink_b ; $001B 262 EXIT 'pink_b' d544 6d02 DECLE @@exit + ( 3 - 1) + EXIT.pink_c ; $001C 264 EXIT 'pink_c' d545 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $001D 267 LEVEL 'C' 0xd546 @@ckpt_0d: d546 190e DECLE @@blank + ( 15 - 1) ; $001E 268 BLANK d547 bc01 DECLE @@cue + ( 2 - 1) + CUE.2_blu2_a ; $001F 283 CUE '2_blu2_a' d548 af02 DECLE @@cue + ( 3 - 1) + CUE.1_blue_a ; $0020 285 CUE '1_blue_a' d549 0b09 DECLE @@crat1 + ( 10 - 1) ; $0021 288 CRAT1 d54a 1009 DECLE @@crat2 + ( 10 - 1) ; $0022 298 CRAT2 d54b 0b17 DECLE @@crat1 + ( 24 - 1) ; $0023 308 CRAT1 d54c 0e07 DECLE @@crat3 + ( 8 - 1) ; $0024 332 CRAT3 d54d 1d09 DECLE @@caut1 + ( 10 - 1) ; $0025 340 CAUTION 1 d54e 6205 DECLE @@exit + ( 6 - 1) + EXIT.blue_a ; $0026 350 EXIT 'blue_a' d54f 6503 DECLE @@exit + ( 4 - 1) + EXIT.blu2_a ; $0027 356 EXIT 'blu2_a' d550 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $0028 360 LEVEL 'D' 0xd551 @@ckpt_0e: d551 1901 DECLE @@blank + ( 2 - 1) ; $0029 361 BLANK d552 cc10 DECLE @@cue + ( 17 - 1) + CUE.1_whit_a ; $002A 363 CUE '1_whit_a' d553 a010 DECLE @@cue + ( 17 - 1) + CUE.1_pink_e ; $002B 380 CUE '1_pink_e' d554 cf09 DECLE @@cue + ( 10 - 1) + CUE.1_whit_b ; $002C 397 CUE '1_whit_b' d555 ab01 DECLE @@cue + ( 2 - 1) + CUE.1_pin2_d ; $002D 407 CUE '1_pin2_d' d556 010f DECLE @@rock1 + ( 16 - 1) ; $002E 409 ROCK1 d557 6304 DECLE @@exit + ( 5 - 1) + EXIT.whit_a ; $002F 425 EXIT 'whit_a' d558 0100 DECLE @@rock1 + ( 1 - 1) ; $0030 430 ROCK1 d559 690c DECLE @@exit + ( 13 - 1) + EXIT.whit_b ; $0031 431 EXIT 'whit_b' d55a 7600 DECLE @@exit + ( 1 - 1) + EXIT.pin2_d ; $0032 444 EXIT 'pin2_d' d55b 0b04 DECLE @@crat1 + ( 5 - 1) ; $0033 445 CRAT1 d55c 7902 DECLE @@exit + ( 3 - 1) + EXIT.pink_e ; $0034 450 EXIT 'pink_e' d55d 4400 DECLE @@level + ( 1 - 1) + ( 36 SHL 8) ; $0035 453 LEVEL 'k' d55e 1900 DECLE @@blank + ( 1 - 1) ; $0036 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 26 ;; TOTAL OBJECTS 29 ;; TOTAL WORDS 55 ;; ======================================================================== ;; INCLUDE "genasm/hgb_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd55f @@ckpt_0f: d55f 1909 DECLE @@blank + ( 10 - 1) ; $0000 0 BLANK d560 fc01 DECLE @@cue + ( 2 - 1) + CUE.stal_i ; $0001 10 CUE 'stal_i' d561 fc02 DECLE @@cue + ( 3 - 1) + CUE.stal_i ; $0002 12 CUE 'stal_i' d562 fa04 DECLE @@cue + ( 5 - 1) + CUE.stal_g ; $0003 15 CUE 'stal_g' d563 f400 DECLE @@cue + ( 1 - 1) + CUE.stal_a ; $0004 20 CUE 'stal_a' d564 c300 DECLE @@cue + ( 1 - 1) + CUE.1_blu2_c ; $0005 21 CUE '1_blu2_c' d565 0b07 DECLE @@crat1 + ( 8 - 1) ; $0006 22 CRAT1 d566 fa03 DECLE @@cue + ( 4 - 1) + CUE.stal_g ; $0007 30 CUE 'stal_g' d567 0105 DECLE @@rock1 + ( 6 - 1) ; $0008 34 ROCK1 d568 0b01 DECLE @@crat1 + ( 2 - 1) ; $0009 40 CRAT1 d569 f502 DECLE @@cue + ( 3 - 1) + CUE.stal_b ; $000A 42 CUE 'stal_b' d56a f40a DECLE @@cue + ( 11 - 1) + CUE.stal_a ; $000B 45 CUE 'stal_a' d56b 9107 DECLE @@cue + ( 8 - 1) + CUE.2_bould ; $000C 56 CUE '2_bould' d56c 1008 DECLE @@crat2 + ( 9 - 1) ; $000D 64 CRAT2 d56d fb02 DECLE @@cue + ( 3 - 1) + CUE.stal_h ; $000E 73 CUE 'stal_h' d56e f500 DECLE @@cue + ( 1 - 1) + CUE.stal_b ; $000F 76 CUE 'stal_b' d56f 7100 DECLE @@exit + ( 1 - 1) + EXIT.blu2_c ; $0010 77 EXIT 'blu2_c' d570 f601 DECLE @@cue + ( 2 - 1) + CUE.stal_c ; $0011 78 CUE 'stal_c' d571 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $0012 80 LEVEL 'F' 0xd572 @@ckpt_0g: d572 1900 DECLE @@blank + ( 1 - 1) ; $0013 81 BLANK d573 0703 DECLE @@rock3 + ( 4 - 1) ; $0014 82 ROCK3 d574 0b03 DECLE @@crat1 + ( 4 - 1) ; $0015 86 CRAT1 d575 f503 DECLE @@cue + ( 4 - 1) + CUE.stal_b ; $0016 90 CUE 'stal_b' d576 fb05 DECLE @@cue + ( 6 - 1) + CUE.stal_h ; $0017 94 CUE 'stal_h' d577 af04 DECLE @@cue + ( 5 - 1) + CUE.1_blue_a ; $0018 100 CUE '1_blue_a' d578 fa04 DECLE @@cue + ( 5 - 1) + CUE.stal_g ; $0019 105 CUE 'stal_g' d579 fc01 DECLE @@cue + ( 2 - 1) + CUE.stal_i ; $001A 110 CUE 'stal_i' d57a f602 DECLE @@cue + ( 3 - 1) + CUE.stal_c ; $001B 112 CUE 'stal_c' d57b f502 DECLE @@cue + ( 3 - 1) + CUE.stal_b ; $001C 115 CUE 'stal_b' d57c 0701 DECLE @@rock3 + ( 2 - 1) ; $001D 118 ROCK3 d57d f403 DECLE @@cue + ( 4 - 1) + CUE.stal_a ; $001E 120 CUE 'stal_a' d57e fc03 DECLE @@cue + ( 4 - 1) + CUE.stal_i ; $001F 124 CUE 'stal_i' d57f fb0b DECLE @@cue + ( 12 - 1) + CUE.stal_h ; $0020 128 CUE 'stal_h' d580 6209 DECLE @@exit + ( 10 - 1) + EXIT.blue_a ; $0021 140 EXIT 'blue_a' d581 1000 DECLE @@crat2 + ( 1 - 1) ; $0022 150 CRAT2 d582 c303 DECLE @@cue + ( 4 - 1) + CUE.1_blu2_c ; $0023 151 CUE '1_blu2_c' d583 f509 DECLE @@cue + ( 10 - 1) + CUE.stal_b ; $0024 155 CUE 'stal_b' d584 7107 DECLE @@exit + ( 8 - 1) + EXIT.blu2_c ; $0025 165 EXIT 'blu2_c' d585 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $0026 173 LEVEL 'G' 0xd586 @@ckpt_0h: d586 1903 DECLE @@blank + ( 4 - 1) ; $0027 174 BLANK d587 0e06 DECLE @@crat3 + ( 7 - 1) ; $0028 178 CRAT3 d588 1008 DECLE @@crat2 + ( 9 - 1) ; $0029 185 CRAT2 d589 fc02 DECLE @@cue + ( 3 - 1) + CUE.stal_i ; $002A 194 CUE 'stal_i' d58a fb00 DECLE @@cue + ( 1 - 1) + CUE.stal_h ; $002B 197 CUE 'stal_h' d58b 1f09 DECLE @@caut3 + ( 10 - 1) ; $002C 198 CAUTION 3 d58c e702 DECLE @@cue + ( 3 - 1) + CUE.follower ; $002D 208 CUE 'follower' d58d 0b0d DECLE @@crat1 + ( 14 - 1) ; $002E 211 CRAT1 d58e fb01 DECLE @@cue + ( 2 - 1) + CUE.stal_h ; $002F 225 CUE 'stal_h' d58f fa00 DECLE @@cue + ( 1 - 1) + CUE.stal_g ; $0030 227 CUE 'stal_g' d590 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0031 228 EXIT 'flexit' d591 7f14 DECLE @@exit + ( 21 - 1) + EXIT.flexit ; $0032 233 EXIT 'flexit' d592 f500 DECLE @@cue + ( 1 - 1) + CUE.stal_b ; $0033 254 CUE 'stal_b' d593 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0034 255 EXIT 'flexit' d594 f403 DECLE @@cue + ( 4 - 1) + CUE.stal_a ; $0035 260 CUE 'stal_a' d595 f502 DECLE @@cue + ( 3 - 1) + CUE.stal_b ; $0036 264 CUE 'stal_b' d596 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $0037 267 LEVEL 'H' 0xd597 @@ckpt_0i: d597 1902 DECLE @@blank + ( 3 - 1) ; $0038 268 BLANK d598 a503 DECLE @@cue + ( 4 - 1) + CUE.1_pin2_b ; $0039 271 CUE '1_pin2_b' d599 9209 DECLE @@cue + ( 10 - 1) + CUE.1_bould ; $003A 275 CUE '1_bould' d59a 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $003B 285 CUE '1_bould' d59b f507 DECLE @@cue + ( 8 - 1) + CUE.stal_b ; $003C 287 CUE 'stal_b' d59c 9206 DECLE @@cue + ( 7 - 1) + CUE.1_bould ; $003D 295 CUE '1_bould' d59d 100c DECLE @@crat2 + ( 13 - 1) ; $003E 302 CRAT2 d59e 1d00 DECLE @@caut1 + ( 1 - 1) ; $003F 315 CAUTION 1 d59f 1007 DECLE @@crat2 + ( 8 - 1) ; $0040 316 CRAT2 d5a0 f900 DECLE @@cue + ( 1 - 1) + CUE.stal_f ; $0041 324 CUE 'stal_f' d5a1 ad04 DECLE @@cue + ( 5 - 1) + CUE.1_pin2_e ; $0042 325 CUE '1_pin2_e' d5a2 b805 DECLE @@cue + ( 6 - 1) + CUE.1_blue_d ; $0043 330 CUE '1_blue_d' d5a3 fc13 DECLE @@cue + ( 20 - 1) + CUE.stal_i ; $0044 336 CUE 'stal_i' d5a4 7400 DECLE @@exit + ( 1 - 1) + EXIT.blue_d ; $0045 356 EXIT 'blue_d' d5a5 6a00 DECLE @@exit + ( 1 - 1) + EXIT.pin2_b ; $0046 357 EXIT 'pin2_b' d5a6 7c00 DECLE @@exit + ( 1 - 1) + EXIT.pin2_e ; $0047 358 EXIT 'pin2_e' d5a7 f400 DECLE @@cue + ( 1 - 1) + CUE.stal_a ; $0048 359 CUE 'stal_a' d5a8 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $0049 360 LEVEL 'I' 0xd5a9 @@ckpt_0j: d5a9 1903 DECLE @@blank + ( 4 - 1) ; $004A 361 BLANK d5aa ad13 DECLE @@cue + ( 20 - 1) + CUE.1_pin2_e ; $004B 365 CUE '1_pin2_e' d5ab ab13 DECLE @@cue + ( 20 - 1) + CUE.1_pin2_d ; $004C 385 CUE '1_pin2_d' d5ac a809 DECLE @@cue + ( 10 - 1) + CUE.1_pin2_c ; $004D 405 CUE '1_pin2_c' d5ad 9804 DECLE @@cue + ( 5 - 1) + CUE.1_pink_b ; $004E 415 CUE '1_pink_b' d5ae 9501 DECLE @@cue + ( 2 - 1) + CUE.1_pink_a ; $004F 420 CUE '1_pink_a' d5af f402 DECLE @@cue + ( 3 - 1) + CUE.stal_a ; $0050 422 CUE 'stal_a' d5b0 1000 DECLE @@crat2 + ( 1 - 1) ; $0051 425 CRAT2 d5b1 f503 DECLE @@cue + ( 4 - 1) + CUE.stal_b ; $0052 426 CUE 'stal_b' d5b2 f403 DECLE @@cue + ( 4 - 1) + CUE.stal_a ; $0053 430 CUE 'stal_a' d5b3 f503 DECLE @@cue + ( 4 - 1) + CUE.stal_b ; $0054 434 CUE 'stal_b' d5b4 f901 DECLE @@cue + ( 2 - 1) + CUE.stal_f ; $0055 438 CUE 'stal_f' d5b5 fc03 DECLE @@cue + ( 4 - 1) + CUE.stal_i ; $0056 440 CUE 'stal_i' d5b6 6100 DECLE @@exit + ( 1 - 1) + EXIT.pink_a ; $0057 444 EXIT 'pink_a' d5b7 fb00 DECLE @@cue + ( 1 - 1) + CUE.stal_h ; $0058 445 CUE 'stal_h' d5b8 6701 DECLE @@exit + ( 2 - 1) + EXIT.pink_b ; $0059 446 EXIT 'pink_b' d5b9 7001 DECLE @@exit + ( 2 - 1) + EXIT.pin2_c ; $005A 448 EXIT 'pin2_c' d5ba 7600 DECLE @@exit + ( 1 - 1) + EXIT.pin2_d ; $005B 450 EXIT 'pin2_d' d5bb fb00 DECLE @@cue + ( 1 - 1) + CUE.stal_h ; $005C 451 CUE 'stal_h' d5bc 7c00 DECLE @@exit + ( 1 - 1) + EXIT.pin2_e ; $005D 452 EXIT 'pin2_e' d5bd 4900 DECLE @@level + ( 1 - 1) + ( 41 SHL 8) ; $005E 453 LEVEL 'p' d5be 1900 DECLE @@blank + ( 1 - 1) ; $005F 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 69 ;; TOTAL OBJECTS 27 ;; TOTAL WORDS 96 ;; ======================================================================== ;; d5bf 0000 DECLE 0 ENDP 0xd5c0 MERC_C PROC INCLUDE "genasm/hgc_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd5c0 @@ckpt_0a: d5c0 1924 DECLE @@blank + ( 37 - 1) ; $0000 0 BLANK d5c1 9601 DECLE @@cue + ( 2 - 1) + CUE.3_pink_b ; $0001 37 CUE '3_pink_b' d5c2 0406 DECLE @@rock2 + ( 7 - 1) ; $0002 39 ROCK2 d5c3 8e09 DECLE @@cue + ( 10 - 1) + CUE.1_turret ; $0003 46 CUE '1_turret' d5c4 8e08 DECLE @@cue + ( 9 - 1) + CUE.1_turret ; $0004 56 CUE '1_turret' d5c5 0708 DECLE @@rock3 + ( 9 - 1) ; $0005 65 ROCK3 d5c6 6700 DECLE @@exit + ( 1 - 1) + EXIT.pink_b ; $0006 74 EXIT 'pink_b' d5c7 1f01 DECLE @@caut3 + ( 2 - 1) ; $0007 75 CAUTION 3 d5c8 6102 DECLE @@exit + ( 3 - 1) + EXIT.pink_a ; $0008 77 EXIT 'pink_a' d5c9 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $0009 80 LEVEL 'A' 0xd5ca @@ckpt_0b: d5ca 1905 DECLE @@blank + ( 6 - 1) ; $000A 81 BLANK d5cb e703 DECLE @@cue + ( 4 - 1) + CUE.follower ; $000B 87 CUE 'follower' d5cc c000 DECLE @@cue + ( 1 - 1) + CUE.1_blu2_b ; $000C 91 CUE '1_blu2_b' d5cd b500 DECLE @@cue + ( 1 - 1) + CUE.1_blue_c ; $000D 92 CUE '1_blue_c' d5ce 7f09 DECLE @@exit + ( 10 - 1) + EXIT.flexit ; $000E 93 EXIT 'flexit' d5cf 7f08 DECLE @@exit + ( 9 - 1) + EXIT.flexit ; $000F 103 EXIT 'flexit' d5d0 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0010 112 EXIT 'flexit' d5d1 6e01 DECLE @@exit + ( 2 - 1) + EXIT.blue_c ; $0011 117 EXIT 'blue_c' d5d2 6b01 DECLE @@exit + ( 2 - 1) + EXIT.blu2_b ; $0012 119 EXIT 'blu2_b' d5d3 bd01 DECLE @@cue + ( 2 - 1) + CUE.1_blu2_a ; $0013 121 CUE '1_blu2_a' d5d4 1f07 DECLE @@caut3 + ( 8 - 1) ; $0014 123 CAUTION 3 d5d5 c001 DECLE @@cue + ( 2 - 1) + CUE.1_blu2_b ; $0015 131 CUE '1_blu2_b' d5d6 e706 DECLE @@cue + ( 7 - 1) + CUE.follower ; $0016 133 CUE 'follower' d5d7 cf03 DECLE @@cue + ( 4 - 1) + CUE.1_whit_b ; $0017 140 CUE '1_whit_b' d5d8 7f09 DECLE @@exit + ( 10 - 1) + EXIT.flexit ; $0018 144 EXIT 'flexit' d5d9 7f0f DECLE @@exit + ( 16 - 1) + EXIT.flexit ; $0019 154 EXIT 'flexit' d5da 7f01 DECLE @@exit + ( 2 - 1) + EXIT.flexit ; $001A 170 EXIT 'flexit' d5db 6900 DECLE @@exit + ( 1 - 1) + EXIT.whit_b ; $001B 172 EXIT 'whit_b' d5dc 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $001C 173 LEVEL 'B' 0xd5dd @@ckpt_0c: d5dd 1904 DECLE @@blank + ( 5 - 1) ; $001D 174 BLANK d5de 0705 DECLE @@rock3 + ( 6 - 1) ; $001E 179 ROCK3 d5df 9e01 DECLE @@cue + ( 2 - 1) + CUE.3_pink_e ; $001F 185 CUE '3_pink_e' d5e0 0405 DECLE @@rock2 + ( 6 - 1) ; $0020 187 ROCK2 d5e1 0102 DECLE @@rock1 + ( 3 - 1) ; $0021 193 ROCK1 d5e2 0103 DECLE @@rock1 + ( 4 - 1) ; $0022 196 ROCK1 d5e3 0404 DECLE @@rock2 + ( 5 - 1) ; $0023 200 ROCK2 d5e4 0701 DECLE @@rock3 + ( 2 - 1) ; $0024 205 ROCK3 d5e5 b901 DECLE @@cue + ( 2 - 1) + CUE.3_blue_e ; $0025 207 CUE '3_blue_e' d5e6 0404 DECLE @@rock2 + ( 5 - 1) ; $0026 209 ROCK2 d5e7 0706 DECLE @@rock3 + ( 7 - 1) ; $0027 214 ROCK3 d5e8 0706 DECLE @@rock3 + ( 7 - 1) ; $0028 221 ROCK3 d5e9 100b DECLE @@crat2 + ( 12 - 1) ; $0029 228 CRAT2 d5ea 1009 DECLE @@crat2 + ( 10 - 1) ; $002A 240 CRAT2 d5eb 8e04 DECLE @@cue + ( 5 - 1) + CUE.1_turret ; $002B 250 CUE '1_turret' d5ec 100b DECLE @@crat2 + ( 12 - 1) ; $002C 255 CRAT2 d5ed 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $002D 267 LEVEL 'C' 0xd5ee @@ckpt_0d: d5ee 1908 DECLE @@blank + ( 9 - 1) ; $002E 268 BLANK d5ef 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $002F 277 CUE '1_turret' d5f0 c70a DECLE @@cue + ( 11 - 1) + CUE.3_blu2_e ; $0030 279 CUE '3_blu2_e' d5f1 1006 DECLE @@crat2 + ( 7 - 1) ; $0031 290 CRAT2 d5f2 8e0c DECLE @@cue + ( 13 - 1) + CUE.1_turret ; $0032 297 CUE '1_turret' d5f3 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $0033 310 CUE '1_turret' d5f4 a904 DECLE @@cue + ( 5 - 1) + CUE.3_pin2_d ; $0034 312 CUE '3_pin2_d' d5f5 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $0035 317 CUE '1_turret' d5f6 0e09 DECLE @@crat3 + ( 10 - 1) ; $0036 319 CRAT3 d5f7 0706 DECLE @@rock3 + ( 7 - 1) ; $0037 329 ROCK3 d5f8 0705 DECLE @@rock3 + ( 6 - 1) ; $0038 336 ROCK3 d5f9 0703 DECLE @@rock3 + ( 4 - 1) ; $0039 342 ROCK3 d5fa 070a DECLE @@rock3 + ( 11 - 1) ; $003A 346 ROCK3 d5fb 8e02 DECLE @@cue + ( 3 - 1) + CUE.1_turret ; $003B 357 CUE '1_turret' d5fc 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $003C 360 LEVEL 'D' 0xd5fd @@ckpt_0e: d5fd 1906 DECLE @@blank + ( 7 - 1) ; $003D 361 BLANK d5fe 8e03 DECLE @@cue + ( 4 - 1) + CUE.1_turret ; $003E 368 CUE '1_turret' d5ff d00d DECLE @@cue + ( 14 - 1) + CUE.3_whit_c ; $003F 372 CUE '3_whit_c' d600 0b0d DECLE @@crat1 + ( 14 - 1) ; $0040 386 CRAT1 d601 0b00 DECLE @@crat1 + ( 1 - 1) ; $0041 400 CRAT1 d602 e201 DECLE @@cue + ( 2 - 1) + CUE.3_whi2_d ; $0042 401 CUE '3_whi2_d' d603 0b1d DECLE @@crat1 + ( 30 - 1) ; $0043 403 CRAT1 d604 0b00 DECLE @@crat1 + ( 1 - 1) ; $0044 433 CRAT1 d605 d909 DECLE @@cue + ( 10 - 1) + CUE.3_whi2_a ; $0045 434 CUE '3_whi2_a' d606 8e07 DECLE @@cue + ( 8 - 1) + CUE.1_turret ; $0046 444 CUE '1_turret' d607 8e00 DECLE @@cue + ( 1 - 1) + CUE.1_turret ; $0047 452 CUE '1_turret' d608 4400 DECLE @@level + ( 1 - 1) + ( 36 SHL 8) ; $0048 453 LEVEL 'k' d609 1900 DECLE @@blank + ( 1 - 1) ; $0049 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 37 ;; TOTAL OBJECTS 37 ;; TOTAL WORDS 74 ;; ======================================================================== ;; INCLUDE "genasm/hgc_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd60a @@ckpt_0f: d60a 190e DECLE @@blank + ( 15 - 1) ; $0000 0 BLANK d60b f801 DECLE @@cue + ( 2 - 1) + CUE.stal_e ; $0001 15 CUE 'stal_e' d60c f403 DECLE @@cue + ( 4 - 1) + CUE.stal_a ; $0002 17 CUE 'stal_a' d60d a709 DECLE @@cue + ( 10 - 1) + CUE.2_pin2_c ; $0003 21 CUE '2_pin2_c' d60e fc05 DECLE @@cue + ( 6 - 1) + CUE.stal_i ; $0004 31 CUE 'stal_i' d60f f602 DECLE @@cue + ( 3 - 1) + CUE.stal_c ; $0005 37 CUE 'stal_c' d610 a205 DECLE @@cue + ( 6 - 1) + CUE.2_pin2_a ; $0006 40 CUE '2_pin2_a' d611 fb05 DECLE @@cue + ( 6 - 1) + CUE.stal_h ; $0007 46 CUE 'stal_h' d612 f807 DECLE @@cue + ( 8 - 1) + CUE.stal_e ; $0008 52 CUE 'stal_e' d613 fa04 DECLE @@cue + ( 5 - 1) + CUE.stal_g ; $0009 60 CUE 'stal_g' d614 f906 DECLE @@cue + ( 7 - 1) + CUE.stal_f ; $000A 65 CUE 'stal_f' d615 f607 DECLE @@cue + ( 8 - 1) + CUE.stal_c ; $000B 72 CUE 'stal_c' d616 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $000C 80 LEVEL 'F' 0xd617 @@ckpt_0g: d617 1902 DECLE @@blank + ( 3 - 1) ; $000D 81 BLANK d618 0e00 DECLE @@crat3 + ( 1 - 1) ; $000E 84 CRAT3 d619 c807 DECLE @@cue + ( 8 - 1) + CUE.2_blu2_e ; $000F 85 CUE '2_blu2_e' d61a fc02 DECLE @@cue + ( 3 - 1) + CUE.stal_i ; $0010 93 CUE 'stal_i' d61b fc00 DECLE @@cue + ( 1 - 1) + CUE.stal_i ; $0011 96 CUE 'stal_i' d61c fc07 DECLE @@cue + ( 8 - 1) + CUE.stal_i ; $0012 97 CUE 'stal_i' d61d bc02 DECLE @@cue + ( 3 - 1) + CUE.2_blu2_a ; $0013 105 CUE '2_blu2_a' d61e f805 DECLE @@cue + ( 6 - 1) + CUE.stal_e ; $0014 108 CUE 'stal_e' d61f f905 DECLE @@cue + ( 6 - 1) + CUE.stal_f ; $0015 114 CUE 'stal_f' d620 f704 DECLE @@cue + ( 5 - 1) + CUE.stal_d ; $0016 120 CUE 'stal_d' d621 a202 DECLE @@cue + ( 3 - 1) + CUE.2_pin2_a ; $0017 125 CUE '2_pin2_a' d622 f403 DECLE @@cue + ( 4 - 1) + CUE.stal_a ; $0018 128 CUE 'stal_a' d623 f707 DECLE @@cue + ( 8 - 1) + CUE.stal_d ; $0019 132 CUE 'stal_d' d624 f900 DECLE @@cue + ( 1 - 1) + CUE.stal_f ; $001A 140 CUE 'stal_f' d625 f508 DECLE @@cue + ( 9 - 1) + CUE.stal_b ; $001B 141 CUE 'stal_b' d626 f407 DECLE @@cue + ( 8 - 1) + CUE.stal_a ; $001C 150 CUE 'stal_a' d627 f603 DECLE @@cue + ( 4 - 1) + CUE.stal_c ; $001D 158 CUE 'stal_c' d628 fc03 DECLE @@cue + ( 4 - 1) + CUE.stal_i ; $001E 162 CUE 'stal_i' d629 fb06 DECLE @@cue + ( 7 - 1) + CUE.stal_h ; $001F 166 CUE 'stal_h' d62a 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $0020 173 LEVEL 'G' 0xd62b @@ckpt_0h: d62b 1902 DECLE @@blank + ( 3 - 1) ; $0021 174 BLANK d62c f903 DECLE @@cue + ( 4 - 1) + CUE.stal_f ; $0022 177 CUE 'stal_f' d62d fa01 DECLE @@cue + ( 2 - 1) + CUE.stal_g ; $0023 181 CUE 'stal_g' d62e f509 DECLE @@cue + ( 10 - 1) + CUE.stal_b ; $0024 183 CUE 'stal_b' d62f f803 DECLE @@cue + ( 4 - 1) + CUE.stal_e ; $0025 193 CUE 'stal_e' d630 fc06 DECLE @@cue + ( 7 - 1) + CUE.stal_i ; $0026 197 CUE 'stal_i' d631 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $0027 204 CUE '1_bould' d632 f403 DECLE @@cue + ( 4 - 1) + CUE.stal_a ; $0028 206 CUE 'stal_a' d633 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $0029 210 CUE '1_bould' d634 f502 DECLE @@cue + ( 3 - 1) + CUE.stal_b ; $002A 212 CUE 'stal_b' d635 f403 DECLE @@cue + ( 4 - 1) + CUE.stal_a ; $002B 215 CUE 'stal_a' d636 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $002C 219 CUE '1_bould' d637 fb02 DECLE @@cue + ( 3 - 1) + CUE.stal_h ; $002D 221 CUE 'stal_h' d638 f604 DECLE @@cue + ( 5 - 1) + CUE.stal_c ; $002E 224 CUE 'stal_c' d639 9206 DECLE @@cue + ( 7 - 1) + CUE.1_bould ; $002F 229 CUE '1_bould' d63a f704 DECLE @@cue + ( 5 - 1) + CUE.stal_d ; $0030 236 CUE 'stal_d' d63b f60d DECLE @@cue + ( 14 - 1) + CUE.stal_c ; $0031 241 CUE 'stal_c' d63c f704 DECLE @@cue + ( 5 - 1) + CUE.stal_d ; $0032 255 CUE 'stal_d' d63d f406 DECLE @@cue + ( 7 - 1) + CUE.stal_a ; $0033 260 CUE 'stal_a' d63e 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $0034 267 LEVEL 'H' 0xd63f @@ckpt_0i: d63f 1903 DECLE @@blank + ( 4 - 1) ; $0035 268 BLANK d640 b701 DECLE @@cue + ( 2 - 1) + CUE.2_blue_d ; $0036 272 CUE '2_blue_d' d641 9208 DECLE @@cue + ( 9 - 1) + CUE.1_bould ; $0037 274 CUE '1_bould' d642 f901 DECLE @@cue + ( 2 - 1) + CUE.stal_f ; $0038 283 CUE 'stal_f' d643 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $0039 285 CUE '1_bould' d644 fb06 DECLE @@cue + ( 7 - 1) + CUE.stal_h ; $003A 287 CUE 'stal_h' d645 9200 DECLE @@cue + ( 1 - 1) + CUE.1_bould ; $003B 294 CUE '1_bould' d646 a500 DECLE @@cue + ( 1 - 1) + CUE.1_pin2_b ; $003C 295 CUE '1_pin2_b' d647 f503 DECLE @@cue + ( 4 - 1) + CUE.stal_b ; $003D 296 CUE 'stal_b' d648 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $003E 300 CUE '1_bould' d649 f401 DECLE @@cue + ( 2 - 1) + CUE.stal_a ; $003F 302 CUE 'stal_a' d64a 9200 DECLE @@cue + ( 1 - 1) + CUE.1_bould ; $0040 304 CUE '1_bould' d64b f503 DECLE @@cue + ( 4 - 1) + CUE.stal_b ; $0041 305 CUE 'stal_b' d64c 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $0042 309 CUE '1_bould' d64d f900 DECLE @@cue + ( 1 - 1) + CUE.stal_f ; $0043 311 CUE 'stal_f' d64e 9200 DECLE @@cue + ( 1 - 1) + CUE.1_bould ; $0044 312 CUE '1_bould' d64f ad00 DECLE @@cue + ( 1 - 1) + CUE.1_pin2_e ; $0045 313 CUE '1_pin2_e' d650 f604 DECLE @@cue + ( 5 - 1) + CUE.stal_c ; $0046 314 CUE 'stal_c' d651 9201 DECLE @@cue + ( 2 - 1) + CUE.1_bould ; $0047 319 CUE '1_bould' d652 f706 DECLE @@cue + ( 7 - 1) + CUE.stal_d ; $0048 321 CUE 'stal_d' d653 9207 DECLE @@cue + ( 8 - 1) + CUE.1_bould ; $0049 328 CUE '1_bould' d654 f608 DECLE @@cue + ( 9 - 1) + CUE.stal_c ; $004A 336 CUE 'stal_c' d655 f704 DECLE @@cue + ( 5 - 1) + CUE.stal_d ; $004B 345 CUE 'stal_d' d656 f608 DECLE @@cue + ( 9 - 1) + CUE.stal_c ; $004C 350 CUE 'stal_c' d657 9200 DECLE @@cue + ( 1 - 1) + CUE.1_bould ; $004D 359 CUE '1_bould' d658 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $004E 360 LEVEL 'I' 0xd659 @@ckpt_0j: d659 1903 DECLE @@blank + ( 4 - 1) ; $004F 361 BLANK d65a ad0e DECLE @@cue + ( 15 - 1) + CUE.1_pin2_e ; $0050 365 CUE '1_pin2_e' d65b 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0051 380 CUE '1_plant' d65c 0b01 DECLE @@crat1 + ( 2 - 1) ; $0052 381 CRAT1 d65d 0b01 DECLE @@crat1 + ( 2 - 1) ; $0053 383 CRAT1 d65e 980e DECLE @@cue + ( 15 - 1) + CUE.1_pink_b ; $0054 385 CUE '1_pink_b' d65f 0b03 DECLE @@crat1 + ( 4 - 1) ; $0055 400 CRAT1 d660 0b04 DECLE @@crat1 + ( 5 - 1) ; $0056 404 CRAT1 d661 0b0a DECLE @@crat1 + ( 11 - 1) ; $0057 409 CRAT1 d662 0b00 DECLE @@crat1 + ( 1 - 1) ; $0058 420 CRAT1 d663 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0059 421 CUE '1_plant' d664 0b02 DECLE @@crat1 + ( 3 - 1) ; $005A 422 CRAT1 d665 c708 DECLE @@cue + ( 9 - 1) + CUE.3_blu2_e ; $005B 425 CUE '3_blu2_e' d666 fc03 DECLE @@cue + ( 4 - 1) + CUE.stal_i ; $005C 434 CUE 'stal_i' d667 f601 DECLE @@cue + ( 2 - 1) + CUE.stal_c ; $005D 438 CUE 'stal_c' d668 f702 DECLE @@cue + ( 3 - 1) + CUE.stal_d ; $005E 440 CUE 'stal_d' d669 fb01 DECLE @@cue + ( 2 - 1) + CUE.stal_h ; $005F 443 CUE 'stal_h' d66a f502 DECLE @@cue + ( 3 - 1) + CUE.stal_b ; $0060 445 CUE 'stal_b' d66b f603 DECLE @@cue + ( 4 - 1) + CUE.stal_c ; $0061 448 CUE 'stal_c' d66c f900 DECLE @@cue + ( 1 - 1) + CUE.stal_f ; $0062 452 CUE 'stal_f' d66d 4900 DECLE @@level + ( 1 - 1) + ( 41 SHL 8) ; $0063 453 LEVEL 'p' d66e 1900 DECLE @@blank + ( 1 - 1) ; $0064 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 82 ;; TOTAL OBJECTS 19 ;; TOTAL WORDS 101 ;; ======================================================================== ;; d66f 0000 DECLE 0 ENDP 0xd670 PLUT_B PROC INCLUDE "genasm/plb_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd670 @@ckpt_0a: d670 190a DECLE @@blank + ( 11 - 1) ; $0000 0 BLANK d671 0b0c DECLE @@crat1 + ( 13 - 1) ; $0001 11 CRAT1 d672 100b DECLE @@crat2 + ( 12 - 1) ; $0002 24 CRAT2 d673 ad03 DECLE @@cue + ( 4 - 1) + CUE.1_pin2_e ; $0003 36 CUE '1_pin2_e' d674 100d DECLE @@crat2 + ( 14 - 1) ; $0004 40 CRAT2 d675 0b0e DECLE @@crat1 + ( 15 - 1) ; $0005 54 CRAT1 d676 1008 DECLE @@crat2 + ( 9 - 1) ; $0006 69 CRAT2 d677 7c01 DECLE @@exit + ( 2 - 1) + EXIT.pin2_e ; $0007 78 EXIT 'pin2_e' d678 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $0008 80 LEVEL 'A' 0xd679 @@ckpt_0b: d679 1904 DECLE @@blank + ( 5 - 1) ; $0009 81 BLANK d67a 1005 DECLE @@crat2 + ( 6 - 1) ; $000A 86 CRAT2 d67b af10 DECLE @@cue + ( 17 - 1) + CUE.1_blue_a ; $000B 92 CUE '1_blue_a' d67c 9212 DECLE @@cue + ( 19 - 1) + CUE.1_bould ; $000C 109 CUE '1_bould' d67d 9111 DECLE @@cue + ( 18 - 1) + CUE.2_bould ; $000D 128 CUE '2_bould' d67e 9205 DECLE @@cue + ( 6 - 1) + CUE.1_bould ; $000E 146 CUE '1_bould' d67f 0b0f DECLE @@crat1 + ( 16 - 1) ; $000F 152 CRAT1 d680 9103 DECLE @@cue + ( 4 - 1) + CUE.2_bould ; $0010 168 CUE '2_bould' d681 6200 DECLE @@exit + ( 1 - 1) + EXIT.blue_a ; $0011 172 EXIT 'blue_a' d682 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $0012 173 LEVEL 'B' 0xd683 @@ckpt_0c: d683 1905 DECLE @@blank + ( 6 - 1) ; $0013 174 BLANK d684 9104 DECLE @@cue + ( 5 - 1) + CUE.2_bould ; $0014 180 CUE '2_bould' d685 9801 DECLE @@cue + ( 2 - 1) + CUE.1_pink_b ; $0015 185 CUE '1_pink_b' d686 9211 DECLE @@cue + ( 18 - 1) + CUE.1_bould ; $0016 187 CUE '1_bould' d687 0104 DECLE @@rock1 + ( 5 - 1) ; $0017 205 ROCK1 d688 b803 DECLE @@cue + ( 4 - 1) + CUE.1_blue_d ; $0018 210 CUE '1_blue_d' d689 0412 DECLE @@rock2 + ( 19 - 1) ; $0019 214 ROCK2 d68a 0710 DECLE @@rock3 + ( 17 - 1) ; $001A 233 ROCK3 d68b 0705 DECLE @@rock3 + ( 6 - 1) ; $001B 250 ROCK3 d68c 1004 DECLE @@crat2 + ( 5 - 1) ; $001C 256 CRAT2 d68d 6701 DECLE @@exit + ( 2 - 1) + EXIT.pink_b ; $001D 261 EXIT 'pink_b' d68e 0100 DECLE @@rock1 + ( 1 - 1) ; $001E 263 ROCK1 d68f 7402 DECLE @@exit + ( 3 - 1) + EXIT.blue_d ; $001F 264 EXIT 'blue_d' d690 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $0020 267 LEVEL 'C' 0xd691 @@ckpt_0d: d691 1907 DECLE @@blank + ( 8 - 1) ; $0021 268 BLANK d692 040b DECLE @@rock2 + ( 12 - 1) ; $0022 276 ROCK2 d693 0106 DECLE @@rock1 + ( 7 - 1) ; $0023 288 ROCK1 d694 9b03 DECLE @@cue + ( 4 - 1) + CUE.1_pink_c ; $0024 295 CUE '1_pink_c' d695 0b0f DECLE @@crat1 + ( 16 - 1) ; $0025 299 CRAT1 d696 0404 DECLE @@rock2 + ( 5 - 1) ; $0026 315 ROCK2 d697 1004 DECLE @@crat2 + ( 5 - 1) ; $0027 320 CRAT2 d698 bb08 DECLE @@cue + ( 9 - 1) + CUE.1_blue_e ; $0028 325 CUE '1_blue_e' d699 0e0d DECLE @@crat3 + ( 14 - 1) ; $0029 334 CRAT3 d69a 0406 DECLE @@rock2 + ( 7 - 1) ; $002A 348 ROCK2 d69b 1000 DECLE @@crat2 + ( 1 - 1) ; $002B 355 CRAT2 d69c 6d02 DECLE @@exit + ( 3 - 1) + EXIT.pink_c ; $002C 356 EXIT 'pink_c' d69d 7a00 DECLE @@exit + ( 1 - 1) + EXIT.blue_e ; $002D 359 EXIT 'blue_e' d69e 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $002E 360 LEVEL 'D' 0xd69f @@ckpt_0e: d69f 1904 DECLE @@blank + ( 5 - 1) ; $002F 361 BLANK d6a0 0407 DECLE @@rock2 + ( 8 - 1) ; $0030 366 ROCK2 d6a1 0b01 DECLE @@crat1 + ( 2 - 1) ; $0031 374 CRAT1 d6a2 cf16 DECLE @@cue + ( 23 - 1) + CUE.1_whit_b ; $0032 376 CUE '1_whit_b' d6a3 0b0e DECLE @@crat1 + ( 15 - 1) ; $0033 399 CRAT1 d6a4 0b0a DECLE @@crat1 + ( 11 - 1) ; $0034 414 CRAT1 d6a5 d10c DECLE @@cue + ( 13 - 1) + CUE.2_whit_c ; $0035 425 CUE '2_whit_c' d6a6 0b0b DECLE @@crat1 + ( 12 - 1) ; $0036 438 CRAT1 d6a7 0b00 DECLE @@crat1 + ( 1 - 1) ; $0037 450 CRAT1 d6a8 6901 DECLE @@exit + ( 2 - 1) + EXIT.whit_b ; $0038 451 EXIT 'whit_b' d6a9 4401 DECLE @@level + ( 2 - 1) + ( 36 SHL 8) ; $0039 453 LEVEL 'k' d6aa 6f00 DECLE @@exit + ( 1 - 1) + EXIT.whit_c ; $003A 455 EXIT 'whit_c' d6ab 1900 DECLE @@blank + ( 1 - 1) ; $003B 456 BLANK ; 457 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 22 ;; TOTAL OBJECTS 38 ;; TOTAL WORDS 60 ;; ======================================================================== ;; INCLUDE "genasm/plb_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd6ac @@ckpt_0f: d6ac 1909 DECLE @@blank + ( 10 - 1) ; $0000 0 BLANK d6ad bd05 DECLE @@cue + ( 6 - 1) + CUE.1_blu2_a ; $0001 10 CUE '1_blu2_a' d6ae 0b09 DECLE @@crat1 + ( 10 - 1) ; $0002 16 CRAT1 d6af 010a DECLE @@rock1 + ( 11 - 1) ; $0003 26 ROCK1 d6b0 0400 DECLE @@rock2 + ( 1 - 1) ; $0004 37 ROCK2 d6b1 bf01 DECLE @@cue + ( 2 - 1) + CUE.2_blu2_b ; $0005 38 CUE '2_blu2_b' d6b2 0b0c DECLE @@crat1 + ( 13 - 1) ; $0006 40 CRAT1 d6b3 0701 DECLE @@rock3 + ( 2 - 1) ; $0007 53 ROCK3 d6b4 9d09 DECLE @@cue + ( 10 - 1) + CUE.1_pink_d ; $0008 55 CUE '1_pink_d' d6b5 070b DECLE @@rock3 + ( 12 - 1) ; $0009 65 ROCK3 d6b6 6502 DECLE @@exit + ( 3 - 1) + EXIT.blu2_a ; $000A 77 EXIT 'blu2_a' d6b7 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $000B 80 LEVEL 'F' 0xd6b8 @@ckpt_0g: d6b8 1901 DECLE @@blank + ( 2 - 1) ; $000C 81 BLANK d6b9 1f05 DECLE @@caut3 + ( 6 - 1) ; $000D 83 CAUTION 3 d6ba 6b00 DECLE @@exit + ( 1 - 1) + EXIT.blu2_b ; $000E 89 EXIT 'blu2_b' d6bb f008 DECLE @@cue + ( 9 - 1) + CUE.charger5 ; $000F 90 CUE 'charger5' d6bc 730a DECLE @@exit + ( 11 - 1) + EXIT.pink_d ; $0010 99 EXIT 'pink_d' d6bd 7f13 DECLE @@exit + ( 20 - 1) + EXIT.flexit ; $0011 110 EXIT 'flexit' d6be 0403 DECLE @@rock2 + ( 4 - 1) ; $0012 130 ROCK2 d6bf 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0013 134 EXIT 'flexit' d6c0 0412 DECLE @@rock2 + ( 19 - 1) ; $0014 139 ROCK2 d6c1 7f0a DECLE @@exit + ( 11 - 1) + EXIT.flexit ; $0015 158 EXIT 'flexit' d6c2 7f03 DECLE @@exit + ( 4 - 1) + EXIT.flexit ; $0016 169 EXIT 'flexit' d6c3 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $0017 173 LEVEL 'G' 0xd6c4 @@ckpt_0h: d6c4 1901 DECLE @@blank + ( 2 - 1) ; $0018 174 BLANK d6c5 1007 DECLE @@crat2 + ( 8 - 1) ; $0019 176 CRAT2 d6c6 7f0b DECLE @@exit + ( 12 - 1) + EXIT.flexit ; $001A 184 EXIT 'flexit' d6c7 7f07 DECLE @@exit + ( 8 - 1) + EXIT.flexit ; $001B 196 EXIT 'flexit' d6c8 1004 DECLE @@crat2 + ( 5 - 1) ; $001C 204 CRAT2 d6c9 a001 DECLE @@cue + ( 2 - 1) + CUE.1_pink_e ; $001D 209 CUE '1_pink_e' d6ca 0b11 DECLE @@crat1 + ( 18 - 1) ; $001E 211 CRAT1 d6cb a207 DECLE @@cue + ( 8 - 1) + CUE.2_pin2_a ; $001F 229 CUE '2_pin2_a' d6cc 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0020 237 CUE '1_plant' d6cd 0b0a DECLE @@crat1 + ( 11 - 1) ; $0021 238 CRAT1 d6ce 0408 DECLE @@rock2 + ( 9 - 1) ; $0022 249 ROCK2 d6cf 0706 DECLE @@rock3 + ( 7 - 1) ; $0023 258 ROCK3 d6d0 0700 DECLE @@rock3 + ( 1 - 1) ; $0024 265 ROCK3 d6d1 7900 DECLE @@exit + ( 1 - 1) + EXIT.pink_e ; $0025 266 EXIT 'pink_e' d6d2 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $0026 267 LEVEL 'H' 0xd6d3 @@ckpt_0i: d6d3 1905 DECLE @@blank + ( 6 - 1) ; $0027 268 BLANK d6d4 a702 DECLE @@cue + ( 3 - 1) + CUE.2_pin2_c ; $0028 274 CUE '2_pin2_c' d6d5 9203 DECLE @@cue + ( 4 - 1) + CUE.1_bould ; $0029 277 CUE '1_bould' d6d6 6403 DECLE @@exit + ( 4 - 1) + EXIT.pin2_a ; $002A 281 EXIT 'pin2_a' d6d7 9109 DECLE @@cue + ( 10 - 1) + CUE.2_bould ; $002B 285 CUE '2_bould' d6d8 9106 DECLE @@cue + ( 7 - 1) + CUE.2_bould ; $002C 295 CUE '2_bould' d6d9 100a DECLE @@crat2 + ( 11 - 1) ; $002D 302 CRAT2 d6da 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $002E 313 CUE '1_plant' d6db 0b0f DECLE @@crat1 + ( 16 - 1) ; $002F 314 CRAT1 d6dc 1409 DECLE @@crat4 + ( 10 - 1) ; $0030 330 CRAT4 d6dd d505 DECLE @@cue + ( 6 - 1) + CUE.1_whit_d ; $0031 340 CUE '1_whit_d' d6de 0b0c DECLE @@crat1 + ( 13 - 1) ; $0032 346 CRAT1 d6df 7000 DECLE @@exit + ( 1 - 1) + EXIT.pin2_c ; $0033 359 EXIT 'pin2_c' d6e0 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $0034 360 LEVEL 'I' 0xd6e1 @@ckpt_0j: d6e1 1903 DECLE @@blank + ( 4 - 1) ; $0035 361 BLANK d6e2 d800 DECLE @@cue + ( 1 - 1) + CUE.1_whit_e ; $0036 365 CUE '1_whit_e' d6e3 7503 DECLE @@exit + ( 4 - 1) + EXIT.whit_d ; $0037 366 EXIT 'whit_d' d6e4 101d DECLE @@crat2 + ( 30 - 1) ; $0038 370 CRAT2 d6e5 a40b DECLE @@cue + ( 12 - 1) + CUE.2_pin2_b ; $0039 400 CUE '2_pin2_b' d6e6 7b06 DECLE @@exit + ( 7 - 1) + EXIT.whit_e ; $003A 412 EXIT 'whit_e' d6e7 9107 DECLE @@cue + ( 8 - 1) + CUE.2_bould ; $003B 419 CUE '2_bould' d6e8 9103 DECLE @@cue + ( 4 - 1) + CUE.2_bould ; $003C 427 CUE '2_bould' d6e9 aa03 DECLE @@cue + ( 4 - 1) + CUE.2_pin2_d ; $003D 431 CUE '2_pin2_d' d6ea 910a DECLE @@cue + ( 11 - 1) + CUE.2_bould ; $003E 435 CUE '2_bould' d6eb 6a02 DECLE @@exit + ( 3 - 1) + EXIT.pin2_b ; $003F 446 EXIT 'pin2_b' d6ec 0e03 DECLE @@crat3 + ( 4 - 1) ; $0040 449 CRAT3 d6ed 4903 DECLE @@level + ( 4 - 1) + ( 41 SHL 8) ; $0041 453 LEVEL 'p' d6ee 7600 DECLE @@exit + ( 1 - 1) + EXIT.pin2_d ; $0042 457 EXIT 'pin2_d' d6ef 1900 DECLE @@blank + ( 1 - 1) ; $0043 458 BLANK ; 459 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 35 ;; TOTAL OBJECTS 33 ;; TOTAL WORDS 68 ;; ======================================================================== ;; d6f0 0000 DECLE 0 ENDP 0xd6f1 PLUT_C PROC INCLUDE "genasm/plc_a_e.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 0x100 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) 0x400 @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) 0x700 @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) 0xb00 @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) 0x1000 @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) 0xe00 @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) 0x1400 @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) 0x1900 @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) 0x1c00 @@caut0 EQU $1C00 0x1d00 @@caut1 EQU $1D00 0x1e00 @@caut2 EQU $1E00 0x1f00 @@caut3 EQU $1F00 0x2000 @@level EQU $2000 0x6000 @@exit EQU $6000 0x8000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd6f1 @@ckpt_0a: d6f1 1913 DECLE @@blank + ( 20 - 1) ; $0000 0 BLANK d6f2 8e0d DECLE @@cue + ( 14 - 1) + CUE.1_turret ; $0001 20 CUE '1_turret' d6f3 8e06 DECLE @@cue + ( 7 - 1) + CUE.1_turret ; $0002 34 CUE '1_turret' d6f4 8d00 DECLE @@cue + ( 1 - 1) + CUE.1_plbig ; $0003 41 CUE '1_plbig' d6f5 100d DECLE @@crat2 + ( 14 - 1) ; $0004 42 CRAT2 d6f6 8e04 DECLE @@cue + ( 5 - 1) + CUE.1_turret ; $0005 56 CUE '1_turret' d6f7 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0006 61 CUE '1_plant' d6f8 0b05 DECLE @@crat1 + ( 6 - 1) ; $0007 62 CRAT1 d6f9 8e06 DECLE @@cue + ( 7 - 1) + CUE.1_turret ; $0008 68 CUE '1_turret' d6fa 1f01 DECLE @@caut3 + ( 2 - 1) ; $0009 75 CAUTION 3 d6fb 8e02 DECLE @@cue + ( 3 - 1) + CUE.1_turret ; $000A 77 CUE '1_turret' d6fc 2000 DECLE @@level + ( 1 - 1) + ( 0 SHL 8) ; $000B 80 LEVEL 'A' 0xd6fd @@ckpt_0b: d6fd 1900 DECLE @@blank + ( 1 - 1) ; $000C 81 BLANK d6fe 1f02 DECLE @@caut3 + ( 3 - 1) ; $000D 82 CAUTION 3 d6ff f013 DECLE @@cue + ( 20 - 1) + CUE.charger5 ; $000E 85 CUE 'charger5' d700 7f0d DECLE @@exit + ( 14 - 1) + EXIT.flexit ; $000F 105 EXIT 'flexit' d701 7f04 DECLE @@exit + ( 5 - 1) + EXIT.flexit ; $0010 119 EXIT 'flexit' d702 0404 DECLE @@rock2 + ( 5 - 1) ; $0011 124 ROCK2 d703 ae09 DECLE @@cue + ( 10 - 1) + CUE.2_blue_a ; $0012 129 CUE '2_blue_a' d704 7f06 DECLE @@exit + ( 7 - 1) + EXIT.flexit ; $0013 139 EXIT 'flexit' d705 0401 DECLE @@rock2 + ( 2 - 1) ; $0014 146 ROCK2 d706 7f03 DECLE @@exit + ( 4 - 1) + EXIT.flexit ; $0015 148 EXIT 'flexit' d707 1010 DECLE @@crat2 + ( 17 - 1) ; $0016 152 CRAT2 d708 7f01 DECLE @@exit + ( 2 - 1) + EXIT.flexit ; $0017 169 EXIT 'flexit' d709 6200 DECLE @@exit + ( 1 - 1) + EXIT.blue_a ; $0018 171 EXIT 'blue_a' d70a 7f00 DECLE @@exit + ( 1 - 1) + EXIT.flexit ; $0019 172 EXIT 'flexit' d70b 2100 DECLE @@level + ( 1 - 1) + ( 1 SHL 8) ; $001A 173 LEVEL 'B' 0xd70c @@ckpt_0c: d70c 1906 DECLE @@blank + ( 7 - 1) ; $001B 174 BLANK d70d 0100 DECLE @@rock1 + ( 1 - 1) ; $001C 181 ROCK1 d70e b103 DECLE @@cue + ( 4 - 1) + CUE.2_blue_b ; $001D 182 CUE '2_blue_b' d70f 0104 DECLE @@rock1 + ( 5 - 1) ; $001E 186 ROCK1 d710 0103 DECLE @@rock1 + ( 4 - 1) ; $001F 191 ROCK1 d711 0104 DECLE @@rock1 + ( 5 - 1) ; $0020 195 ROCK1 d712 0404 DECLE @@rock2 + ( 5 - 1) ; $0021 200 ROCK2 d713 0403 DECLE @@rock2 + ( 4 - 1) ; $0022 205 ROCK2 d714 0704 DECLE @@rock3 + ( 5 - 1) ; $0023 209 ROCK3 d715 0404 DECLE @@rock2 + ( 5 - 1) ; $0024 214 ROCK2 d716 0705 DECLE @@rock3 + ( 6 - 1) ; $0025 219 ROCK3 d717 cb00 DECLE @@cue + ( 1 - 1) + CUE.2_whit_a ; $0026 225 CUE '2_whit_a' d718 0408 DECLE @@rock2 + ( 9 - 1) ; $0027 226 ROCK2 d719 0708 DECLE @@rock3 + ( 9 - 1) ; $0028 235 ROCK3 d71a 0407 DECLE @@rock2 + ( 8 - 1) ; $0029 244 ROCK2 d71b 0106 DECLE @@rock1 + ( 7 - 1) ; $002A 252 ROCK1 d71c 0104 DECLE @@rock1 + ( 5 - 1) ; $002B 259 ROCK1 d71d 0400 DECLE @@rock2 + ( 1 - 1) ; $002C 264 ROCK2 d71e 6801 DECLE @@exit + ( 2 - 1) + EXIT.blue_b ; $002D 265 EXIT 'blue_b' d71f 2200 DECLE @@level + ( 1 - 1) + ( 2 SHL 8) ; $002E 267 LEVEL 'C' 0xd720 @@ckpt_0d: d720 1908 DECLE @@blank + ( 9 - 1) ; $002F 268 BLANK d721 0408 DECLE @@rock2 + ( 9 - 1) ; $0030 277 ROCK2 d722 9601 DECLE @@cue + ( 2 - 1) + CUE.3_pink_b ; $0031 286 CUE '3_pink_b' d723 0405 DECLE @@rock2 + ( 6 - 1) ; $0032 288 ROCK2 d724 0109 DECLE @@rock1 + ( 10 - 1) ; $0033 294 ROCK1 d725 8e0a DECLE @@cue + ( 11 - 1) + CUE.1_turret ; $0034 304 CUE '1_turret' d726 8e09 DECLE @@cue + ( 10 - 1) + CUE.1_turret ; $0035 315 CUE '1_turret' d727 8e02 DECLE @@cue + ( 3 - 1) + CUE.1_turret ; $0036 325 CUE '1_turret' d728 ce00 DECLE @@cue + ( 1 - 1) + CUE.2_whit_b ; $0037 328 CUE '2_whit_b' d729 010a DECLE @@rock1 + ( 11 - 1) ; $0038 329 ROCK1 d72a 1011 DECLE @@crat2 + ( 18 - 1) ; $0039 340 CRAT2 d72b 8e01 DECLE @@cue + ( 2 - 1) + CUE.1_turret ; $003A 358 CUE '1_turret' d72c 2300 DECLE @@level + ( 1 - 1) + ( 3 SHL 8) ; $003B 360 LEVEL 'D' 0xd72d @@ckpt_0e: d72d 1905 DECLE @@blank + ( 6 - 1) ; $003C 361 BLANK d72e b303 DECLE @@cue + ( 4 - 1) + CUE.3_blue_c ; $003D 367 CUE '3_blue_c' d72f 8e03 DECLE @@cue + ( 4 - 1) + CUE.1_turret ; $003E 371 CUE '1_turret' d730 100c DECLE @@crat2 + ( 13 - 1) ; $003F 375 CRAT2 d731 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0040 388 CUE '1_plant' d732 0b07 DECLE @@crat1 + ( 8 - 1) ; $0041 389 CRAT1 d733 d10c DECLE @@cue + ( 13 - 1) + CUE.2_whit_c ; $0042 397 CUE '2_whit_c' d734 1009 DECLE @@crat2 + ( 10 - 1) ; $0043 410 CRAT2 d735 9920 DECLE @@cue + ( 33 - 1) + CUE.3_pink_c ; $0044 420 CUE '3_pink_c' d736 4400 DECLE @@level + ( 1 - 1) + ( 36 SHL 8) ; $0045 453 LEVEL 'k' d737 1900 DECLE @@blank + ( 1 - 1) ; $0046 454 BLANK ; 455 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 30 ;; TOTAL OBJECTS 41 ;; TOTAL WORDS 71 ;; ======================================================================== ;; INCLUDE "genasm/plc_f_j.asm" ;; ======================================================================== ;; IF (DEFINED @@rock1) = 0 @@rock1 EQU ((RCS1.rock1 - RCS1 + 1) SHL 8) @@rock2 EQU ((RCS1.rock2 - RCS1 + 1) SHL 8) @@rock3 EQU ((RCS1.rock3 - RCS1 + 1) SHL 8) @@crat1 EQU ((RCS1.crat1 - RCS1 + 1) SHL 8) @@crat2 EQU ((RCS1.crat2 - RCS1 + 1) SHL 8) @@crat3 EQU ((RCS1.crat3 - RCS1 + 1) SHL 8) @@crat4 EQU ((RCS1.crat4 - RCS1 + 1) SHL 8) @@blank EQU ((RCS1.blank - RCS1 + 1) SHL 8) @@caut0 EQU $1C00 @@caut1 EQU $1D00 @@caut2 EQU $1E00 @@caut3 EQU $1F00 @@level EQU $2000 @@exit EQU $6000 @@cue EQU $8000 ENDI ;; ======================================================================== ;; 0xd738 @@ckpt_0f: d738 190a DECLE @@blank + ( 11 - 1) ; $0000 0 BLANK d739 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0001 11 CUE '1_plant' d73a 0b00 DECLE @@crat1 + ( 1 - 1) ; $0002 12 CRAT1 d73b d405 DECLE @@cue + ( 6 - 1) + CUE.2_whit_d ; $0003 13 CUE '2_whit_d' d73c 100b DECLE @@crat2 + ( 12 - 1) ; $0004 19 CRAT2 d73d 0b0c DECLE @@crat1 + ( 13 - 1) ; $0005 31 CRAT1 d73e 0b07 DECLE @@crat1 + ( 8 - 1) ; $0006 44 CRAT1 d73f d707 DECLE @@cue + ( 8 - 1) + CUE.2_whit_e ; $0007 52 CUE '2_whit_e' d740 0b0e DECLE @@crat1 + ( 15 - 1) ; $0008 60 CRAT1 d741 1401 DECLE @@crat4 + ( 2 - 1) ; $0009 75 CRAT4 d742 7501 DECLE @@exit + ( 2 - 1) + EXIT.whit_d ; $000A 77 EXIT 'whit_d' d743 7b00 DECLE @@exit + ( 1 - 1) + EXIT.whit_e ; $000B 79 EXIT 'whit_e' d744 2500 DECLE @@level + ( 1 - 1) + ( 5 SHL 8) ; $000C 80 LEVEL 'F' 0xd745 @@ckpt_0g: d745 1903 DECLE @@blank + ( 4 - 1) ; $000D 81 BLANK d746 1e00 DECLE @@caut2 + ( 1 - 1) ; $000E 85 CAUTION 2 d747 1003 DECLE @@crat2 + ( 4 - 1) ; $000F 86 CRAT2 d748 b703 DECLE @@cue + ( 4 - 1) + CUE.2_blue_d ; $0010 90 CUE '2_blue_d' d749 8105 DECLE @@cue + ( 6 - 1) + CUE.1_mine_a ; $0011 94 CUE '1_mine_a' d74a 0b06 DECLE @@crat1 + ( 7 - 1) ; $0012 100 CRAT1 d74b 8205 DECLE @@cue + ( 6 - 1) + CUE.2_mine_b ; $0013 107 CUE '2_mine_b' d74c 8405 DECLE @@cue + ( 6 - 1) + CUE.2_mine_c ; $0014 113 CUE '2_mine_c' d74d 8606 DECLE @@cue + ( 7 - 1) + CUE.2_mine_d ; $0015 119 CUE '2_mine_d' d74e 8302 DECLE @@cue + ( 3 - 1) + CUE.1_mine_b ; $0016 126 CUE '1_mine_b' d74f ba03 DECLE @@cue + ( 4 - 1) + CUE.2_blue_e ; $0017 129 CUE '2_blue_e' d750 8007 DECLE @@cue + ( 8 - 1) + CUE.2_mine_a ; $0018 133 CUE '2_mine_a' d751 8a05 DECLE @@cue + ( 6 - 1) + CUE.2_mine_f ; $0019 141 CUE '2_mine_f' d752 8306 DECLE @@cue + ( 7 - 1) + CUE.1_mine_b ; $001A 147 CUE '1_mine_b' d753 8208 DECLE @@cue + ( 9 - 1) + CUE.2_mine_b ; $001B 154 CUE '2_mine_b' d754 1406 DECLE @@crat4 + ( 7 - 1) ; $001C 163 CRAT4 d755 7400 DECLE @@exit + ( 1 - 1) + EXIT.blue_d ; $001D 170 EXIT 'blue_d' d756 8600 DECLE @@cue + ( 1 - 1) + CUE.2_mine_d ; $001E 171 CUE '2_mine_d' d757 7a00 DECLE @@exit + ( 1 - 1) + EXIT.blue_e ; $001F 172 EXIT 'blue_e' d758 2600 DECLE @@level + ( 1 - 1) + ( 6 SHL 8) ; $0020 173 LEVEL 'G' 0xd759 @@ckpt_0h: d759 1905 DECLE @@blank + ( 6 - 1) ; $0021 174 BLANK d75a 8107 DECLE @@cue + ( 8 - 1) + CUE.1_mine_a ; $0022 180 CUE '1_mine_a' d75b 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0023 188 CUE '1_plant' d75c 0b07 DECLE @@crat1 + ( 8 - 1) ; $0024 189 CRAT1 d75d 8402 DECLE @@cue + ( 3 - 1) + CUE.2_mine_c ; $0025 197 CUE '2_mine_c' d75e 1d03 DECLE @@caut1 + ( 4 - 1) ; $0026 200 CAUTION 1 d75f 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $0027 204 CUE '1_plant' d760 0b04 DECLE @@crat1 + ( 5 - 1) ; $0028 205 CRAT1 d761 9a03 DECLE @@cue + ( 4 - 1) + CUE.2_pink_c ; $0029 210 CUE '2_pink_c' d762 8405 DECLE @@cue + ( 6 - 1) + CUE.2_mine_c ; $002A 214 CUE '2_mine_c' d763 9d06 DECLE @@cue + ( 7 - 1) + CUE.1_pink_d ; $002B 220 CUE '1_pink_d' d764 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $002C 227 CUE '1_plant' d765 0b0c DECLE @@crat1 + ( 13 - 1) ; $002D 228 CRAT1 d766 8407 DECLE @@cue + ( 8 - 1) + CUE.2_mine_c ; $002E 241 CUE '2_mine_c' d767 8c00 DECLE @@cue + ( 1 - 1) + CUE.1_plant ; $002F 249 CUE '1_plant' d768 0b04 DECLE @@crat1 + ( 5 - 1) ; $0030 250 CRAT1 d769 9f04 DECLE @@cue + ( 5 - 1) + CUE.2_pink_e ; $0031 255 CUE '2_pink_e' d76a 6d04 DECLE @@exit + ( 5 - 1) + EXIT.pink_c ; $0032 260 EXIT 'pink_c' d76b 7301 DECLE @@exit + ( 2 - 1) + EXIT.pink_d ; $0033 265 EXIT 'pink_d' d76c 2700 DECLE @@level + ( 1 - 1) + ( 7 SHL 8) ; $0034 267 LEVEL 'H' 0xd76d @@ckpt_0i: d76d 1904 DECLE @@blank + ( 5 - 1) ; $0035 268 BLANK d76e 010a DECLE @@rock1 + ( 11 - 1) ; $0036 273 ROCK1 d76f 0405 DECLE @@rock2 + ( 6 - 1) ; $0037 284 ROCK2 d770 0700 DECLE @@rock3 + ( 1 - 1) ; $0038 290 ROCK3 d771 1d03 DECLE @@caut1 + ( 4 - 1) ; $0039 291 CAUTION 1 d772 0704 DECLE @@rock3 + ( 5 - 1) ; $003A 295 ROCK3 d773 bc07 DECLE @@cue + ( 8 - 1) + CUE.2_blu2_a ; $003B 300 CUE '2_blu2_a' d774 0406 DECLE @@rock2 + ( 7 - 1) ; $003C 308 ROCK2 d775 0703 DECLE @@rock3 + ( 4 - 1) ; $003D 315 ROCK3 d776 0105 DECLE @@rock1 + ( 6 - 1) ; $003E 319 ROCK1 d777 a209 DECLE @@cue + ( 10 - 1) + CUE.2_pin2_a ; $003F 325 CUE '2_pin2_a' d778 0409 DECLE @@rock2 + ( 10 - 1) ; $0040 335 ROCK2 d779 a40c DECLE @@cue + ( 13 - 1) + CUE.2_pin2_b ; $0041 345 CUE '2_pin2_b' d77a 6500 DECLE @@exit + ( 1 - 1) + EXIT.blu2_a ; $0042 358 EXIT 'blu2_a' d77b 6400 DECLE @@exit + ( 1 - 1) + EXIT.pin2_a ; $0043 359 EXIT 'pin2_a' d77c 2800 DECLE @@level + ( 1 - 1) + ( 8 SHL 8) ; $0044 360 LEVEL 'I' 0xd77d @@ckpt_0j: d77d 1908 DECLE @@blank + ( 9 - 1) ; $0045 361 BLANK d77e 9207 DECLE @@cue + ( 8 - 1) + CUE.1_bould ; $0046 370 CUE '1_bould' d77f 9209 DECLE @@cue + ( 10 - 1) + CUE.1_bould ; $0047 378 CUE '1_bould' d780 9109 DECLE @@cue + ( 10 - 1) + CUE.2_bould ; $0048 388 CUE '2_bould' d781 8f06 DECLE @@cue + ( 7 - 1) + CUE.2_boulc ; $0049 398 CUE '2_boulc' d782 1d00 DECLE @@caut1 + ( 1 - 1) ; $004A 405 CAUTION 1 d783 8f03 DECLE @@cue + ( 4 - 1) + CUE.2_boulc ; $004B 406 CUE '2_boulc' d784 8f04 DECLE @@cue + ( 5 - 1) + CUE.2_boulc ; $004C 410 CUE '2_boulc' d785 d904 DECLE @@cue + ( 5 - 1) + CUE.3_whi2_a ; $004D 415 CUE '3_whi2_a' d786 bf0e DECLE @@cue + ( 15 - 1) + CUE.2_blu2_b ; $004E 420 CUE '2_blu2_b' d787 de11 DECLE @@cue + ( 18 - 1) + CUE.1_whi2_b ; $004F 435 CUE '1_whi2_b' d788 4901 DECLE @@level + ( 2 - 1) + ( 41 SHL 8) ; $0050 453 LEVEL 'p' d789 6600 DECLE @@exit + ( 1 - 1) + EXIT.whi2_a ; $0051 455 EXIT 'whi2_a' d78a 6b00 DECLE @@exit + ( 1 - 1) + EXIT.blu2_b ; $0052 456 EXIT 'blu2_b' d78b 6c00 DECLE @@exit + ( 1 - 1) + EXIT.whi2_b ; $0053 457 EXIT 'whi2_b' d78c 1900 DECLE @@blank + ( 1 - 1) ; $0054 458 BLANK ; 459 END ;; ======================================================================== ;; ;; SUMMARY ;; TOTAL COMMANDS 49 ;; TOTAL OBJECTS 36 ;; TOTAL WORDS 85 ;; ======================================================================== ;; d78d 0000 DECLE 0 ENDP 0x445 _WORLD.size EQU $ - _WORLD 0xd78e _OS2 EQU $ INCLUDE "util/initmem.asm" ;__ ;; ======================================================================== ;; ;; INITMEM ;; ;; ;; ;; Initialize a set of variables to initial values. Initialization ;; ;; records are 1 word each typically. All variables are in the range ;; ;; $0F0 - $35F. So, each record is formatted as follows. ;; ;; ;; ;; 15 10 9 0 ;; ;; +---------------------+-----------------------------------+ ;; ;; | Value | Address | ;; ;; +---------------------+-----------------------------------+ ;; ;; ;; ;; A record of 0 terminates the initializer list. ;; ;; ;; ;; The "value" field is actually encoded. $20 - $3F directly map to ;; ;; the constants $00 - $1F. $00 - $1E map to constants in a separate ;; ;; constants table. $1F indicates the constant appears in the following ;; ;; word. Furthermore, constant table entries $00 - $1F are packed 8-bit ;; ;; contants, whereas $20 - $2E are unpacked 16-bit constants. ;; ;; ;; ;; INPUTS (INITMEM.0) ;; ;; R5 Initializer table. Returns following table. ;; ;; ;; ;; INPUTS (INITMEM.1) ;; ;; R5 Pointer to initializer table. Returns following pointer. ;; ;; ;; ;; INPUTS (INITMEM.2) ;; ;; R5 Return address ;; ;; R4 Initialization table ;; ;; ;; ;; ======================================================================== ;; 0xd78e INITMEM PROC d78e 00ac @@0: MOVR R5, R4 ; Read init table from after CALL d78f 01ed CLRR R5 ; Flag: Return to R4. d790 000f INCR PC ; Skip MVI@ d791 02ac @@1: MVI@ R5, R4 ; Read init table from elsewhere 0xd792 @@2: 0xd792 @@next: ;; ------------------------------------------------------------ ;; ;; Decode next initializer symbol. R1 will hold the 10-bit ;; ;; variable address and R2 holds the encoded constant value. ;; ;; ------------------------------------------------------------ ;; d792 02a2 MVI@ R4, R2 ; Get next record d793 0091 MOVR R2, R1 ; Save for factoring addr from cst d794 0204 002b BEQ @@done ; Terminate on zero d796 03b9 03ff ANDI #$3FF, R1 ; Factor address from data d798 01ca XORR R1, R2 ; Clear address from data d799 0042 SWAP R2 ; \_ put data in 6 LSBs d79a 0066 SLR R2, 2 ; / d79b 033a 0020 SUBI #$20, R2 ; $20-$3F are cst $00-$1F. d79d 020b 0003 BMI @@cst_tbl ; $00-$1F indicate "constant tbl" d79f 024a MVO@ R2, R1 ; \_ Store decoded constant d7a0 0220 000f B @@next ; / and move to next initializer ;; ------------------------------------------------------------ ;; ;; If the encoded value was $00 - $1F, then we have one of ;; ;; the following: ;; ;; $00 - $0F 8 bit constant in packed 8-bit table ;; ;; $10 - $1E 16 bit constant in 16-bit table ;; ;; $1F Escape code for arbitrary constant. ;; ;; ------------------------------------------------------------ ;; d7a2 000a @@cst_tbl INCR R2 ; \_ $1F specifies an escape d7a3 0204 000a BEQ @@escape ; / d7a5 02fa 000f ADDI #$F, R2 ; \_ $00-$0F specify 8 bit cst d7a7 020b 000a BMI @@8bit ; / $10-$1E specify 16 bit cst ;; ------------------------------------------------------------ ;; ;; R2 now $00-$0E for $10-$1E input. Use it to index into ;; ;; 16-bit constants table. ;; ;; ------------------------------------------------------------ ;; d7a9 02fa 6f4d ADDI #CST16, R2 d7ab 0290 MVI@ R2, R0 ; \_ Copy constant of interest out d7ac 0248 MVO@ R0, R1 ; / d7ad 0220 001c B @@next d7af 02a2 @@escape MVI@ R4, R2 ; \_ Escape: Copy next word to d7b0 024a MVO@ R2, R1 ; / indicated address d7b1 0220 0020 B @@next 0xd7b3 @@8bit: ;; ------------------------------------------------------------ ;; ;; R2 is now -$10 to -$01 to specify one of the 16 8-bit csts. ;; ;; We add CST8*2 to the index and then right-shift by 1 to ;; ;; determine the integer index. The C bit will tell us hi or ;; ;; lo byte. We bias the result up by $20 since $00-$1F don't ;; ;; require the constant table. ;; ;; ------------------------------------------------------------ ;; d7b3 02fa de9c ADDI #$FFFF AND (CST8*2+16), R2 ; IF (DEFINED CST8) AND ((CST8 AND $8000) = 0) CLRC ; MSB of CST8 was 0 ELSE d7b5 0007 _cst8_fix SETC ; MSB of CST8 was 1 ENDI d7b6 0072 RRC R2 ; Divide index by 2 d7b7 0290 MVI@ R2, R0 ; Get pair of 8 bit values d7b8 002f ADCR PC ; If idx%2 == 1, take lo half d7b9 0040 SWAP R0 ; else take hi half d7ba 03b8 00ff ANDI #$FF, R0 ; Clear away upper byte d7bc 02f8 0020 ADDI #$20, R0 ; d7be 0248 MVO@ R0, R1 ; Store it out d7bf 0220 002e B @@next d7c1 00ad @@done TSTR R5 ; Return after data? d7c2 0204 0001 BEQ @@jrr4 ; If R5==0, return after data. d7c4 00af JR R5 ; Else return to R5. d7c5 00a7 @@jrr4 JR R4 ENDP INCLUDE "misc/teaser.asm" ;; ======================================================================== ;; ;; TEASER SCREEN ;; ;; ;; ;; The Teaser Edition limits the game to checkpoints A - J. This screen ;; ;; informs the player about the upcoming cartridge release, etc. and ;; ;; directs them to the website so they can find out more. ;; ;; ======================================================================== ;; 0xd7c6 TEASER_END PROC d7c6 0275 PSHR R5 d7c7 0004 016c 02f4 CALL CLRSCR d7ca 0004 016c 01cf CALL LOADFONT d7cd fb34 DECLE TEASEFNT d7ce 0004 016e 0270 JSRD R5, P16.FLS d7d1 0003 0200 DECLE C_TAN, $200 ;01234567890123456789 ; S16 " This ends the Teaser Edition of The full edition's coming soon from Left Turn Only: " d7d3 0638 DECLE _s16p d7d4 0000 DECLE _s16p d7d5 41a2 DECLE _s16p d7d6 9a4a DECLE _s16p d7d7 2802 DECLE _s16p d7d8 2272 DECLE _s16p d7d9 0298 DECLE _s16p d7da 42a2 DECLE _s16p d7db 0228 DECLE _s16p d7dc 0000 DECLE _s16p d7dd 0000 DECLE _s16p d7de 29a2 DECLE _s16p d7df 9a0a DECLE _s16p d7e0 922a DECLE _s16p d7e1 2801 DECLE _s16p d7e2 4a22 DECLE _s16p d7e3 4aa2 DECLE _s16p d7e4 727a DECLE _s16p d7e5 7802 DECLE _s16p d7e6 0230 DECLE _s16p d7e7 0000 DECLE _s16p d7e8 0000 DECLE _s16p d7e9 0000 DECLE _s16p d7ea 0000 DECLE _s16p d7eb 0000 DECLE _s16p d7ec 0000 DECLE _s16p d7ed 0000 DECLE _s16p d7ee 0000 DECLE _s16p d7ef 0000 DECLE _s16p d7f0 0000 DECLE _s16p d7f1 0000 DECLE _s16p d7f2 0000 DECLE _s16p d7f3 0000 DECLE _s16p d7f4 0000 DECLE _s16p d7f5 0000 DECLE _s16p d7f6 0000 DECLE _s16p d7f7 0000 DECLE _s16p d7f8 0000 DECLE _s16p d7f9 0000 DECLE _s16p d7fa 0000 DECLE _s16p d7fb 0000 DECLE _s16p d7fc 0000 DECLE _s16p d7fd 0000 DECLE _s16p d7fe 0000 DECLE _s16p d7ff 0000 DECLE _s16p d800 0000 DECLE _s16p d801 0000 DECLE _s16p d802 0000 DECLE _s16p d803 0000 DECLE _s16p d804 0000 DECLE _s16p d805 0000 DECLE _s16p d806 0000 DECLE _s16p d807 0000 DECLE _s16p d808 0000 DECLE _s16p d809 0000 DECLE _s16p d80a 0000 DECLE _s16p d80b 0000 DECLE _s16p d80c 0000 DECLE _s16p d80d 0000 DECLE _s16p d80e 0000 DECLE _s16p d80f 0000 DECLE _s16p d810 0000 DECLE _s16p d811 0000 DECLE _s16p d812 0000 DECLE _s16p d813 0000 DECLE _s16p d814 0000 DECLE _s16p d815 0000 DECLE _s16p d816 0000 DECLE _s16p d817 0000 DECLE _s16p d818 0000 DECLE _s16p d819 0000 DECLE _s16p d81a 41a2 DECLE _s16p d81b 0228 DECLE _s16p d81c aa32 DECLE _s16p d81d 6262 DECLE _s16p d81e 2802 DECLE _s16p d81f 4a22 DECLE _s16p d820 4aa2 DECLE _s16p d821 727a DECLE _s16p d822 983a DECLE _s16p d823 0000 DECLE _s16p d824 1802 DECLE _s16p d825 6a7a DECLE _s16p d826 724a DECLE _s16p d827 0238 DECLE _s16p d828 7a9a DECLE _s16p d829 727a DECLE _s16p d82a 3002 DECLE _s16p d82b 7a92 DECLE _s16p d82c 0268 DECLE _s16p d82d 0000 DECLE _s16p d82e 0000 DECLE _s16p d82f 2962 DECLE _s16p d830 a232 DECLE _s16p d831 a001 DECLE _s16p d832 92aa DECLE _s16p d833 0270 DECLE _s16p d834 717a DECLE _s16p d835 ca62 DECLE _s16p d836 00d0 DECLE _s16p d837 0000 DECLE _s16p ; MVII #gen_cstk_card(1, GRAM, White, NoAdv), R0 d838 02b8 080f MVII #((1)*8 + __CSTK.GRAM_White + __CSTK.NoAdv), R0 d83a 02b9 0014 MVII #20, R1 ; MVII #disp_ptr(11,0), R4 d83c 02bc 02dc MVII #($200 + 11*20 + 0), R4 d83e 0260 @@loop: MVO@ R0, R4 d83f 02f8 0008 ADDI #8, R0 d841 0011 DECR R1 d842 022c 0005 BNEQ @@loop ; SETISR TEASEISR d844 0004 016c 0244 CALL _SETISR d847 d854 DECLE TEASEISR d848 0004 016d 0227 JSRE R5, WAIT d84b 003c DECLE 60 d84c 0004 016c 02fe CALL MENUINP d84f 0004 016c 01cf CALL LOADFONT d852 fa5a DECLE FONT d853 02b7 PULR PC ENDP 0xd854 TEASEISR PROC d854 02bc f981 MVII #LMPTITLE, R4 d856 02bd 3960 MVII #RGRAM, R5 d858 02b9 0028 MVII #10*4, R1 d85a 02a0 @@l0: MVI@ R4, R0 d85b 0268 MVO@ R0, R5 d85c 0040 SWAP R0 d85d 0268 MVO@ R0, R5 d85e 0011 DECR R1 d85f 022c 0006 BNEQ @@l0 d861 02bc f9b2 MVII #TITLESP, R4 d863 01ed CLRR R5 d864 02ba 0005 MVII #5, R2 d866 0091 MOVR R2, R1 d867 02a0 @@l1: MVI@ R4, R0 d868 0268 MVO@ R0, R5 d869 0011 DECR R1 d86a 022c 0004 BNEQ @@l1 d86c 02fd 0003 ADDI #3, R5 d86e 0091 MOVR R2, R1 d86f 02a0 @@l2: MVI@ R4, R0 d870 02f8 0008 ADDI #8, R0 d872 0268 MVO@ R0, R5 d873 0011 DECR R1 d874 022c 0006 BNEQ @@l2 d876 02fd 0003 ADDI #3, R5 d878 02a0 @@l3: MVI@ R4, R0 d879 0268 MVO@ R0, R5 d87a 0012 DECR R2 d87b 022c 0004 BNEQ @@l3 d87d 01c0 CLRR R0 d87e 0240 0028 MVO R0, $28 d880 0240 002c MVO R0, $2C d882 0280 0021 MVI $21, R0 ; SETISR MISCISR d884 0004 016c 0244 CALL _SETISR d887 6e14 DECLE MISCISR d888 0220 c875 B ISRRET ENDP ;__ 0xfc _OS2.size EQU $ - _OS2 d88a 0000 CKSUM DECLE 0 ; checksum IF ($ < $D000) OR ($ > $E000) ERR "D000 overflow" ENDI 0xd88b _D000.end EQU $ d88b ffff d88c ffff d88d ffff d88e ffff d88f ffff d890 ffff d891 ffff d892 ffff d893 ffff d894 ffff d895 ffff d896 ffff d897 ffff d898 ffff d899 ffff d89a ffff d89b ffff d89c ffff d89d ffff d89e ffff d89f ffff d8a0 ffff d8a1 ffff d8a2 ffff d8a3 ffff d8a4 ffff d8a5 ffff d8a6 ffff d8a7 ffff d8a8 ffff d8a9 ffff d8aa ffff d8ab ffff d8ac ffff d8ad ffff d8ae ffff d8af ffff d8b0 ffff d8b1 ffff d8b2 ffff d8b3 ffff d8b4 ffff d8b5 ffff d8b6 ffff d8b7 ffff d8b8 ffff d8b9 ffff d8ba ffff d8bb ffff d8bc ffff d8bd ffff d8be ffff d8bf ffff d8c0 ffff d8c1 ffff d8c2 ffff d8c3 ffff d8c4 ffff d8c5 ffff d8c6 ffff d8c7 ffff d8c8 ffff d8c9 ffff d8ca ffff d8cb ffff d8cc ffff d8cd ffff d8ce ffff d8cf ffff d8d0 ffff d8d1 ffff d8d2 ffff d8d3 ffff d8d4 ffff d8d5 ffff d8d6 ffff d8d7 ffff d8d8 ffff d8d9 ffff d8da ffff d8db ffff d8dc ffff d8dd ffff d8de ffff d8df ffff d8e0 ffff d8e1 ffff d8e2 ffff d8e3 ffff d8e4 ffff d8e5 ffff d8e6 ffff d8e7 ffff d8e8 ffff d8e9 ffff d8ea ffff d8eb ffff d8ec ffff d8ed ffff d8ee ffff d8ef ffff d8f0 ffff d8f1 ffff d8f2 ffff d8f3 ffff d8f4 ffff d8f5 ffff d8f6 ffff d8f7 ffff d8f8 ffff d8f9 ffff d8fa ffff d8fb ffff d8fc ffff d8fd ffff d8fe ffff d8ff ffff d900 ffff d901 ffff d902 ffff d903 ffff d904 ffff d905 ffff d906 ffff d907 ffff d908 ffff d909 ffff d90a ffff d90b ffff d90c ffff d90d ffff d90e ffff d90f ffff d910 ffff d911 ffff d912 ffff d913 ffff d914 ffff d915 ffff d916 ffff d917 ffff d918 ffff d919 ffff d91a ffff d91b ffff d91c ffff d91d ffff d91e ffff d91f ffff d920 ffff d921 ffff d922 ffff d923 ffff d924 ffff d925 ffff d926 ffff d927 ffff d928 ffff d929 ffff d92a ffff d92b ffff d92c ffff d92d ffff d92e ffff d92f ffff d930 ffff d931 ffff d932 ffff d933 ffff d934 ffff d935 ffff d936 ffff d937 ffff d938 ffff d939 ffff d93a ffff d93b ffff d93c ffff d93d ffff d93e ffff d93f ffff d940 ffff d941 ffff d942 ffff d943 ffff d944 ffff d945 ffff d946 ffff d947 ffff d948 ffff d949 ffff d94a ffff d94b ffff d94c ffff d94d ffff d94e ffff d94f ffff d950 ffff d951 ffff d952 ffff d953 ffff d954 ffff d955 ffff d956 ffff d957 ffff d958 ffff d959 ffff d95a ffff d95b ffff d95c ffff d95d ffff d95e ffff d95f ffff d960 ffff d961 ffff d962 ffff d963 ffff d964 ffff d965 ffff d966 ffff d967 ffff d968 ffff d969 ffff d96a ffff d96b ffff d96c ffff d96d ffff d96e ffff d96f ffff d970 ffff d971 ffff d972 ffff d973 ffff d974 ffff d975 ffff d976 ffff d977 ffff d978 ffff d979 ffff d97a ffff d97b ffff d97c ffff d97d ffff d97e ffff d97f ffff d980 ffff d981 ffff d982 ffff d983 ffff d984 ffff d985 ffff d986 ffff d987 ffff d988 ffff d989 ffff d98a ffff d98b ffff d98c ffff d98d ffff d98e ffff d98f ffff d990 ffff d991 ffff d992 ffff d993 ffff d994 ffff d995 ffff d996 ffff d997 ffff d998 ffff d999 ffff d99a ffff d99b ffff d99c ffff d99d ffff d99e ffff d99f ffff d9a0 ffff d9a1 ffff d9a2 ffff d9a3 ffff d9a4 ffff d9a5 ffff d9a6 ffff d9a7 ffff d9a8 ffff d9a9 ffff d9aa ffff d9ab ffff d9ac ffff d9ad ffff d9ae ffff d9af ffff d9b0 ffff d9b1 ffff d9b2 ffff d9b3 ffff d9b4 ffff d9b5 ffff d9b6 ffff d9b7 ffff d9b8 ffff d9b9 ffff d9ba ffff d9bb ffff d9bc ffff d9bd ffff d9be ffff d9bf ffff d9c0 ffff d9c1 ffff d9c2 ffff d9c3 ffff d9c4 ffff d9c5 ffff d9c6 ffff d9c7 ffff d9c8 ffff d9c9 ffff d9ca ffff d9cb ffff d9cc ffff d9cd ffff d9ce ffff d9cf ffff d9d0 ffff d9d1 ffff d9d2 ffff d9d3 ffff d9d4 ffff d9d5 ffff d9d6 ffff d9d7 ffff d9d8 ffff d9d9 ffff d9da ffff d9db ffff d9dc ffff d9dd ffff d9de ffff d9df ffff d9e0 ffff d9e1 ffff d9e2 ffff d9e3 ffff d9e4 ffff d9e5 ffff d9e6 ffff d9e7 ffff d9e8 ffff d9e9 ffff d9ea ffff d9eb ffff d9ec ffff d9ed ffff d9ee ffff d9ef ffff d9f0 ffff d9f1 ffff d9f2 ffff d9f3 ffff d9f4 ffff d9f5 ffff d9f6 ffff d9f7 ffff d9f8 ffff d9f9 ffff d9fa ffff d9fb ffff d9fc ffff d9fd ffff d9fe ffff d9ff ffff da00 ffff da01 ffff da02 ffff da03 ffff da04 ffff da05 ffff da06 ffff da07 ffff da08 ffff da09 ffff da0a ffff da0b ffff da0c ffff da0d ffff da0e ffff da0f ffff da10 ffff da11 ffff da12 ffff da13 ffff da14 ffff da15 ffff da16 ffff da17 ffff da18 ffff da19 ffff da1a ffff da1b ffff da1c ffff da1d ffff da1e ffff da1f ffff da20 ffff da21 ffff da22 ffff da23 ffff da24 ffff da25 ffff da26 ffff da27 ffff da28 ffff da29 ffff da2a ffff da2b ffff da2c ffff da2d ffff da2e ffff da2f ffff da30 ffff da31 ffff da32 ffff da33 ffff da34 ffff da35 ffff da36 ffff da37 ffff da38 ffff da39 ffff da3a ffff da3b ffff da3c ffff da3d ffff da3e ffff da3f ffff da40 ffff da41 ffff da42 ffff da43 ffff da44 ffff da45 ffff da46 ffff da47 ffff da48 ffff da49 ffff da4a ffff da4b ffff da4c ffff da4d ffff da4e ffff da4f ffff da50 ffff da51 ffff da52 ffff da53 ffff da54 ffff da55 ffff da56 ffff da57 ffff da58 ffff da59 ffff da5a ffff da5b ffff da5c ffff da5d ffff da5e ffff da5f ffff da60 ffff da61 ffff da62 ffff da63 ffff da64 ffff da65 ffff da66 ffff da67 ffff da68 ffff da69 ffff da6a ffff da6b ffff da6c ffff da6d ffff da6e ffff da6f ffff da70 ffff da71 ffff da72 ffff da73 ffff da74 ffff da75 ffff da76 ffff da77 ffff da78 ffff da79 ffff da7a ffff da7b ffff da7c ffff da7d ffff da7e ffff da7f ffff da80 ffff da81 ffff da82 ffff da83 ffff da84 ffff da85 ffff da86 ffff da87 ffff da88 ffff da89 ffff da8a ffff da8b ffff da8c ffff da8d ffff da8e ffff da8f ffff da90 ffff da91 ffff da92 ffff da93 ffff da94 ffff da95 ffff da96 ffff da97 ffff da98 ffff da99 ffff da9a ffff da9b ffff da9c ffff da9d ffff da9e ffff da9f ffff daa0 ffff daa1 ffff daa2 ffff daa3 ffff daa4 ffff daa5 ffff daa6 ffff daa7 ffff daa8 ffff daa9 ffff daaa ffff daab ffff daac ffff daad ffff daae ffff daaf ffff dab0 ffff dab1 ffff dab2 ffff dab3 ffff dab4 ffff dab5 ffff dab6 ffff dab7 ffff dab8 ffff dab9 ffff daba ffff dabb ffff dabc ffff dabd ffff dabe ffff dabf ffff dac0 ffff dac1 ffff dac2 ffff dac3 ffff dac4 ffff dac5 ffff dac6 ffff dac7 ffff dac8 ffff dac9 ffff daca ffff dacb ffff dacc ffff dacd ffff dace ffff dacf ffff dad0 ffff dad1 ffff dad2 ffff dad3 ffff dad4 ffff dad5 ffff dad6 ffff dad7 ffff dad8 ffff dad9 ffff dada ffff dadb ffff dadc ffff dadd ffff dade ffff dadf ffff dae0 ffff dae1 ffff dae2 ffff dae3 ffff dae4 ffff dae5 ffff dae6 ffff dae7 ffff dae8 ffff dae9 ffff daea ffff daeb ffff daec ffff daed ffff daee ffff daef ffff daf0 ffff daf1 ffff daf2 ffff daf3 ffff daf4 ffff daf5 ffff daf6 ffff daf7 ffff daf8 ffff daf9 ffff dafa ffff dafb ffff dafc ffff dafd ffff dafe ffff daff ffff db00 ffff db01 ffff db02 ffff db03 ffff db04 ffff db05 ffff db06 ffff db07 ffff db08 ffff db09 ffff db0a ffff db0b ffff db0c ffff db0d ffff db0e ffff db0f ffff db10 ffff db11 ffff db12 ffff db13 ffff db14 ffff db15 ffff db16 ffff db17 ffff db18 ffff db19 ffff db1a ffff db1b ffff db1c ffff db1d ffff db1e ffff db1f ffff db20 ffff db21 ffff db22 ffff db23 ffff db24 ffff db25 ffff db26 ffff db27 ffff db28 ffff db29 ffff db2a ffff db2b ffff db2c ffff db2d ffff db2e ffff db2f ffff db30 ffff db31 ffff db32 ffff db33 ffff db34 ffff db35 ffff db36 ffff db37 ffff db38 ffff db39 ffff db3a ffff db3b ffff db3c ffff db3d ffff db3e ffff db3f ffff db40 ffff db41 ffff db42 ffff db43 ffff db44 ffff db45 ffff db46 ffff db47 ffff db48 ffff db49 ffff db4a ffff db4b ffff db4c ffff db4d ffff db4e ffff db4f ffff db50 ffff db51 ffff db52 ffff db53 ffff db54 ffff db55 ffff db56 ffff db57 ffff db58 ffff db59 ffff db5a ffff db5b ffff db5c ffff db5d ffff db5e ffff db5f ffff db60 ffff db61 ffff db62 ffff db63 ffff db64 ffff db65 ffff db66 ffff db67 ffff db68 ffff db69 ffff db6a ffff db6b ffff db6c ffff db6d ffff db6e ffff db6f ffff db70 ffff db71 ffff db72 ffff db73 ffff db74 ffff db75 ffff db76 ffff db77 ffff db78 ffff db79 ffff db7a ffff db7b ffff db7c ffff db7d ffff db7e ffff db7f ffff db80 ffff db81 ffff db82 ffff db83 ffff db84 ffff db85 ffff db86 ffff db87 ffff db88 ffff db89 ffff db8a ffff db8b ffff db8c ffff db8d ffff db8e ffff db8f ffff db90 ffff db91 ffff db92 ffff db93 ffff db94 ffff db95 ffff db96 ffff db97 ffff db98 ffff db99 ffff db9a ffff db9b ffff db9c ffff db9d ffff db9e ffff db9f ffff dba0 ffff dba1 ffff dba2 ffff dba3 ffff dba4 ffff dba5 ffff dba6 ffff dba7 ffff dba8 ffff dba9 ffff dbaa ffff dbab ffff dbac ffff dbad ffff dbae ffff dbaf ffff dbb0 ffff dbb1 ffff dbb2 ffff dbb3 ffff dbb4 ffff dbb5 ffff dbb6 ffff dbb7 ffff dbb8 ffff dbb9 ffff dbba ffff dbbb ffff dbbc ffff dbbd ffff dbbe ffff dbbf ffff dbc0 ffff dbc1 ffff dbc2 ffff dbc3 ffff dbc4 ffff dbc5 ffff dbc6 ffff dbc7 ffff dbc8 ffff dbc9 ffff dbca ffff dbcb ffff dbcc ffff dbcd ffff dbce ffff dbcf ffff dbd0 ffff dbd1 ffff dbd2 ffff dbd3 ffff dbd4 ffff dbd5 ffff dbd6 ffff dbd7 ffff dbd8 ffff dbd9 ffff dbda ffff dbdb ffff dbdc ffff dbdd ffff dbde ffff dbdf ffff dbe0 ffff dbe1 ffff dbe2 ffff dbe3 ffff dbe4 ffff dbe5 ffff dbe6 ffff dbe7 ffff dbe8 ffff dbe9 ffff dbea ffff dbeb ffff dbec ffff dbed ffff dbee ffff dbef ffff dbf0 ffff dbf1 ffff dbf2 ffff dbf3 ffff dbf4 ffff dbf5 ffff dbf6 ffff dbf7 ffff dbf8 ffff dbf9 ffff dbfa ffff dbfb ffff dbfc ffff dbfd ffff dbfe ffff dbff ffff dc00 ffff dc01 ffff dc02 ffff dc03 ffff dc04 ffff dc05 ffff dc06 ffff dc07 ffff dc08 ffff dc09 ffff dc0a ffff dc0b ffff dc0c ffff dc0d ffff dc0e ffff dc0f ffff dc10 ffff dc11 ffff dc12 ffff dc13 ffff dc14 ffff dc15 ffff dc16 ffff dc17 ffff dc18 ffff dc19 ffff dc1a ffff dc1b ffff dc1c ffff dc1d ffff dc1e ffff dc1f ffff dc20 ffff dc21 ffff dc22 ffff dc23 ffff dc24 ffff dc25 ffff dc26 ffff dc27 ffff dc28 ffff dc29 ffff dc2a ffff dc2b ffff dc2c ffff dc2d ffff dc2e ffff dc2f ffff dc30 ffff dc31 ffff dc32 ffff dc33 ffff dc34 ffff dc35 ffff dc36 ffff dc37 ffff dc38 ffff dc39 ffff dc3a ffff dc3b ffff dc3c ffff dc3d ffff dc3e ffff dc3f ffff dc40 ffff dc41 ffff dc42 ffff dc43 ffff dc44 ffff dc45 ffff dc46 ffff dc47 ffff dc48 ffff dc49 ffff dc4a ffff dc4b ffff dc4c ffff dc4d ffff dc4e ffff dc4f ffff dc50 ffff dc51 ffff dc52 ffff dc53 ffff dc54 ffff dc55 ffff dc56 ffff dc57 ffff dc58 ffff dc59 ffff dc5a ffff dc5b ffff dc5c ffff dc5d ffff dc5e ffff dc5f ffff dc60 ffff dc61 ffff dc62 ffff dc63 ffff dc64 ffff dc65 ffff dc66 ffff dc67 ffff dc68 ffff dc69 ffff dc6a ffff dc6b ffff dc6c ffff dc6d ffff dc6e ffff dc6f ffff dc70 ffff dc71 ffff dc72 ffff dc73 ffff dc74 ffff dc75 ffff dc76 ffff dc77 ffff dc78 ffff dc79 ffff dc7a ffff dc7b ffff dc7c ffff dc7d ffff dc7e ffff dc7f ffff dc80 ffff dc81 ffff dc82 ffff dc83 ffff dc84 ffff dc85 ffff dc86 ffff dc87 ffff dc88 ffff dc89 ffff dc8a ffff dc8b ffff dc8c ffff dc8d ffff dc8e ffff dc8f ffff dc90 ffff dc91 ffff dc92 ffff dc93 ffff dc94 ffff dc95 ffff dc96 ffff dc97 ffff dc98 ffff dc99 ffff dc9a ffff dc9b ffff dc9c ffff dc9d ffff dc9e ffff dc9f ffff dca0 ffff dca1 ffff dca2 ffff dca3 ffff dca4 ffff dca5 ffff dca6 ffff dca7 ffff dca8 ffff dca9 ffff dcaa ffff dcab ffff dcac ffff dcad ffff dcae ffff dcaf ffff dcb0 ffff dcb1 ffff dcb2 ffff dcb3 ffff dcb4 ffff dcb5 ffff dcb6 ffff dcb7 ffff dcb8 ffff dcb9 ffff dcba ffff dcbb ffff dcbc ffff dcbd ffff dcbe ffff dcbf ffff dcc0 ffff dcc1 ffff dcc2 ffff dcc3 ffff dcc4 ffff dcc5 ffff dcc6 ffff dcc7 ffff dcc8 ffff dcc9 ffff dcca ffff dccb ffff dccc ffff dccd ffff dcce ffff dccf ffff dcd0 ffff dcd1 ffff dcd2 ffff dcd3 ffff dcd4 ffff dcd5 ffff dcd6 ffff dcd7 ffff dcd8 ffff dcd9 ffff dcda ffff dcdb ffff dcdc ffff dcdd ffff dcde ffff dcdf ffff dce0 ffff dce1 ffff dce2 ffff dce3 ffff dce4 ffff dce5 ffff dce6 ffff dce7 ffff dce8 ffff dce9 ffff dcea ffff dceb ffff dcec ffff dced ffff dcee ffff dcef ffff dcf0 ffff dcf1 ffff dcf2 ffff dcf3 ffff dcf4 ffff dcf5 ffff dcf6 ffff dcf7 ffff dcf8 ffff dcf9 ffff dcfa ffff dcfb ffff dcfc ffff dcfd ffff dcfe ffff dcff ffff dd00 ffff dd01 ffff dd02 ffff dd03 ffff dd04 ffff dd05 ffff dd06 ffff dd07 ffff dd08 ffff dd09 ffff dd0a ffff dd0b ffff dd0c ffff dd0d ffff dd0e ffff dd0f ffff dd10 ffff dd11 ffff dd12 ffff dd13 ffff dd14 ffff dd15 ffff dd16 ffff dd17 ffff dd18 ffff dd19 ffff dd1a ffff dd1b ffff dd1c ffff dd1d ffff dd1e ffff dd1f ffff dd20 ffff dd21 ffff dd22 ffff dd23 ffff dd24 ffff dd25 ffff dd26 ffff dd27 ffff dd28 ffff dd29 ffff dd2a ffff dd2b ffff dd2c ffff dd2d ffff dd2e ffff dd2f ffff dd30 ffff dd31 ffff dd32 ffff dd33 ffff dd34 ffff dd35 ffff dd36 ffff dd37 ffff dd38 ffff dd39 ffff dd3a ffff dd3b ffff dd3c ffff dd3d ffff dd3e ffff dd3f ffff dd40 ffff dd41 ffff dd42 ffff dd43 ffff dd44 ffff dd45 ffff dd46 ffff dd47 ffff dd48 ffff dd49 ffff dd4a ffff dd4b ffff dd4c ffff dd4d ffff dd4e ffff dd4f ffff dd50 ffff dd51 ffff dd52 ffff dd53 ffff dd54 ffff dd55 ffff dd56 ffff dd57 ffff dd58 ffff dd59 ffff dd5a ffff dd5b ffff dd5c ffff dd5d ffff dd5e ffff dd5f ffff dd60 ffff dd61 ffff dd62 ffff dd63 ffff dd64 ffff dd65 ffff dd66 ffff dd67 ffff dd68 ffff dd69 ffff dd6a ffff dd6b ffff dd6c ffff dd6d ffff dd6e ffff dd6f ffff dd70 ffff dd71 ffff dd72 ffff dd73 ffff dd74 ffff dd75 ffff dd76 ffff dd77 ffff dd78 ffff dd79 ffff dd7a ffff dd7b ffff dd7c ffff dd7d ffff dd7e ffff dd7f ffff dd80 ffff dd81 ffff dd82 ffff dd83 ffff dd84 ffff dd85 ffff dd86 ffff dd87 ffff dd88 ffff dd89 ffff dd8a ffff dd8b ffff dd8c ffff dd8d ffff dd8e ffff dd8f ffff dd90 ffff dd91 ffff dd92 ffff dd93 ffff dd94 ffff dd95 ffff dd96 ffff dd97 ffff dd98 ffff dd99 ffff dd9a ffff dd9b ffff dd9c ffff dd9d ffff dd9e ffff dd9f ffff dda0 ffff dda1 ffff dda2 ffff dda3 ffff dda4 ffff dda5 ffff dda6 ffff dda7 ffff dda8 ffff dda9 ffff ddaa ffff ddab ffff ddac ffff ddad ffff ddae ffff ddaf ffff ddb0 ffff ddb1 ffff ddb2 ffff ddb3 ffff ddb4 ffff ddb5 ffff ddb6 ffff ddb7 ffff ddb8 ffff ddb9 ffff ddba ffff ddbb ffff ddbc ffff ddbd ffff ddbe ffff ddbf ffff ddc0 ffff ddc1 ffff ddc2 ffff ddc3 ffff ddc4 ffff ddc5 ffff ddc6 ffff ddc7 ffff ddc8 ffff ddc9 ffff ddca ffff ddcb ffff ddcc ffff ddcd ffff ddce ffff ddcf ffff ddd0 ffff ddd1 ffff ddd2 ffff ddd3 ffff ddd4 ffff ddd5 ffff ddd6 ffff ddd7 ffff ddd8 ffff ddd9 ffff ddda ffff dddb ffff dddc ffff dddd ffff ddde ffff dddf ffff dde0 ffff dde1 ffff dde2 ffff dde3 ffff dde4 ffff dde5 ffff dde6 ffff dde7 ffff dde8 ffff dde9 ffff ddea ffff ddeb ffff ddec ffff dded ffff ddee ffff ddef ffff ddf0 ffff ddf1 ffff ddf2 ffff ddf3 ffff ddf4 ffff ddf5 ffff ddf6 ffff ddf7 ffff ddf8 ffff ddf9 ffff ddfa ffff ddfb ffff ddfc ffff ddfd ffff ddfe ffff ddff ffff de00 ffff de01 ffff de02 ffff de03 ffff de04 ffff de05 ffff de06 ffff de07 ffff de08 ffff de09 ffff de0a ffff de0b ffff de0c ffff de0d ffff de0e ffff de0f ffff de10 ffff de11 ffff de12 ffff de13 ffff de14 ffff de15 ffff de16 ffff de17 ffff de18 ffff de19 ffff de1a ffff de1b ffff de1c ffff de1d ffff de1e ffff de1f ffff de20 ffff de21 ffff de22 ffff de23 ffff de24 ffff de25 ffff de26 ffff de27 ffff de28 ffff de29 ffff de2a ffff de2b ffff de2c ffff de2d ffff de2e ffff de2f ffff de30 ffff de31 ffff de32 ffff de33 ffff de34 ffff de35 ffff de36 ffff de37 ffff de38 ffff de39 ffff de3a ffff de3b ffff de3c ffff de3d ffff de3e ffff de3f ffff de40 ffff de41 ffff de42 ffff de43 ffff de44 ffff de45 ffff de46 ffff de47 ffff de48 ffff de49 ffff de4a ffff de4b ffff de4c ffff de4d ffff de4e ffff de4f ffff de50 ffff de51 ffff de52 ffff de53 ffff de54 ffff de55 ffff de56 ffff de57 ffff de58 ffff de59 ffff de5a ffff de5b ffff de5c ffff de5d ffff de5e ffff de5f ffff de60 ffff de61 ffff de62 ffff de63 ffff de64 ffff de65 ffff de66 ffff de67 ffff de68 ffff de69 ffff de6a ffff de6b ffff de6c ffff de6d ffff de6e ffff de6f ffff de70 ffff de71 ffff de72 ffff de73 ffff de74 ffff de75 ffff de76 ffff de77 ffff de78 ffff de79 ffff de7a ffff de7b ffff de7c ffff de7d ffff de7e ffff de7f ffff de80 ffff de81 ffff de82 ffff de83 ffff de84 ffff de85 ffff de86 ffff de87 ffff de88 ffff de89 ffff de8a ffff de8b ffff de8c ffff de8d ffff de8e ffff de8f ffff de90 ffff de91 ffff de92 ffff de93 ffff de94 ffff de95 ffff de96 ffff de97 ffff de98 ffff de99 ffff de9a ffff de9b ffff de9c ffff de9d ffff de9e ffff de9f ffff dea0 ffff dea1 ffff dea2 ffff dea3 ffff dea4 ffff dea5 ffff dea6 ffff dea7 ffff dea8 ffff dea9 ffff deaa ffff deab ffff deac ffff dead ffff deae ffff deaf ffff deb0 ffff deb1 ffff deb2 ffff deb3 ffff deb4 ffff deb5 ffff deb6 ffff deb7 ffff deb8 ffff deb9 ffff deba ffff debb ffff debc ffff debd ffff debe ffff debf ffff dec0 ffff dec1 ffff dec2 ffff dec3 ffff dec4 ffff dec5 ffff dec6 ffff dec7 ffff dec8 ffff dec9 ffff deca ffff decb ffff decc ffff decd ffff dece ffff decf ffff ded0 ffff ded1 ffff ded2 ffff ded3 ffff ded4 ffff ded5 ffff ded6 ffff ded7 ffff ded8 ffff ded9 ffff deda ffff dedb ffff dedc ffff dedd ffff dede ffff dedf ffff dee0 ffff dee1 ffff dee2 ffff dee3 ffff dee4 ffff dee5 ffff dee6 ffff dee7 ffff dee8 ffff dee9 ffff deea ffff deeb ffff deec ffff deed ffff deee ffff deef ffff def0 ffff def1 ffff def2 ffff def3 ffff def4 ffff def5 ffff def6 ffff def7 ffff def8 ffff def9 ffff defa ffff defb ffff defc ffff defd ffff defe ffff deff ffff df00 ffff df01 ffff df02 ffff df03 ffff df04 ffff df05 ffff df06 ffff df07 ffff df08 ffff df09 ffff df0a ffff df0b ffff df0c ffff df0d ffff df0e ffff df0f ffff df10 ffff df11 ffff df12 ffff df13 ffff df14 ffff df15 ffff df16 ffff df17 ffff df18 ffff df19 ffff df1a ffff df1b ffff df1c ffff df1d ffff df1e ffff df1f ffff df20 ffff df21 ffff df22 ffff df23 ffff df24 ffff df25 ffff df26 ffff df27 ffff df28 ffff df29 ffff df2a ffff df2b ffff df2c ffff df2d ffff df2e ffff df2f ffff df30 ffff df31 ffff df32 ffff df33 ffff df34 ffff df35 ffff df36 ffff df37 ffff df38 ffff df39 ffff df3a ffff df3b ffff df3c ffff df3d ffff df3e ffff df3f ffff df40 ffff df41 ffff df42 ffff df43 ffff df44 ffff df45 ffff df46 ffff df47 ffff df48 ffff df49 ffff df4a ffff df4b ffff df4c ffff df4d ffff df4e ffff df4f ffff df50 ffff df51 ffff df52 ffff df53 ffff df54 ffff df55 ffff df56 ffff df57 ffff df58 ffff df59 ffff df5a ffff df5b ffff df5c ffff df5d ffff df5e ffff df5f ffff df60 ffff df61 ffff df62 ffff df63 ffff df64 ffff df65 ffff df66 ffff df67 ffff df68 ffff df69 ffff df6a ffff df6b ffff df6c ffff df6d ffff df6e ffff df6f ffff df70 ffff df71 ffff df72 ffff df73 ffff df74 ffff df75 ffff df76 ffff df77 ffff df78 ffff df79 ffff df7a ffff df7b ffff df7c ffff df7d ffff df7e ffff df7f ffff df80 ffff df81 ffff df82 ffff df83 ffff df84 ffff df85 ffff df86 ffff df87 ffff df88 ffff df89 ffff df8a ffff df8b ffff df8c ffff df8d ffff df8e ffff df8f ffff df90 ffff df91 ffff df92 ffff df93 ffff df94 ffff df95 ffff df96 ffff df97 ffff df98 ffff df99 ffff df9a ffff df9b ffff df9c ffff df9d ffff df9e ffff df9f ffff dfa0 ffff dfa1 ffff dfa2 ffff dfa3 ffff dfa4 ffff dfa5 ffff dfa6 ffff dfa7 ffff dfa8 ffff dfa9 ffff dfaa ffff dfab ffff dfac ffff dfad ffff dfae ffff dfaf ffff dfb0 ffff dfb1 ffff dfb2 ffff dfb3 ffff dfb4 ffff dfb5 ffff dfb6 ffff dfb7 ffff dfb8 ffff dfb9 ffff dfba ffff dfbb ffff dfbc ffff dfbd ffff dfbe ffff dfbf ffff dfc0 ffff dfc1 ffff dfc2 ffff dfc3 ffff dfc4 ffff dfc5 ffff dfc6 ffff dfc7 ffff dfc8 ffff dfc9 ffff dfca ffff dfcb ffff dfcc ffff dfcd ffff dfce ffff dfcf ffff dfd0 ffff dfd1 ffff dfd2 ffff dfd3 ffff dfd4 ffff dfd5 ffff dfd6 ffff dfd7 ffff dfd8 ffff dfd9 ffff dfda ffff dfdb ffff dfdc ffff dfdd ffff dfde ffff dfdf ffff dfe0 ffff dfe1 ffff dfe2 ffff dfe3 ffff dfe4 ffff dfe5 ffff dfe6 ffff dfe7 ffff dfe8 ffff dfe9 ffff dfea ffff dfeb ffff dfec ffff dfed ffff dfee ffff dfef ffff dff0 ffff dff1 ffff dff2 ffff dff3 ffff dff4 ffff dff5 ffff dff6 ffff dff7 ffff dff8 ffff dff9 ffff dffa ffff dffb ffff dffc ffff dffd ffff dffe ffff dfff ffff 0xf000 ORG $F000 0xf000 _GFX EQU $ INCLUDE "gfx/topmount.asm" 0xf000 TOPMOUNT PROC ; alignment #0 ; columns 0 .. 7 ; - - - ; ........ f000 0000 DECLE $0000 ; ........ ; - - - ; ........ f001 0000 DECLE $0000 ; ........ ; - - - ; ........ f002 0000 DECLE $0000 ; ........ ; - - - ; #....... f003 e080 DECLE $E080 ; ###..... ; - - - ; ####.### f004 fdf7 DECLE $FDF7 ; ######.# ; - - - ; #######. f005 fffe DECLE $FFFE ; ######## ; - - - ; #.###### f006 efbf DECLE $EFBF ; ###.#### ; - - - ; ######## f007 fbff DECLE $FBFF ; #####.## ; columns 8 .. 15 ; - - - ; ##...... f008 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ####.... f009 78f0 DECLE $78F0 ; .####... ; - - - ; ####.##. f00a fff6 DECLE $FFF6 ; ######## ; - - - ; ######## f00b ffff DECLE $FFFF ; ######## ; - - - ; ##.##### f00c efdf DECLE $EFDF ; ###.#### ; - - - ; ######## f00d ffff DECLE $FFFF ; ######## ; - - - ; ##.##### f00e ffdf DECLE $FFDF ; ######## ; - - - ; #####.## f00f fffb DECLE $FFFB ; ######## ; columns 16 .. 23 ; - - - ; ........ f010 0100 DECLE $0100 ; .......# ; - - - ; .....### f011 0707 DECLE $0707 ; .....### ; - - - ; ....#### f012 0f0f DECLE $0F0F ; ....#### ; - - - ; ...##### f013 bf1f DECLE $BF1F ; #.###### ; - - - ; ##.##### f014 efdf DECLE $EFDF ; ###.#### ; - - - ; ####.### f015 fff7 DECLE $FFF7 ; ######## ; - - - ; ######.# f016 fefd DECLE $FEFD ; #######. ; - - - ; ######## f017 ffff DECLE $FFFF ; ######## ; columns 24 .. 31 ; - - - ; ........ f018 0000 DECLE $0000 ; ........ ; - - - ; ........ f019 0000 DECLE $0000 ; ........ ; - - - ; ...#.... f01a 3c10 DECLE $3C10 ; ..####.. ; - - - ; .####### f01b ef7f DECLE $EF7F ; ###.#### ; - - - ; ######## f01c ffff DECLE $FFFF ; ######## ; - - - ; ######## f01d fdff DECLE $FDFF ; ######.# ; - - - ; #####.## f01e fbfb DECLE $FBFB ; #####.## ; - - - ; ####.### f01f fff7 DECLE $FFF7 ; ######## ; alignment #1 ; columns 0 .. 7 ; - - - ; ........ f020 0000 DECLE $0000 ; ........ ; - - - ; ........ f021 0000 DECLE $0000 ; ........ ; - - - ; ........ f022 0000 DECLE $0000 ; ........ ; - - - ; ........ f023 c100 DECLE $C100 ; ##.....# ; - - - ; ###.#### f024 fbef DECLE $FBEF ; #####.## ; - - - ; ######.# f025 fffd DECLE $FFFD ; ######## ; - - - ; .####### f026 df7f DECLE $DF7F ; ##.##### ; - - - ; ######## f027 f7ff DECLE $F7FF ; ####.### ; columns 8 .. 15 ; - - - ; #....... f028 c080 DECLE $C080 ; ##...... ; - - - ; ###..... f029 f0e0 DECLE $F0E0 ; ####.... ; - - - ; ###.##.. f02a feec DECLE $FEEC ; #######. ; - - - ; ######## f02b ffff DECLE $FFFF ; ######## ; - - - ; #.###### f02c dfbf DECLE $DFBF ; ##.##### ; - - - ; ######## f02d ffff DECLE $FFFF ; ######## ; - - - ; #.###### f02e ffbf DECLE $FFBF ; ######## ; - - - ; ####.### f02f fff7 DECLE $FFF7 ; ######## ; columns 16 .. 23 ; - - - ; .......# f030 0301 DECLE $0301 ; ......## ; - - - ; ....#### f031 0e0f DECLE $0E0F ; ....###. ; - - - ; ...##### f032 1f1f DECLE $1F1F ; ...##### ; - - - ; ..###### f033 7f3f DECLE $7F3F ; .####### ; - - - ; #.###### f034 dfbf DECLE $DFBF ; ##.##### ; - - - ; ###.#### f035 ffef DECLE $FFEF ; ######## ; - - - ; #####.## f036 fdfb DECLE $FDFB ; ######.# ; - - - ; ######## f037 ffff DECLE $FFFF ; ######## ; columns 24 .. 31 ; - - - ; ........ f038 0000 DECLE $0000 ; ........ ; - - - ; ........ f039 0000 DECLE $0000 ; ........ ; - - - ; ..#..... f03a 7820 DECLE $7820 ; .####... ; - - - ; #######. f03b dffe DECLE $DFFE ; ##.##### ; - - - ; ######## f03c ffff DECLE $FFFF ; ######## ; - - - ; ######## f03d fbff DECLE $FBFF ; #####.## ; - - - ; ####.### f03e f7f7 DECLE $F7F7 ; ####.### ; - - - ; ###.#### f03f ffef DECLE $FFEF ; ######## ; alignment #2 ; columns 0 .. 7 ; - - - ; ........ f040 0000 DECLE $0000 ; ........ ; - - - ; ........ f041 0000 DECLE $0000 ; ........ ; - - - ; ........ f042 0000 DECLE $0000 ; ........ ; - - - ; .......# f043 8301 DECLE $8301 ; #.....## ; - - - ; ##.##### f044 f7df DECLE $F7DF ; ####.### ; - - - ; #####.## f045 fffb DECLE $FFFB ; ######## ; - - - ; ######## f046 bfff DECLE $BFFF ; #.###### ; - - - ; ######## f047 efff DECLE $EFFF ; ###.#### ; columns 8 .. 15 ; - - - ; ........ f048 8000 DECLE $8000 ; #....... ; - - - ; ##...... f049 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ##.##... f04a fcd8 DECLE $FCD8 ; ######.. ; - - - ; #######. f04b fffe DECLE $FFFE ; ######## ; - - - ; .####### f04c bf7f DECLE $BF7F ; #.###### ; - - - ; ######## f04d ffff DECLE $FFFF ; ######## ; - - - ; .######. f04e ff7e DECLE $FF7E ; ######## ; - - - ; ###.#### f04f ffef DECLE $FFEF ; ######## ; columns 16 .. 23 ; - - - ; ......## f050 0703 DECLE $0703 ; .....### ; - - - ; ...##### f051 1d1f DECLE $1D1F ; ...###.# ; - - - ; ..###### f052 3f3f DECLE $3F3F ; ..###### ; - - - ; .####### f053 ff7f DECLE $FF7F ; ######## ; - - - ; .####### f054 bf7f DECLE $BF7F ; #.###### ; - - - ; ##.##### f055 ffdf DECLE $FFDF ; ######## ; - - - ; ####.### f056 fbf7 DECLE $FBF7 ; #####.## ; - - - ; ######## f057 ffff DECLE $FFFF ; ######## ; columns 24 .. 31 ; - - - ; ........ f058 0000 DECLE $0000 ; ........ ; - - - ; ........ f059 0000 DECLE $0000 ; ........ ; - - - ; .#...... f05a f040 DECLE $F040 ; ####.... ; - - - ; ######.. f05b befc DECLE $BEFC ; #.#####. ; - - - ; ######## f05c ffff DECLE $FFFF ; ######## ; - - - ; ######## f05d f7ff DECLE $F7FF ; ####.### ; - - - ; ###.#### f05e efef DECLE $EFEF ; ###.#### ; - - - ; ##.##### f05f ffdf DECLE $FFDF ; ######## ; alignment #3 ; columns 0 .. 7 ; - - - ; ........ f060 0000 DECLE $0000 ; ........ ; - - - ; ........ f061 0000 DECLE $0000 ; ........ ; - - - ; ........ f062 0100 DECLE $0100 ; .......# ; - - - ; ......## f063 0703 DECLE $0703 ; .....### ; - - - ; #.###### f064 efbf DECLE $EFBF ; ###.#### ; - - - ; ####.### f065 fff7 DECLE $FFF7 ; ######## ; - - - ; ######## f066 7fff DECLE $7FFF ; .####### ; - - - ; ######## f067 dfff DECLE $DFFF ; ##.##### ; columns 8 .. 15 ; - - - ; ........ f068 0000 DECLE $0000 ; ........ ; - - - ; #....... f069 c080 DECLE $C080 ; ##...... ; - - - ; #.##.... f06a f8b0 DECLE $F8B0 ; #####... ; - - - ; ######.. f06b fffc DECLE $FFFC ; ######## ; - - - ; ######## f06c 7fff DECLE $7FFF ; .####### ; - - - ; ######## f06d ffff DECLE $FFFF ; ######## ; - - - ; ######.# f06e fffd DECLE $FFFD ; ######## ; - - - ; ##.##### f06f ffdf DECLE $FFDF ; ######## ; columns 16 .. 23 ; - - - ; .....##. f070 0f06 DECLE $0F06 ; ....#### ; - - - ; ..###### f071 3b3f DECLE $3B3F ; ..###.## ; - - - ; .####### f072 7f7f DECLE $7F7F ; .####### ; - - - ; ######## f073 ffff DECLE $FFFF ; ######## ; - - - ; #######. f074 7ffe DECLE $7FFE ; .####### ; - - - ; #.###### f075 ffbf DECLE $FFBF ; ######## ; - - - ; ###.###. f076 f7ee DECLE $F7EE ; ####.### ; - - - ; ######## f077 ffff DECLE $FFFF ; ######## ; columns 24 .. 31 ; - - - ; ........ f078 0000 DECLE $0000 ; ........ ; - - - ; ........ f079 0000 DECLE $0000 ; ........ ; - - - ; #....... f07a e080 DECLE $E080 ; ###..... ; - - - ; #####... f07b 7df8 DECLE $7DF8 ; .#####.# ; - - - ; #######. f07c fffe DECLE $FFFE ; ######## ; - - - ; ######## f07d efff DECLE $EFFF ; ###.#### ; - - - ; ##.##### f07e dfdf DECLE $DFDF ; ##.##### ; - - - ; #.###### f07f ffbf DECLE $FFBF ; ######## ; alignment #4 ; columns 0 .. 7 ; - - - ; ........ f080 0000 DECLE $0000 ; ........ ; - - - ; ........ f081 0000 DECLE $0000 ; ........ ; - - - ; .......# f082 0301 DECLE $0301 ; ......## ; - - - ; .....### f083 0e07 DECLE $0E07 ; ....###. ; - - - ; .####### f084 df7f DECLE $DF7F ; ##.##### ; - - - ; ###.#### f085 ffef DECLE $FFEF ; ######## ; - - - ; ######## f086 ffff DECLE $FFFF ; ######## ; - - - ; ######## f087 bfff DECLE $BFFF ; #.###### ; columns 8 .. 15 ; - - - ; ........ f088 0000 DECLE $0000 ; ........ ; - - - ; ........ f089 8000 DECLE $8000 ; #....... ; - - - ; .##..... f08a f060 DECLE $F060 ; ####.... ; - - - ; #####... f08b fef8 DECLE $FEF8 ; #######. ; - - - ; ######## f08c ffff DECLE $FFFF ; ######## ; - - - ; ######## f08d ffff DECLE $FFFF ; ######## ; - - - ; #####.## f08e fefb DECLE $FEFB ; #######. ; - - - ; #.###### f08f ffbf DECLE $FFBF ; ######## ; columns 16 .. 23 ; - - - ; ....##.. f090 1e0c DECLE $1E0C ; ...####. ; - - - ; .####### f091 777f DECLE $777F ; .###.### ; - - - ; ######## f092 ffff DECLE $FFFF ; ######## ; - - - ; ######## f093 ffff DECLE $FFFF ; ######## ; - - - ; ######.# f094 fefd DECLE $FEFD ; #######. ; - - - ; .####### f095 ff7f DECLE $FF7F ; ######## ; - - - ; ##.###.# f096 efdd DECLE $EFDD ; ###.#### ; - - - ; ######## f097 ffff DECLE $FFFF ; ######## ; columns 24 .. 31 ; - - - ; ........ f098 0000 DECLE $0000 ; ........ ; - - - ; ........ f099 0000 DECLE $0000 ; ........ ; - - - ; ........ f09a c000 DECLE $C000 ; ##...... ; - - - ; ####...# f09b fbf1 DECLE $FBF1 ; #####.## ; - - - ; ######.# f09c fefd DECLE $FEFD ; #######. ; - - - ; ######## f09d dfff DECLE $DFFF ; ##.##### ; - - - ; #.###### f09e bfbf DECLE $BFBF ; #.###### ; - - - ; .####### f09f ff7f DECLE $FF7F ; ######## ; alignment #5 ; columns 0 .. 7 ; - - - ; ........ f0a0 0000 DECLE $0000 ; ........ ; - - - ; ........ f0a1 0000 DECLE $0000 ; ........ ; - - - ; ......#. f0a2 0702 DECLE $0702 ; .....### ; - - - ; ....#### f0a3 1d0f DECLE $1D0F ; ...###.# ; - - - ; ######## f0a4 bfff DECLE $BFFF ; #.###### ; - - - ; ##.##### f0a5 ffdf DECLE $FFDF ; ######## ; - - - ; ######## f0a6 ffff DECLE $FFFF ; ######## ; - - - ; #######. f0a7 7ffe DECLE $7FFE ; .####### ; columns 8 .. 15 ; - - - ; ........ f0a8 0000 DECLE $0000 ; ........ ; - - - ; ........ f0a9 0000 DECLE $0000 ; ........ ; - - - ; ##...... f0aa e0c0 DECLE $E0C0 ; ###..... ; - - - ; ####.... f0ab fcf0 DECLE $FCF0 ; ######.. ; - - - ; #######. f0ac fffe DECLE $FFFE ; ######## ; - - - ; ######## f0ad ffff DECLE $FFFF ; ######## ; - - - ; ####.### f0ae fdf7 DECLE $FDF7 ; ######.# ; - - - ; .####### f0af ff7f DECLE $FF7F ; ######## ; columns 16 .. 23 ; - - - ; ...##... f0b0 3c18 DECLE $3C18 ; ..####.. ; - - - ; #######. f0b1 effe DECLE $EFFE ; ###.#### ; - - - ; #######. f0b2 fffe DECLE $FFFE ; ######## ; - - - ; ######## f0b3 ffff DECLE $FFFF ; ######## ; - - - ; #####.## f0b4 fdfb DECLE $FDFB ; ######.# ; - - - ; ######## f0b5 ffff DECLE $FFFF ; ######## ; - - - ; #.###.## f0b6 dfbb DECLE $DFBB ; ##.##### ; - - - ; ######## f0b7 ffff DECLE $FFFF ; ######## ; columns 24 .. 31 ; - - - ; ........ f0b8 0000 DECLE $0000 ; ........ ; - - - ; ........ f0b9 0000 DECLE $0000 ; ........ ; - - - ; .......# f0ba 8101 DECLE $8101 ; #......# ; - - - ; ###...## f0bb f7e3 DECLE $F7E3 ; ####.### ; - - - ; #####.## f0bc fdfb DECLE $FDFB ; ######.# ; - - - ; #######. f0bd bffe DECLE $BFFE ; #.###### ; - - - ; .####### f0be 7f7f DECLE $7F7F ; .####### ; - - - ; ######## f0bf ffff DECLE $FFFF ; ######## ; alignment #6 ; columns 0 .. 7 ; - - - ; ........ f0c0 0000 DECLE $0000 ; ........ ; - - - ; ........ f0c1 0000 DECLE $0000 ; ........ ; - - - ; .....#.. f0c2 0f04 DECLE $0F04 ; ....#### ; - - - ; ...##### f0c3 3b1f DECLE $3B1F ; ..###.## ; - - - ; ######## f0c4 7fff DECLE $7FFF ; .####### ; - - - ; #.###### f0c5 ffbf DECLE $FFBF ; ######## ; - - - ; #######. f0c6 fefe DECLE $FEFE ; #######. ; - - - ; ######.# f0c7 fffd DECLE $FFFD ; ######## ; columns 8 .. 15 ; - - - ; ........ f0c8 0000 DECLE $0000 ; ........ ; - - - ; ........ f0c9 0000 DECLE $0000 ; ........ ; - - - ; #....... f0ca c080 DECLE $C080 ; ##...... ; - - - ; ###..... f0cb f8e0 DECLE $F8E0 ; #####... ; - - - ; ######.# f0cc fffd DECLE $FFFD ; ######## ; - - - ; ######## f0cd ffff DECLE $FFFF ; ######## ; - - - ; ###.#### f0ce fbef DECLE $FBEF ; #####.## ; - - - ; ######## f0cf feff DECLE $FEFF ; #######. ; columns 16 .. 23 ; - - - ; ..##.... f0d0 7830 DECLE $7830 ; .####... ; - - - ; ######.. f0d1 defc DECLE $DEFC ; ##.####. ; - - - ; ######.# f0d2 fffd DECLE $FFFD ; ######## ; - - - ; ######## f0d3 ffff DECLE $FFFF ; ######## ; - - - ; ####.### f0d4 fbf7 DECLE $FBF7 ; #####.## ; - - - ; ######## f0d5 ffff DECLE $FFFF ; ######## ; - - - ; .###.### f0d6 bf77 DECLE $BF77 ; #.###### ; - - - ; #######. f0d7 fffe DECLE $FFFE ; ######## ; columns 24 .. 31 ; - - - ; ........ f0d8 0000 DECLE $0000 ; ........ ; - - - ; .......# f0d9 0101 DECLE $0101 ; .......# ; - - - ; ......## f0da 0303 DECLE $0303 ; ......## ; - - - ; ##...### f0db efc7 DECLE $EFC7 ; ###.#### ; - - - ; ####.### f0dc fbf7 DECLE $FBF7 ; #####.## ; - - - ; ######.# f0dd 7ffd DECLE $7FFD ; .####### ; - - - ; ######## f0de ffff DECLE $FFFF ; ######## ; - - - ; ######## f0df ffff DECLE $FFFF ; ######## ; alignment #7 ; columns 0 .. 7 ; - - - ; ........ f0e0 0000 DECLE $0000 ; ........ ; - - - ; ........ f0e1 0000 DECLE $0000 ; ........ ; - - - ; ....#... f0e2 1e08 DECLE $1E08 ; ...####. ; - - - ; ..###### f0e3 773f DECLE $773F ; .###.### ; - - - ; ######## f0e4 ffff DECLE $FFFF ; ######## ; - - - ; .####### f0e5 fe7f DECLE $FE7F ; #######. ; - - - ; ######.# f0e6 fdfd DECLE $FDFD ; ######.# ; - - - ; #####.## f0e7 fffb DECLE $FFFB ; ######## ; columns 8 .. 15 ; - - - ; ........ f0e8 0000 DECLE $0000 ; ........ ; - - - ; ........ f0e9 0000 DECLE $0000 ; ........ ; - - - ; ........ f0ea 8000 DECLE $8000 ; #....... ; - - - ; ##...... f0eb f0c0 DECLE $F0C0 ; ####.... ; - - - ; #####.## f0ec fefb DECLE $FEFB ; #######. ; - - - ; ######## f0ed ffff DECLE $FFFF ; ######## ; - - - ; ##.##### f0ee f7df DECLE $F7DF ; ####.### ; - - - ; ######## f0ef fdff DECLE $FDFF ; ######.# ; columns 16 .. 23 ; - - - ; .##..... f0f0 f060 DECLE $F060 ; ####.... ; - - - ; #####... f0f1 bcf8 DECLE $BCF8 ; #.####.. ; - - - ; #####.## f0f2 fffb DECLE $FFFB ; ######## ; - - - ; ######## f0f3 ffff DECLE $FFFF ; ######## ; - - - ; ###.#### f0f4 f7ef DECLE $F7EF ; ####.### ; - - - ; ######## f0f5 ffff DECLE $FFFF ; ######## ; - - - ; ###.#### f0f6 7fef DECLE $7FEF ; .####### ; - - - ; ######.# f0f7 fffd DECLE $FFFD ; ######## ; columns 24 .. 31 ; - - - ; ........ f0f8 0000 DECLE $0000 ; ........ ; - - - ; ......## f0f9 0303 DECLE $0303 ; ......## ; - - - ; .....### f0fa 0707 DECLE $0707 ; .....### ; - - - ; #...#### f0fb df8f DECLE $DF8F ; ##.##### ; - - - ; ###.#### f0fc f7ef DECLE $F7EF ; ####.### ; - - - ; #####.## f0fd fffb DECLE $FFFB ; ######## ; - - - ; #######. f0fe fffe DECLE $FFFE ; ######## ; - - - ; ######## f0ff ffff DECLE $FFFF ; ######## ENDP INCLUDE "gfx/midmount.asm" 0xf100 MIDMOUNT PROC ; alignment #0 ; columns 32 .. 39 ; - - - ; ........ f100 3f00 DECLE $3F00 ; ..###### ; - - - ; ######## f101 c3ff DECLE $C3FF ; ##....## ; - - - ; .#####.# f102 877d DECLE $877D ; #....### ; - - - ; ######## f103 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f104 0000 DECLE $0000 ; ........ ; - - - ; .....### f105 bf07 DECLE $BF07 ; #.###### ; - - - ; ######## f106 37ff DECLE $37FF ; ..##.### ; - - - ; ###.#.## f107 f7eb DECLE $F7EB ; ####.### ; columns 48 .. 55 ; - - - ; ###..... f108 f8e0 DECLE $F8E0 ; #####... ; - - - ; ###.###. f109 d7ee DECLE $D7EE ; ##.#.### ; - - - ; .##.#### f10a fe6f DECLE $FE6F ; #######. ; - - - ; ######## f10b ffff DECLE $FFFF ; ######## ; columns 56 .. 63 ; - - - ; #....... f10c 6380 DECLE $6380 ; .##...## ; - - - ; ##.##### f10d eedf DECLE $EEDF ; ###.###. ; - - - ; ....##.. f10e fe0c DECLE $FE0C ; #######. ; - - - ; ###...## f10f 3fe3 DECLE $3FE3 ; ..###### ; columns 0 .. 7 ; - - - ; ######## f110 00ff DECLE $00FF ; ........ ; - - - ; ######## f111 ffff DECLE $FFFF ; ######## ; - - - ; ..###### f112 c03f DECLE $C03F ; ##...... ; - - - ; ######## f113 0cff DECLE $0CFF ; ....##.. ; columns 8 .. 15 ; - - - ; .......# f114 8601 DECLE $8601 ; #....##. ; - - - ; #####.## f115 77fb DECLE $77FB ; .###.### ; - - - ; #####... f116 9ff8 DECLE $9FF8 ; #..##### ; - - - ; ..###..# f117 ff39 DECLE $FF39 ; ######## ; columns 16 .. 23 ; - - - ; ........ f118 0700 DECLE $0700 ; .....### ; - - - ; ##.###.. f119 fbdc DECLE $FBDC ; #####.## ; - - - ; #.####.. f11a 7fbc DECLE $7FBC ; .####### ; - - - ; #######. f11b fffe DECLE $FFFE ; ######## ; columns 24 .. 31 ; - - - ; ..###... f11c fe38 DECLE $FE38 ; #######. ; - - - ; .####### f11d f07f DECLE $F07F ; ####.... ; - - - ; ###.#### f11e f8ef DECLE $F8EF ; #####... ; - - - ; ######## f11f ffff DECLE $FFFF ; ######## ; alignment #1 ; columns 32 .. 39 ; - - - ; ........ f120 7f00 DECLE $7F00 ; .####### ; - - - ; #######. f121 87fe DECLE $87FE ; #....### ; - - - ; #####.## f122 0ffb DECLE $0FFB ; ....#### ; - - - ; ######## f123 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f124 0000 DECLE $0000 ; ........ ; - - - ; ....#### f125 7f0f DECLE $7F0F ; .####### ; - - - ; #######. f126 6ffe DECLE $6FFE ; .##.#### ; - - - ; ##.#.### f127 efd7 DECLE $EFD7 ; ###.#### ; columns 48 .. 55 ; - - - ; ##...... f128 f0c0 DECLE $F0C0 ; ####.... ; - - - ; ##.###.. f129 afdc DECLE $AFDC ; #.#.#### ; - - - ; ##.##### f12a fcdf DECLE $FCDF ; ######.. ; - - - ; ######## f12b ffff DECLE $FFFF ; ######## ; columns 56 .. 63 ; - - - ; .......# f12c c701 DECLE $C701 ; ##...### ; - - - ; #.###### f12d ddbf DECLE $DDBF ; ##.###.# ; - - - ; ...##... f12e fd18 DECLE $FD18 ; ######.# ; - - - ; ##...### f12f 7fc7 DECLE $7FC7 ; .####### ; columns 0 .. 7 ; - - - ; ######## f130 00ff DECLE $00FF ; ........ ; - - - ; ######## f131 ffff DECLE $FFFF ; ######## ; - - - ; .######. f132 817e DECLE $817E ; #......# ; - - - ; ######## f133 18ff DECLE $18FF ; ...##... ; columns 8 .. 15 ; - - - ; ......## f134 0c03 DECLE $0C03 ; ....##.. ; - - - ; ####.### f135 eff7 DECLE $EFF7 ; ###.#### ; - - - ; ####.... f136 3ff0 DECLE $3FF0 ; ..###### ; - - - ; .###..## f137 fe73 DECLE $FE73 ; #######. ; columns 16 .. 23 ; - - - ; ........ f138 0f00 DECLE $0F00 ; ....#### ; - - - ; #.###..# f139 f6b9 DECLE $F6B9 ; ####.##. ; - - - ; .####..# f13a ff79 DECLE $FF79 ; ######## ; - - - ; ######.. f13b fffc DECLE $FFFC ; ######## ; columns 24 .. 31 ; - - - ; .###.... f13c fc70 DECLE $FC70 ; ######.. ; - - - ; ######## f13d e1ff DECLE $E1FF ; ###....# ; - - - ; ##.##### f13e f0df DECLE $F0DF ; ####.... ; - - - ; ######## f13f ffff DECLE $FFFF ; ######## ; alignment #2 ; columns 32 .. 39 ; - - - ; ........ f140 ff00 DECLE $FF00 ; ######## ; - - - ; ######.# f141 0ffd DECLE $0FFD ; ....#### ; - - - ; ####.### f142 1ff7 DECLE $1FF7 ; ...##### ; - - - ; ######## f143 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f144 0000 DECLE $0000 ; ........ ; - - - ; ...##### f145 ff1f DECLE $FF1F ; ######## ; - - - ; ######.# f146 defd DECLE $DEFD ; ##.####. ; - - - ; #.#.#### f147 dfaf DECLE $DFAF ; ##.##### ; columns 48 .. 55 ; - - - ; #....... f148 e080 DECLE $E080 ; ###..... ; - - - ; #.###... f149 5eb8 DECLE $5EB8 ; .#.####. ; - - - ; #.###### f14a f8bf DECLE $F8BF ; #####... ; - - - ; ######## f14b ffff DECLE $FFFF ; ######## ; columns 56 .. 63 ; - - - ; ......## f14c 8f03 DECLE $8F03 ; #...#### ; - - - ; .####### f14d bb7f DECLE $BB7F ; #.###.## ; - - - ; ..##...# f14e fb31 DECLE $FB31 ; #####.## ; - - - ; #...#### f14f ff8f DECLE $FF8F ; ######## ; columns 0 .. 7 ; - - - ; #######. f150 01fe DECLE $01FE ; .......# ; - - - ; ######## f151 ffff DECLE $FFFF ; ######## ; - - - ; ######.. f152 03fc DECLE $03FC ; ......## ; - - - ; ######## f153 30ff DECLE $30FF ; ..##.... ; columns 8 .. 15 ; - - - ; .....### f154 1807 DECLE $1807 ; ...##... ; - - - ; ###.#### f155 dfef DECLE $DFEF ; ##.##### ; - - - ; ###..... f156 7fe0 DECLE $7FE0 ; .####### ; - - - ; ###..### f157 fce7 DECLE $FCE7 ; ######.. ; columns 16 .. 23 ; - - - ; ........ f158 1e00 DECLE $1E00 ; ...####. ; - - - ; .###..## f159 ed73 DECLE $ED73 ; ###.##.# ; - - - ; ####..## f15a fef3 DECLE $FEF3 ; #######. ; - - - ; #####... f15b fff8 DECLE $FFF8 ; ######## ; columns 24 .. 31 ; - - - ; ###..... f15c f8e0 DECLE $F8E0 ; #####... ; - - - ; ######## f15d c3ff DECLE $C3FF ; ##....## ; - - - ; #.#####. f15e e1be DECLE $E1BE ; ###....# ; - - - ; ######## f15f ffff DECLE $FFFF ; ######## ; alignment #3 ; columns 32 .. 39 ; - - - ; .......# f160 ff01 DECLE $FF01 ; ######## ; - - - ; #####.## f161 1ffb DECLE $1FFB ; ...##### ; - - - ; ###.#### f162 3fef DECLE $3FEF ; ..###### ; - - - ; ######## f163 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f164 0100 DECLE $0100 ; .......# ; - - - ; ..###### f165 fe3f DECLE $FE3F ; #######. ; - - - ; #####.## f166 bcfb DECLE $BCFB ; #.####.. ; - - - ; .#.##### f167 bf5f DECLE $BF5F ; #.###### ; columns 48 .. 55 ; - - - ; ........ f168 c000 DECLE $C000 ; ##...... ; - - - ; .###.... f169 bd70 DECLE $BD70 ; #.####.# ; - - - ; .####### f16a f17f DECLE $F17F ; ####...# ; - - - ; ######## f16b ffff DECLE $FFFF ; ######## ; columns 56 .. 63 ; - - - ; .....### f16c 1f07 DECLE $1F07 ; ...##### ; - - - ; ######## f16d 76ff DECLE $76FF ; .###.##. ; - - - ; .##...## f16e f763 DECLE $F763 ; ####.### ; - - - ; ...##### f16f ff1f DECLE $FF1F ; ######## ; columns 0 .. 7 ; - - - ; ######.. f170 03fc DECLE $03FC ; ......## ; - - - ; #######. f171 fffe DECLE $FFFE ; ######## ; - - - ; #####... f172 07f8 DECLE $07F8 ; .....### ; - - - ; ######## f173 61ff DECLE $61FF ; .##....# ; columns 8 .. 15 ; - - - ; ....#### f174 300f DECLE $300F ; ..##.... ; - - - ; ##.##### f175 bfdf DECLE $BFDF ; #.###### ; - - - ; ##.....# f176 fec1 DECLE $FEC1 ; #######. ; - - - ; ##..#### f177 f8cf DECLE $F8CF ; #####... ; columns 16 .. 23 ; - - - ; ........ f178 3c00 DECLE $3C00 ; ..####.. ; - - - ; ###..### f179 dbe7 DECLE $DBE7 ; ##.##.## ; - - - ; ###..### f17a fce7 DECLE $FCE7 ; ######.. ; - - - ; ####...# f17b fff1 DECLE $FFF1 ; ######## ; columns 24 .. 31 ; - - - ; ##...... f17c f0c0 DECLE $F0C0 ; ####.... ; - - - ; #######. f17d 87fe DECLE $87FE ; #....### ; - - - ; .#####.# f17e c37d DECLE $C37D ; ##....## ; - - - ; ######## f17f ffff DECLE $FFFF ; ######## ; alignment #4 ; columns 32 .. 39 ; - - - ; ......## f180 ff03 DECLE $FF03 ; ######## ; - - - ; ####.### f181 3ff7 DECLE $3FF7 ; ..###### ; - - - ; ##.####. f182 7fde DECLE $7FDE ; .####### ; - - - ; ######## f183 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f184 0300 DECLE $0300 ; ......## ; - - - ; .####### f185 fc7f DECLE $FC7F ; ######.. ; - - - ; ####.### f186 78f7 DECLE $78F7 ; .####... ; - - - ; #.###### f187 7fbf DECLE $7FBF ; .####### ; columns 48 .. 55 ; - - - ; ........ f188 8000 DECLE $8000 ; #....... ; - - - ; ###..... f189 7be0 DECLE $7BE0 ; .####.## ; - - - ; ######## f18a e3ff DECLE $E3FF ; ###...## ; - - - ; #######. f18b fffe DECLE $FFFE ; ######## ; columns 56 .. 63 ; - - - ; ....###. f18c 3f0e DECLE $3F0E ; ..###### ; - - - ; #######. f18d edfe DECLE $EDFE ; ###.##.# ; - - - ; ##...##. f18e efc6 DECLE $EFC6 ; ###.#### ; - - - ; ..###### f18f ff3f DECLE $FF3F ; ######## ; columns 0 .. 7 ; - - - ; #####... f190 06f8 DECLE $06F8 ; .....##. ; - - - ; ######.# f191 fefd DECLE $FEFD ; #######. ; - - - ; ####.... f192 0ff0 DECLE $0FF0 ; ....#### ; - - - ; #######. f193 c3fe DECLE $C3FE ; ##....## ; columns 8 .. 15 ; - - - ; ...##### f194 601f DECLE $601F ; .##..... ; - - - ; #.###### f195 7fbf DECLE $7FBF ; .####### ; - - - ; #.....## f196 fc83 DECLE $FC83 ; ######.. ; - - - ; #..##### f197 f09f DECLE $F09F ; ####.... ; columns 16 .. 23 ; - - - ; ........ f198 7800 DECLE $7800 ; .####... ; - - - ; ##..#### f199 b7cf DECLE $B7CF ; #.##.### ; - - - ; ##..#### f19a f9cf DECLE $F9CF ; #####..# ; - - - ; ###...## f19b ffe3 DECLE $FFE3 ; ######## ; columns 24 .. 31 ; - - - ; #....... f19c e080 DECLE $E080 ; ###..... ; - - - ; ######.# f19d 0ffd DECLE $0FFD ; ....#### ; - - - ; #####.## f19e 87fb DECLE $87FB ; #....### ; - - - ; ######## f19f ffff DECLE $FFFF ; ######## ; alignment #5 ; columns 32 .. 39 ; - - - ; .....### f1a0 ff07 DECLE $FF07 ; ######## ; - - - ; ###.#### f1a1 7eef DECLE $7EEF ; .######. ; - - - ; #.####.# f1a2 ffbd DECLE $FFBD ; ######## ; - - - ; ######## f1a3 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f1a4 0700 DECLE $0700 ; .....### ; - - - ; ######## f1a5 f8ff DECLE $F8FF ; #####... ; - - - ; ###.#### f1a6 f0ef DECLE $F0EF ; ####.... ; - - - ; .####### f1a7 ff7f DECLE $FF7F ; ######## ; columns 48 .. 55 ; - - - ; ........ f1a8 0000 DECLE $0000 ; ........ ; - - - ; ##...... f1a9 f7c0 DECLE $F7C0 ; ####.### ; - - - ; ######## f1aa c6ff DECLE $C6FF ; ##...##. ; - - - ; ######.# f1ab fefd DECLE $FEFD ; #######. ; columns 56 .. 63 ; - - - ; ...###.. f1ac 7f1c DECLE $7F1C ; .####### ; - - - ; ######.# f1ad dafd DECLE $DAFD ; ##.##.#. ; - - - ; #...##.# f1ae df8d DECLE $DF8D ; ##.##### ; - - - ; .####### f1af ff7f DECLE $FF7F ; ######## ; columns 0 .. 7 ; - - - ; ####.... f1b0 0cf0 DECLE $0CF0 ; ....##.. ; - - - ; #####.## f1b1 fdfb DECLE $FDFB ; ######.# ; - - - ; ###....# f1b2 1fe1 DECLE $1FE1 ; ...##### ; - - - ; ######.. f1b3 87fc DECLE $87FC ; #....### ; columns 8 .. 15 ; - - - ; ..###### f1b4 c03f DECLE $C03F ; ##...... ; - - - ; .####### f1b5 ff7f DECLE $FF7F ; ######## ; - - - ; .....### f1b6 f807 DECLE $F807 ; #####... ; - - - ; ..###### f1b7 e13f DECLE $E13F ; ###....# ; columns 16 .. 23 ; - - - ; ........ f1b8 f000 DECLE $F000 ; ####.... ; - - - ; #..##### f1b9 6e9f DECLE $6E9F ; .##.###. ; - - - ; #..##### f1ba f39f DECLE $F39F ; ####..## ; - - - ; ##...### f1bb ffc7 DECLE $FFC7 ; ######## ; columns 24 .. 31 ; - - - ; ........ f1bc c000 DECLE $C000 ; ##...... ; - - - ; #####.## f1bd 1ffb DECLE $1FFB ; ...##### ; - - - ; ####.### f1be 0ff7 DECLE $0FF7 ; ....#### ; - - - ; ######## f1bf ffff DECLE $FFFF ; ######## ; alignment #6 ; columns 32 .. 39 ; - - - ; ....###. f1c0 ff0e DECLE $FF0E ; ######## ; - - - ; ##.##### f1c1 fcdf DECLE $FCDF ; ######.. ; - - - ; .####.## f1c2 fe7b DECLE $FE7B ; #######. ; - - - ; ######## f1c3 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f1c4 0f00 DECLE $0F00 ; ....#### ; - - - ; ######## f1c5 f0ff DECLE $F0FF ; ####.... ; - - - ; ##.##### f1c6 e1df DECLE $E1DF ; ###....# ; - - - ; ######## f1c7 ffff DECLE $FFFF ; ######## ; columns 48 .. 55 ; - - - ; ........ f1c8 0000 DECLE $0000 ; ........ ; - - - ; #......# f1c9 ef81 DECLE $EF81 ; ###.#### ; - - - ; ######## f1ca 8dff DECLE $8DFF ; #...##.# ; - - - ; #####.#. f1cb fdfa DECLE $FDFA ; ######.# ; columns 56 .. 63 ; - - - ; ..###... f1cc fe38 DECLE $FE38 ; #######. ; - - - ; #####.## f1cd b5fb DECLE $B5FB ; #.##.#.# ; - - - ; ...##.## f1ce bf1b DECLE $BF1B ; #.###### ; - - - ; ######## f1cf ffff DECLE $FFFF ; ######## ; columns 0 .. 7 ; - - - ; ###..... f1d0 18e0 DECLE $18E0 ; ...##... ; - - - ; ####.### f1d1 fbf7 DECLE $FBF7 ; #####.## ; - - - ; ##....## f1d2 3fc3 DECLE $3FC3 ; ..###### ; - - - ; #####... f1d3 0ff8 DECLE $0FF8 ; ....#### ; columns 8 .. 15 ; - - - ; .####### f1d4 807f DECLE $807F ; #....... ; - - - ; ######## f1d5 ffff DECLE $FFFF ; ######## ; - - - ; ....#### f1d6 f00f DECLE $F00F ; ####.... ; - - - ; .####### f1d7 c37f DECLE $C37F ; ##....## ; columns 16 .. 23 ; - - - ; ........ f1d8 e100 DECLE $E100 ; ###....# ; - - - ; ..#####. f1d9 dd3e DECLE $DD3E ; ##.###.# ; - - - ; ..#####. f1da e73e DECLE $E73E ; ###..### ; - - - ; #...###. f1db ff8e DECLE $FF8E ; ######## ; columns 24 .. 31 ; - - - ; ........ f1dc 8100 DECLE $8100 ; #......# ; - - - ; ####.### f1dd 3ef7 DECLE $3EF7 ; ..#####. ; - - - ; ###.#### f1de 1fef DECLE $1FEF ; ...##### ; - - - ; ######## f1df ffff DECLE $FFFF ; ######## ; alignment #7 ; columns 32 .. 39 ; - - - ; ...###.. f1e0 ff1c DECLE $FF1C ; ######## ; - - - ; #.###### f1e1 f8bf DECLE $F8BF ; #####... ; - - - ; ####.### f1e2 fcf7 DECLE $FCF7 ; ######.. ; - - - ; ######## f1e3 ffff DECLE $FFFF ; ######## ; columns 40 .. 47 ; - - - ; ........ f1e4 1f00 DECLE $1F00 ; ...##### ; - - - ; ######## f1e5 e1ff DECLE $E1FF ; ###....# ; - - - ; #.#####. f1e6 c3be DECLE $C3BE ; ##....## ; - - - ; ######## f1e7 ffff DECLE $FFFF ; ######## ; columns 48 .. 55 ; - - - ; ........ f1e8 0000 DECLE $0000 ; ........ ; - - - ; ......## f1e9 df03 DECLE $DF03 ; ##.##### ; - - - ; ######## f1ea 1bff DECLE $1BFF ; ...##.## ; - - - ; ####.#.# f1eb fbf5 DECLE $FBF5 ; #####.## ; columns 56 .. 63 ; - - - ; .###.... f1ec fc70 DECLE $FC70 ; ######.. ; - - - ; ####.### f1ed 6bf7 DECLE $6BF7 ; .##.#.## ; - - - ; ..##.### f1ee 7f37 DECLE $7F37 ; .####### ; - - - ; ######## f1ef ffff DECLE $FFFF ; ######## ; columns 0 .. 7 ; - - - ; ##...... f1f0 31c0 DECLE $31C0 ; ..##...# ; - - - ; ###.#### f1f1 f7ef DECLE $F7EF ; ####.### ; - - - ; #....##. f1f2 7f86 DECLE $7F86 ; .####### ; - - - ; ####...# f1f3 1ff1 DECLE $1FF1 ; ...##### ; columns 8 .. 15 ; - - - ; ######## f1f4 00ff DECLE $00FF ; ........ ; - - - ; ######## f1f5 ffff DECLE $FFFF ; ######## ; - - - ; ...##### f1f6 e01f DECLE $E01F ; ###..... ; - - - ; ######## f1f7 86ff DECLE $86FF ; #....##. ; columns 16 .. 23 ; - - - ; ........ f1f8 c300 DECLE $C300 ; ##....## ; - - - ; .#####.# f1f9 bb7d DECLE $BB7D ; #.###.## ; - - - ; .#####.. f1fa cf7c DECLE $CF7C ; ##..#### ; - - - ; ...###.. f1fb ff1c DECLE $FF1C ; ######## ; columns 24 .. 31 ; - - - ; ........ f1fc 0300 DECLE $0300 ; ......## ; - - - ; ###.###. f1fd 7dee DECLE $7DEE ; .#####.# ; - - - ; ##.####. f1fe 3fde DECLE $3FDE ; ..###### ; - - - ; ######## f1ff ffff DECLE $FFFF ; ######## ENDP INCLUDE "gfx/midcity1.asm" 0xf200 MIDCITY1 PROC ; alignment #0 ; columns 0 .. 7 ; - - - ; ###...#. f200 fce2 DECLE $FCE2 ; ######.. ; - - - ; #####... f201 80f8 DECLE $80F8 ; #....... ; - - - ; #....... f202 e080 DECLE $E080 ; ###..... ; - - - ; #.##.... f203 90b0 DECLE $90B0 ; #..#.... ; - - - ; #..###.. f204 969c DECLE $969C ; #..#.##. ; - - - ; #.#...#. f205 c2a2 DECLE $C2A2 ; ##....#. ; - - - ; ..##..#. f206 1c32 DECLE $1C32 ; ...###.. ; - - - ; ...###.# f207 0d1d DECLE $0D1D ; ....##.# ; columns 8 .. 15 ; - - - ; ........ f208 0000 DECLE $0000 ; ........ ; - - - ; .......# f209 0701 DECLE $0701 ; .....### ; - - - ; ....##.# f20a 090d DECLE $090D ; ....#..# ; - - - ; ..###..# f20b 6939 DECLE $6939 ; .##.#..# ; - - - ; .#..#..# f20c 4749 DECLE $4749 ; .#...### ; - - - ; .#.....# f20d 3341 DECLE $3341 ; ..##..## ; - - - ; ...###.. f20e 181c DECLE $181C ; ...##... ; - - - ; ..###... f20f 3038 DECLE $3038 ; ..##.... ; columns 16 .. 23 ; - - - ; ........ f210 f000 DECLE $F000 ; ####.... ; - - - ; ######.. f211 56fc DECLE $56FC ; .#.#.##. ; - - - ; #######. f212 fcfe DECLE $FCFE ; ######.. ; - - - ; ####.... f213 c6f0 DECLE $C6F0 ; ##...##. ; - - - ; .######. f214 d87e DECLE $D87E ; ##.##... ; - - - ; ####.#.. f215 78f4 DECLE $78F4 ; .####... ; - - - ; ######.. f216 c6fc DECLE $C6FC ; ##...##. ; - - - ; ###...## f217 fbe3 DECLE $FBE3 ; #####.## ; columns 24 .. 31 ; - - - ; ........ f218 1f00 DECLE $1F00 ; ...##### ; - - - ; .####### f219 d47f DECLE $D47F ; ##.#.#.. ; - - - ; ######## f21a 7fff DECLE $7FFF ; .####### ; - - - ; ...##### f21b c71f DECLE $C71F ; ##...### ; - - - ; ######.. f21c 37fc DECLE $37FC ; ..##.### ; - - - ; .#.##### f21d 3c5f DECLE $3C5F ; ..####.. ; - - - ; .####### f21e c77f DECLE $C77F ; ##...### ; - - - ; #...#### f21f bf8f DECLE $BF8F ; #.###### ; alignment #1 ; columns 0 .. 7 ; - - - ; ##...#.. f220 f8c4 DECLE $F8C4 ; #####... ; - - - ; ####.... f221 01f0 DECLE $01F0 ; .......# ; - - - ; .......# f222 c001 DECLE $C001 ; ##...... ; - - - ; .##..... f223 2160 DECLE $2160 ; ..#....# ; - - - ; ..###..# f224 2c39 DECLE $2C39 ; ..#.##.. ; - - - ; .#...#.. f225 8444 DECLE $8444 ; #....#.. ; - - - ; .##..#.. f226 3964 DECLE $3964 ; ..###..# ; - - - ; ..###.## f227 1b3b DECLE $1B3B ; ...##.## ; columns 8 .. 15 ; - - - ; .......# f228 0101 DECLE $0101 ; .......# ; - - - ; ......## f229 0f03 DECLE $0F03 ; ....#### ; - - - ; ...##.## f22a 131b DECLE $131B ; ...#..## ; - - - ; .###..## f22b d373 DECLE $D373 ; ##.#..## ; - - - ; #..#..## f22c 8f93 DECLE $8F93 ; #...#### ; - - - ; #.....## f22d 6783 DECLE $6783 ; .##..### ; - - - ; ..###... f22e 3038 DECLE $3038 ; ..##.... ; - - - ; .###.... f22f 6070 DECLE $6070 ; .##..... ; columns 16 .. 23 ; - - - ; ........ f230 e000 DECLE $E000 ; ###..... ; - - - ; #####... f231 acf8 DECLE $ACF8 ; #.#.##.. ; - - - ; ######.. f232 f8fc DECLE $F8FC ; #####... ; - - - ; ###..... f233 8ce0 DECLE $8CE0 ; #...##.. ; - - - ; ######.. f234 b0fc DECLE $B0FC ; #.##.... ; - - - ; ###.#... f235 f0e8 DECLE $F0E8 ; ####.... ; - - - ; #####... f236 8cf8 DECLE $8CF8 ; #...##.. ; - - - ; ##...##. f237 f6c6 DECLE $F6C6 ; ####.##. ; columns 24 .. 31 ; - - - ; ........ f238 3f00 DECLE $3F00 ; ..###### ; - - - ; ######## f239 a8ff DECLE $A8FF ; #.#.#... ; - - - ; ######## f23a ffff DECLE $FFFF ; ######## ; - - - ; ..###### f23b 8f3f DECLE $8F3F ; #...#### ; - - - ; #####... f23c 6ff8 DECLE $6FF8 ; .##.#### ; - - - ; #.###### f23d 78bf DECLE $78BF ; .####... ; - - - ; ######## f23e 8fff DECLE $8FFF ; #...#### ; - - - ; ...##### f23f 7f1f DECLE $7F1F ; .####### ; alignment #2 ; columns 0 .. 7 ; - - - ; #...#... f240 f088 DECLE $F088 ; ####.... ; - - - ; ###....# f241 03e1 DECLE $03E1 ; ......## ; - - - ; ......## f242 8103 DECLE $8103 ; #......# ; - - - ; ##...... f243 43c0 DECLE $43C0 ; .#....## ; - - - ; .###..## f244 5873 DECLE $5873 ; .#.##... ; - - - ; #...#..# f245 0889 DECLE $0889 ; ....#... ; - - - ; ##..#..# f246 73c9 DECLE $73C9 ; .###..## ; - - - ; .###.##. f247 3676 DECLE $3676 ; ..##.##. ; columns 8 .. 15 ; - - - ; ......## f248 0303 DECLE $0303 ; ......## ; - - - ; .....### f249 1e07 DECLE $1E07 ; ...####. ; - - - ; ..##.##. f24a 2736 DECLE $2736 ; ..#..### ; - - - ; ###..##. f24b a6e6 DECLE $A6E6 ; #.#..##. ; - - - ; ..#..##. f24c 1e26 DECLE $1E26 ; ...####. ; - - - ; .....##. f24d cf06 DECLE $CF06 ; ##..#### ; - - - ; .###.... f24e 6070 DECLE $6070 ; .##..... ; - - - ; ###..... f24f c0e0 DECLE $C0E0 ; ##...... ; columns 16 .. 23 ; - - - ; ........ f250 c000 DECLE $C000 ; ##...... ; - - - ; ####.... f251 58f0 DECLE $58F0 ; .#.##... ; - - - ; #####... f252 f0f8 DECLE $F0F8 ; ####.... ; - - - ; ##...... f253 19c0 DECLE $19C0 ; ...##..# ; - - - ; #####..# f254 61f9 DECLE $61F9 ; .##....# ; - - - ; ##.#...# f255 e0d1 DECLE $E0D1 ; ###..... ; - - - ; ####.... f256 18f0 DECLE $18F0 ; ...##... ; - - - ; #...##.. f257 ec8c DECLE $EC8C ; ###.##.. ; columns 24 .. 31 ; - - - ; ........ f258 7f00 DECLE $7F00 ; .####### ; - - - ; ######## f259 51ff DECLE $51FF ; .#.#...# ; - - - ; ######## f25a ffff DECLE $FFFF ; ######## ; - - - ; .####### f25b 1f7f DECLE $1F7F ; ...##### ; - - - ; ####...# f25c dff1 DECLE $DFF1 ; ##.##### ; - - - ; .####### f25d f17f DECLE $F17F ; ####...# ; - - - ; ######## f25e 1fff DECLE $1FFF ; ...##### ; - - - ; ..###### f25f ff3f DECLE $FF3F ; ######## ; alignment #3 ; columns 0 .. 7 ; - - - ; ...#.... f260 e010 DECLE $E010 ; ###..... ; - - - ; ##....## f261 06c3 DECLE $06C3 ; .....##. ; - - - ; .....### f262 0307 DECLE $0307 ; ......## ; - - - ; #....... f263 8680 DECLE $8680 ; #....##. ; - - - ; ###..### f264 b1e7 DECLE $B1E7 ; #.##...# ; - - - ; ...#..#. f265 1112 DECLE $1112 ; ...#...# ; - - - ; #..#..## f266 e693 DECLE $E693 ; ###..##. ; - - - ; ###.##.. f267 6dec DECLE $6DEC ; .##.##.# ; columns 8 .. 15 ; - - - ; .....### f268 0707 DECLE $0707 ; .....### ; - - - ; ....#### f269 3c0f DECLE $3C0F ; ..####.. ; - - - ; .##.##.. f26a 4f6c DECLE $4F6C ; .#..#### ; - - - ; ##..##.# f26b 4ccd DECLE $4CCD ; .#..##.. ; - - - ; .#..##.. f26c 3c4c DECLE $3C4C ; ..####.. ; - - - ; ....##.# f26d 9e0d DECLE $9E0D ; #..####. ; - - - ; ###....# f26e c0e1 DECLE $C0E1 ; ##...... ; - - - ; ##...... f26f 80c0 DECLE $80C0 ; #....... ; columns 16 .. 23 ; - - - ; ........ f270 8000 DECLE $8000 ; #....... ; - - - ; ###..... f271 b0e0 DECLE $B0E0 ; #.##.... ; - - - ; ####.... f272 e0f0 DECLE $E0F0 ; ###..... ; - - - ; #......# f273 3381 DECLE $3381 ; ..##..## ; - - - ; ####..#. f274 c2f2 DECLE $C2F2 ; ##....#. ; - - - ; #.#...#. f275 c1a2 DECLE $C1A2 ; ##.....# ; - - - ; ###..... f276 30e0 DECLE $30E0 ; ..##.... ; - - - ; ...##..# f277 d919 DECLE $D919 ; ##.##..# ; columns 24 .. 31 ; - - - ; ........ f278 ff00 DECLE $FF00 ; ######## ; - - - ; ######## f279 a2ff DECLE $A2FF ; #.#...#. ; - - - ; ######## f27a ffff DECLE $FFFF ; ######## ; - - - ; ######## f27b 3eff DECLE $3EFF ; ..#####. ; - - - ; ###...## f27c bee3 DECLE $BEE3 ; #.#####. ; - - - ; ######## f27d e3ff DECLE $E3FF ; ###...## ; - - - ; ######## f27e 3eff DECLE $3EFF ; ..#####. ; - - - ; .####### f27f ff7f DECLE $FF7F ; ######## ; alignment #4 ; columns 0 .. 7 ; - - - ; ..#..... f280 c120 DECLE $C120 ; ##.....# ; - - - ; #....### f281 0d87 DECLE $0D87 ; ....##.# ; - - - ; ....#### f282 070f DECLE $070F ; .....### ; - - - ; .......# f283 0c01 DECLE $0C01 ; ....##.. ; - - - ; ##..#### f284 63cf DECLE $63CF ; .##...## ; - - - ; ..#..#.# f285 2325 DECLE $2325 ; ..#...## ; - - - ; ..#..### f286 cc27 DECLE $CC27 ; ##..##.. ; - - - ; ##.##... f287 dbd8 DECLE $DBD8 ; ##.##.## ; columns 8 .. 15 ; - - - ; ....###. f288 0f0e DECLE $0F0E ; ....#### ; - - - ; ...##### f289 781f DECLE $781F ; .####... ; - - - ; ##.##... f28a 9ed8 DECLE $9ED8 ; #..####. ; - - - ; #..##.## f28b 999b DECLE $999B ; #..##..# ; - - - ; #..##..# f28c 7999 DECLE $7999 ; .####..# ; - - - ; ...##.#. f28d 3c1a DECLE $3C1A ; ..####.. ; - - - ; ##....## f28e 81c3 DECLE $81C3 ; #......# ; - - - ; #......# f28f 0081 DECLE $0081 ; ........ ; columns 16 .. 23 ; - - - ; ........ f290 0000 DECLE $0000 ; ........ ; - - - ; ##...... f291 60c0 DECLE $60C0 ; .##..... ; - - - ; ###..... f292 c0e0 DECLE $C0E0 ; ##...... ; - - - ; ......## f293 6603 DECLE $6603 ; .##..##. ; - - - ; ###..#.. f294 84e4 DECLE $84E4 ; #....#.. ; - - - ; .#...#.. f295 8344 DECLE $8344 ; #.....## ; - - - ; ##.....# f296 61c1 DECLE $61C1 ; .##....# ; - - - ; ..##..## f297 b333 DECLE $B333 ; #.##..## ; columns 24 .. 31 ; - - - ; ........ f298 ff00 DECLE $FF00 ; ######## ; - - - ; ######## f299 45ff DECLE $45FF ; .#...#.# ; - - - ; ######## f29a ffff DECLE $FFFF ; ######## ; - - - ; ######## f29b 7cff DECLE $7CFF ; .#####.. ; - - - ; ##...### f29c 7dc7 DECLE $7DC7 ; .#####.# ; - - - ; ######## f29d c7ff DECLE $C7FF ; ##...### ; - - - ; ######## f29e 7cff DECLE $7CFF ; .#####.. ; - - - ; #######. f29f fffe DECLE $FFFE ; ######## ; alignment #5 ; columns 0 .. 7 ; - - - ; .#...... f2a0 8340 DECLE $8340 ; #.....## ; - - - ; ....#### f2a1 1a0f DECLE $1A0F ; ...##.#. ; - - - ; ...##### f2a2 0f1f DECLE $0F1F ; ....#### ; - - - ; ......## f2a3 1803 DECLE $1803 ; ...##... ; - - - ; #..##### f2a4 c69f DECLE $C69F ; ##...##. ; - - - ; .#..#.## f2a5 474b DECLE $474B ; .#...### ; - - - ; .#..#### f2a6 984f DECLE $984F ; #..##... ; - - - ; #.##...# f2a7 b7b1 DECLE $B7B1 ; #.##.### ; columns 8 .. 15 ; - - - ; ...###.. f2a8 1f1c DECLE $1F1C ; ...##### ; - - - ; ..###### f2a9 f03f DECLE $F03F ; ####.... ; - - - ; #.##.... f2aa 3cb0 DECLE $3CB0 ; ..####.. ; - - - ; ..##.##. f2ab 3236 DECLE $3236 ; ..##..#. ; - - - ; ..##..## f2ac f233 DECLE $F233 ; ####..#. ; - - - ; ..##.#.. f2ad 7834 DECLE $7834 ; .####... ; - - - ; #....##. f2ae 0386 DECLE $0386 ; ......## ; - - - ; ......## f2af 0103 DECLE $0103 ; .......# ; columns 16 .. 23 ; - - - ; ........ f2b0 0000 DECLE $0000 ; ........ ; - - - ; #....... f2b1 c080 DECLE $C080 ; ##...... ; - - - ; ##.....# f2b2 81c1 DECLE $81C1 ; #......# ; - - - ; .....### f2b3 cd07 DECLE $CD07 ; ##..##.# ; - - - ; ##..#..# f2b4 08c9 DECLE $08C9 ; ....#... ; - - - ; #...#... f2b5 0688 DECLE $0688 ; .....##. ; - - - ; #.....## f2b6 c383 DECLE $C383 ; ##....## ; - - - ; .##..### f2b7 6667 DECLE $6667 ; .##..##. ; columns 24 .. 31 ; - - - ; ........ f2b8 fe00 DECLE $FE00 ; #######. ; - - - ; ######## f2b9 8aff DECLE $8AFF ; #...#.#. ; - - - ; ######## f2ba ffff DECLE $FFFF ; ######## ; - - - ; #######. f2bb f8fe DECLE $F8FE ; #####... ; - - - ; #...#### f2bc fb8f DECLE $FB8F ; #####.## ; - - - ; #######. f2bd 8ffe DECLE $8FFE ; #...#### ; - - - ; ######## f2be f8ff DECLE $F8FF ; #####... ; - - - ; ######.. f2bf fffc DECLE $FFFC ; ######## ; alignment #6 ; columns 0 .. 7 ; - - - ; #....... f2c0 0780 DECLE $0780 ; .....### ; - - - ; ...##### f2c1 351f DECLE $351F ; ..##.#.# ; - - - ; ..###### f2c2 1f3f DECLE $1F3F ; ...##### ; - - - ; .....### f2c3 3107 DECLE $3107 ; ..##...# ; - - - ; ..###### f2c4 8d3f DECLE $8D3F ; #...##.# ; - - - ; #..#.### f2c5 8f97 DECLE $8F97 ; #...#### ; - - - ; #..##### f2c6 319f DECLE $319F ; ..##...# ; - - - ; .##...## f2c7 6f63 DECLE $6F63 ; .##.#### ; columns 8 .. 15 ; - - - ; ..###... f2c8 3f38 DECLE $3F38 ; ..###### ; - - - ; .######. f2c9 e07e DECLE $E07E ; ###..... ; - - - ; .##..... f2ca 7860 DECLE $7860 ; .####... ; - - - ; .##.##.. f2cb 646c DECLE $646C ; .##..#.. ; - - - ; .##..### f2cc e567 DECLE $E567 ; ###..#.# ; - - - ; .##.#... f2cd f068 DECLE $F068 ; ####.... ; - - - ; ....##.. f2ce 070c DECLE $070C ; .....### ; - - - ; .....### f2cf 0307 DECLE $0307 ; ......## ; columns 16 .. 23 ; - - - ; ........ f2d0 0000 DECLE $0000 ; ........ ; - - - ; ........ f2d1 8100 DECLE $8100 ; #......# ; - - - ; #.....## f2d2 0283 DECLE $0283 ; ......#. ; - - - ; ....###. f2d3 9a0e DECLE $9A0E ; #..##.#. ; - - - ; #..#..#. f2d4 1192 DECLE $1192 ; ...#...# ; - - - ; ...#.... f2d5 0c10 DECLE $0C10 ; ....##.. ; - - - ; .....### f2d6 8607 DECLE $8607 ; #....##. ; - - - ; ##..###. f2d7 ccce DECLE $CCCE ; ##..##.. ; columns 24 .. 31 ; - - - ; ........ f2d8 fc00 DECLE $FC00 ; ######.. ; - - - ; ######## f2d9 15ff DECLE $15FF ; ...#.#.# ; - - - ; ######## f2da ffff DECLE $FFFF ; ######## ; - - - ; ######.. f2db f1fc DECLE $F1FC ; ####...# ; - - - ; ...##### f2dc f61f DECLE $F61F ; ####.##. ; - - - ; ######.# f2dd 1efd DECLE $1EFD ; ...####. ; - - - ; ######## f2de f1ff DECLE $F1FF ; ####...# ; - - - ; #####... f2df fef8 DECLE $FEF8 ; #######. ; alignment #7 ; columns 0 .. 7 ; - - - ; ........ f2e0 0f00 DECLE $0F00 ; ....#### ; - - - ; ..###### f2e1 6a3f DECLE $6A3F ; .##.#.#. ; - - - ; .####### f2e2 3f7f DECLE $3F7F ; ..###### ; - - - ; ....#### f2e3 630f DECLE $630F ; .##...## ; - - - ; .######. f2e4 1b7e DECLE $1B7E ; ...##.## ; - - - ; ..#.#### f2e5 1e2f DECLE $1E2F ; ...####. ; - - - ; ..###### f2e6 633f DECLE $633F ; .##...## ; - - - ; ##...### f2e7 dfc7 DECLE $DFC7 ; ##.##### ; columns 8 .. 15 ; - - - ; .###...# f2e8 7e71 DECLE $7E71 ; .######. ; - - - ; ######.. f2e9 c0fc DECLE $C0FC ; ##...... ; - - - ; ##...... f2ea f0c0 DECLE $F0C0 ; ####.... ; - - - ; ##.##... f2eb c8d8 DECLE $C8D8 ; ##..#... ; - - - ; ##..###. f2ec cbce DECLE $CBCE ; ##..#.## ; - - - ; ##.#...# f2ed e1d1 DECLE $E1D1 ; ###....# ; - - - ; ...##..# f2ee 0e19 DECLE $0E19 ; ....###. ; - - - ; ....###. f2ef 060e DECLE $060E ; .....##. ; columns 16 .. 23 ; - - - ; ........ f2f0 0000 DECLE $0000 ; ........ ; - - - ; ........ f2f1 0300 DECLE $0300 ; ......## ; - - - ; .....##. f2f2 0406 DECLE $0406 ; .....#.. ; - - - ; ...###.. f2f3 341c DECLE $341C ; ..##.#.. ; - - - ; ..#..#.. f2f4 2324 DECLE $2324 ; ..#...## ; - - - ; ..#..... f2f5 1920 DECLE $1920 ; ...##..# ; - - - ; ....###. f2f6 0c0e DECLE $0C0E ; ....##.. ; - - - ; #..###.. f2f7 989c DECLE $989C ; #..##... ; columns 24 .. 31 ; - - - ; ........ f2f8 f800 DECLE $F800 ; #####... ; - - - ; #######. f2f9 2bfe DECLE $2BFE ; ..#.#.## ; - - - ; ######## f2fa feff DECLE $FEFF ; #######. ; - - - ; #####... f2fb e3f8 DECLE $E3F8 ; ###...## ; - - - ; ..###### f2fc ec3f DECLE $EC3F ; ###.##.. ; - - - ; #####.#. f2fd 3cfa DECLE $3CFA ; ..####.. ; - - - ; #######. f2fe e3fe DECLE $E3FE ; ###...## ; - - - ; ####...# f2ff fdf1 DECLE $FDF1 ; ######.# ENDP INCLUDE "gfx/midcity2.asm" 0xf300 MIDCITY2 PROC ; alignment #0 ; columns 0 .. 7 ; - - - ; ........ f300 0100 DECLE $0100 ; .......# ; - - - ; #....... f301 b880 DECLE $B880 ; #.###... ; - - - ; .#####.. f302 647c DECLE $647C ; .##..#.. ; - - - ; ######.# f303 fcfd DECLE $FCFD ; ######.. ; - - - ; .####... f304 e078 DECLE $E078 ; ###..... ; - - - ; #....... f305 6080 DECLE $6080 ; .##..... ; - - - ; ###..... f306 c0e0 DECLE $C0E0 ; ##...... ; - - - ; #....... f307 8080 DECLE $8080 ; #....... ; columns 8 .. 15 ; - - - ; #######. f308 fffe DECLE $FFFE ; ######## ; - - - ; .####..# f309 cf79 DECLE $CF79 ; ##..#### ; - - - ; ######## f30a bfff DECLE $BFFF ; #.###### ; - - - ; ###.#... f30b b7e8 DECLE $B7E8 ; #.##.### ; - - - ; ###.###. f30c dfee DECLE $DFEE ; ##.##### ; - - - ; ##.##### f30d cfdf DECLE $CFDF ; ##..#### ; - - - ; ###..... f30e ffe0 DECLE $FFE0 ; ######## ; - - - ; #.#.#.#. f30f ffaa DECLE $FFAA ; ######## ; columns 16 .. 23 ; - - - ; .......# f310 c301 DECLE $C301 ; ##....## ; - - - ; #....##. f311 0786 DECLE $0786 ; .....### ; - - - ; #...#### f312 8b8f DECLE $8B8F ; #...#.## ; - - - ; ##..###. f313 0bce DECLE $0BCE ; ....#.## ; - - - ; ....#### f314 0f0f DECLE $0F0F ; ....#### ; - - - ; ...###.# f315 2e1d DECLE $2E1D ; ..#.###. ; - - - ; ..#####. f316 2e3e DECLE $2E3E ; ..#.###. ; - - - ; ..#####. f317 ae3e DECLE $AE3E ; #.#.###. ; columns 24 .. 31 ; - - - ; ....#... f318 8808 DECLE $8808 ; #...#... ; - - - ; ###.#.## f319 7feb DECLE $7FEB ; .####### ; - - - ; #.#.#.#. f31a ffaa DECLE $FFAA ; ######## ; - - - ; #..###.. f31b 1c9c DECLE $1C9C ; ...###.. ; - - - ; ...#.#.. f31c 1c14 DECLE $1C14 ; ...###.. ; - - - ; ...###.. f31d 141c DECLE $141C ; ...#.#.. ; - - - ; ..#####. f31e 3e3e DECLE $3E3E ; ..#####. ; - - - ; .###.### f31f dd77 DECLE $DD77 ; ##.###.# ; alignment #1 ; columns 0 .. 7 ; - - - ; ........ f320 0300 DECLE $0300 ; ......## ; - - - ; .......# f321 7001 DECLE $7001 ; .###.... ; - - - ; #####..# f322 c9f9 DECLE $C9F9 ; ##..#..# ; - - - ; #####.## f323 f8fb DECLE $F8FB ; #####... ; - - - ; ####.... f324 c0f0 DECLE $C0F0 ; ##...... ; - - - ; ........ f325 c000 DECLE $C000 ; ##...... ; - - - ; ##...... f326 80c0 DECLE $80C0 ; #....... ; - - - ; ........ f327 0100 DECLE $0100 ; .......# ; columns 8 .. 15 ; - - - ; ######.. f328 fefc DECLE $FEFC ; #######. ; - - - ; ####..## f329 9ff3 DECLE $9FF3 ; #..##### ; - - - ; #######. f32a 7efe DECLE $7EFE ; .######. ; - - - ; ##.#...# f32b 6fd1 DECLE $6FD1 ; .##.#### ; - - - ; ##.###.. f32c bfdc DECLE $BFDC ; #.###### ; - - - ; #.###### f32d 9ebf DECLE $9EBF ; #..####. ; - - - ; ##.....# f32e ffc1 DECLE $FFC1 ; ######## ; - - - ; .#.#.#.# f32f ff55 DECLE $FF55 ; ######## ; columns 16 .. 23 ; - - - ; ......## f330 8703 DECLE $8703 ; #....### ; - - - ; ....##.. f331 0f0c DECLE $0F0C ; ....#### ; - - - ; ...##### f332 171f DECLE $171F ; ...#.### ; - - - ; #..###.# f333 179d DECLE $179D ; ...#.### ; - - - ; ...##### f334 1f1f DECLE $1F1F ; ...##### ; - - - ; ..###.## f335 5d3b DECLE $5D3B ; .#.###.# ; - - - ; .#####.# f336 5d7d DECLE $5D7D ; .#.###.# ; - - - ; .#####.# f337 5d7d DECLE $5D7D ; .#.###.# ; columns 24 .. 31 ; - - - ; ...#.... f338 1110 DECLE $1110 ; ...#...# ; - - - ; ##.#.### f339 fed7 DECLE $FED7 ; #######. ; - - - ; .#.#.#.# f33a ff55 DECLE $FF55 ; ######## ; - - - ; ..###..# f33b 3839 DECLE $3839 ; ..###... ; - - - ; ..#.#... f33c 3828 DECLE $3828 ; ..###... ; - - - ; ..###... f33d 2838 DECLE $2838 ; ..#.#... ; - - - ; .#####.. f33e 7c7c DECLE $7C7C ; .#####.. ; - - - ; ###.###. f33f bbee DECLE $BBEE ; #.###.## ; alignment #2 ; columns 0 .. 7 ; - - - ; ........ f340 0600 DECLE $0600 ; .....##. ; - - - ; ......## f341 e103 DECLE $E103 ; ###....# ; - - - ; ####..#. f342 93f2 DECLE $93F2 ; #..#..## ; - - - ; ####.##. f343 f0f6 DECLE $F0F6 ; ####.... ; - - - ; ###..... f344 80e0 DECLE $80E0 ; #....... ; - - - ; ........ f345 8000 DECLE $8000 ; #....... ; - - - ; #....... f346 0080 DECLE $0080 ; ........ ; - - - ; .......# f347 0301 DECLE $0301 ; ......## ; columns 8 .. 15 ; - - - ; #####... f348 fcf8 DECLE $FCF8 ; ######.. ; - - - ; ###..##. f349 3ee6 DECLE $3EE6 ; ..#####. ; - - - ; ######.# f34a fdfd DECLE $FDFD ; ######.# ; - - - ; #.#...## f34b dfa3 DECLE $DFA3 ; ##.##### ; - - - ; #.###..# f34c 7fb9 DECLE $7FB9 ; .####### ; - - - ; .######. f34d 3d7e DECLE $3D7E ; ..####.# ; - - - ; #.....## f34e ff83 DECLE $FF83 ; ######## ; - - - ; #.#.#.#. f34f feaa DECLE $FEAA ; #######. ; columns 16 .. 23 ; - - - ; .....### f350 0f07 DECLE $0F07 ; ....#### ; - - - ; ...##..# f351 1f19 DECLE $1F19 ; ...##### ; - - - ; ..###### f352 2e3f DECLE $2E3F ; ..#.###. ; - - - ; ..###.## f353 2e3b DECLE $2E3B ; ..#.###. ; - - - ; ..###### f354 3f3f DECLE $3F3F ; ..###### ; - - - ; .###.### f355 bb77 DECLE $BB77 ; #.###.## ; - - - ; #####.## f356 bbfb DECLE $BBFB ; #.###.## ; - - - ; #####.#. f357 bbfa DECLE $BBFA ; #.###.## ; columns 24 .. 31 ; - - - ; ..#..... f358 2320 DECLE $2320 ; ..#...## ; - - - ; #.#.###. f359 fcae DECLE $FCAE ; ######.. ; - - - ; #.#.#.#. f35a feaa DECLE $FEAA ; #######. ; - - - ; .###..## f35b 7073 DECLE $7073 ; .###.... ; - - - ; .#.#.... f35c 7050 DECLE $7050 ; .###.... ; - - - ; .###.... f35d 5070 DECLE $5070 ; .#.#.... ; - - - ; #####... f35e f8f8 DECLE $F8F8 ; #####... ; - - - ; ##.###.. f35f 76dc DECLE $76DC ; .###.##. ; alignment #3 ; columns 0 .. 7 ; - - - ; ........ f360 0c00 DECLE $0C00 ; ....##.. ; - - - ; .....### f361 c307 DECLE $C307 ; ##....## ; - - - ; ###..#.# f362 27e5 DECLE $27E5 ; ..#..### ; - - - ; ###.##.. f363 e0ec DECLE $E0EC ; ###..... ; - - - ; ##...... f364 00c0 DECLE $00C0 ; ........ ; - - - ; ........ f365 0000 DECLE $0000 ; ........ ; - - - ; .......# f366 0101 DECLE $0101 ; .......# ; - - - ; ......## f367 0603 DECLE $0603 ; .....##. ; columns 8 .. 15 ; - - - ; ####.... f368 f8f0 DECLE $F8F0 ; #####... ; - - - ; ##..##.. f369 7dcc DECLE $7DCC ; .#####.# ; - - - ; #####.## f36a fbfb DECLE $FBFB ; #####.## ; - - - ; .#...### f36b bf47 DECLE $BF47 ; #.###### ; - - - ; .###..## f36c ff73 DECLE $FF73 ; ######## ; - - - ; ######.. f36d 7bfc DECLE $7BFC ; .####.## ; - - - ; .....### f36e fe07 DECLE $FE07 ; #######. ; - - - ; .#.#.#.. f36f fc54 DECLE $FC54 ; ######.. ; columns 16 .. 23 ; - - - ; ....#### f370 1f0f DECLE $1F0F ; ...##### ; - - - ; ..##..## f371 3e33 DECLE $3E33 ; ..#####. ; - - - ; .####### f372 5d7f DECLE $5D7F ; .#.###.# ; - - - ; .###.### f373 5d77 DECLE $5D77 ; .#.###.# ; - - - ; .####### f374 7e7f DECLE $7E7F ; .######. ; - - - ; ###.###. f375 76ee DECLE $76EE ; .###.##. ; - - - ; ####.### f376 77f7 DECLE $77F7 ; .###.### ; - - - ; ####.#.# f377 77f5 DECLE $77F5 ; .###.### ; columns 24 .. 31 ; - - - ; .#...... f378 4640 DECLE $4640 ; .#...##. ; - - - ; .#.###.. f379 f85c DECLE $F85C ; #####... ; - - - ; .#.#.#.. f37a fc54 DECLE $FC54 ; ######.. ; - - - ; ###..##. f37b e0e6 DECLE $E0E6 ; ###..... ; - - - ; #.#..... f37c e0a0 DECLE $E0A0 ; ###..... ; - - - ; ###..... f37d a1e0 DECLE $A1E0 ; #.#....# ; - - - ; ####...# f37e f1f1 DECLE $F1F1 ; ####...# ; - - - ; #.###..# f37f edb9 DECLE $EDB9 ; ###.##.# ; alignment #4 ; columns 0 .. 7 ; - - - ; ........ f380 1800 DECLE $1800 ; ...##... ; - - - ; ....###. f381 870e DECLE $870E ; #....### ; - - - ; ##..#.#. f382 4fca DECLE $4FCA ; .#..#### ; - - - ; ##.##..# f383 c1d9 DECLE $C1D9 ; ##.....# ; - - - ; #......# f384 0181 DECLE $0181 ; .......# ; - - - ; .......# f385 0101 DECLE $0101 ; .......# ; - - - ; ......## f386 0303 DECLE $0303 ; ......## ; - - - ; .....### f387 0d07 DECLE $0D07 ; ....##.# ; columns 8 .. 15 ; - - - ; ###..... f388 f0e0 DECLE $F0E0 ; ####.... ; - - - ; #..##... f389 fb98 DECLE $FB98 ; #####.## ; - - - ; ####.### f38a f6f7 DECLE $F6F7 ; ####.##. ; - - - ; #...#### f38b 7f8f DECLE $7F8F ; .####### ; - - - ; ###..### f38c fee7 DECLE $FEE7 ; #######. ; - - - ; #####... f38d f6f8 DECLE $F6F8 ; ####.##. ; - - - ; ....###. f38e fc0e DECLE $FC0E ; ######.. ; - - - ; #.#.#... f38f f8a8 DECLE $F8A8 ; #####... ; columns 16 .. 23 ; - - - ; ...##### f390 3f1f DECLE $3F1F ; ..###### ; - - - ; .##..### f391 7c67 DECLE $7C67 ; .#####.. ; - - - ; ######## f392 bbff DECLE $BBFF ; #.###.## ; - - - ; ###.###. f393 bbee DECLE $BBEE ; #.###.## ; - - - ; #######. f394 fdfe DECLE $FDFE ; ######.# ; - - - ; ##.###.# f395 ecdd DECLE $ECDD ; ###.##.. ; - - - ; ###.###. f396 efee DECLE $EFEE ; ###.#### ; - - - ; ###.#.#. f397 efea DECLE $EFEA ; ###.#### ; columns 24 .. 31 ; - - - ; #....... f398 8c80 DECLE $8C80 ; #...##.. ; - - - ; #.###... f399 f0b8 DECLE $F0B8 ; ####.... ; - - - ; #.#.#... f39a f8a8 DECLE $F8A8 ; #####... ; - - - ; ##..##.. f39b c0cc DECLE $C0CC ; ##...... ; - - - ; .#...... f39c c040 DECLE $C040 ; ##...... ; - - - ; ##.....# f39d 42c1 DECLE $42C1 ; .#....#. ; - - - ; ###...## f39e e2e3 DECLE $E2E3 ; ###...#. ; - - - ; .###..## f39f da73 DECLE $DA73 ; ##.##.#. ; alignment #5 ; columns 0 .. 7 ; - - - ; .......# f3a0 3101 DECLE $3101 ; ..##...# ; - - - ; ...###.# f3a1 0f1d DECLE $0F1D ; ....#### ; - - - ; #..#.#.# f3a2 9f95 DECLE $9F95 ; #..##### ; - - - ; #.##..## f3a3 83b3 DECLE $83B3 ; #.....## ; - - - ; ......#. f3a4 0302 DECLE $0302 ; ......## ; - - - ; ......## f3a5 0203 DECLE $0203 ; ......#. ; - - - ; .....### f3a6 0707 DECLE $0707 ; .....### ; - - - ; ....###. f3a7 1b0e DECLE $1B0E ; ...##.## ; columns 8 .. 15 ; - - - ; ##...... f3a8 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ..##.... f3a9 f730 DECLE $F730 ; ####.### ; - - - ; ###.#### f3aa ecef DECLE $ECEF ; ###.##.. ; - - - ; ...##### f3ab ff1f DECLE $FF1F ; ######## ; - - - ; ##..#### f3ac fccf DECLE $FCCF ; ######.. ; - - - ; ####.... f3ad ecf0 DECLE $ECF0 ; ###.##.. ; - - - ; ...###.. f3ae f81c DECLE $F81C ; #####... ; - - - ; .#.#.... f3af f050 DECLE $F050 ; ####.... ; columns 16 .. 23 ; - - - ; ..###### f3b0 7f3f DECLE $7F3F ; .####### ; - - - ; ##..#### f3b1 f9cf DECLE $F9CF ; #####..# ; - - - ; ######## f3b2 77ff DECLE $77FF ; .###.### ; - - - ; ##.###.# f3b3 76dd DECLE $76DD ; .###.##. ; - - - ; ######.# f3b4 fbfd DECLE $FBFD ; #####.## ; - - - ; #.###.## f3b5 d9bb DECLE $D9BB ; ##.##..# ; - - - ; ##.###.. f3b6 dfdc DECLE $DFDC ; ##.##### ; - - - ; ##.#.#.# f3b7 dfd5 DECLE $DFD5 ; ##.##### ; columns 24 .. 31 ; - - - ; ........ f3b8 1800 DECLE $1800 ; ...##... ; - - - ; .###.... f3b9 e070 DECLE $E070 ; ###..... ; - - - ; .#.#...# f3ba f151 DECLE $F151 ; ####...# ; - - - ; #..##..# f3bb 8199 DECLE $8199 ; #......# ; - - - ; #......# f3bc 8181 DECLE $8181 ; #......# ; - - - ; #.....## f3bd 8583 DECLE $8583 ; #....#.# ; - - - ; ##...### f3be c5c7 DECLE $C5C7 ; ##...#.# ; - - - ; ###..### f3bf b5e7 DECLE $B5E7 ; #.##.#.# ; alignment #6 ; columns 0 .. 7 ; - - - ; ......#. f3c0 6202 DECLE $6202 ; .##...#. ; - - - ; ..###.#. f3c1 1f3a DECLE $1F3A ; ...##### ; - - - ; ..#.#.#. f3c2 3f2a DECLE $3F2A ; ..###### ; - - - ; .##..### f3c3 0767 DECLE $0767 ; .....### ; - - - ; .....#.# f3c4 0705 DECLE $0705 ; .....### ; - - - ; .....### f3c5 0507 DECLE $0507 ; .....#.# ; - - - ; ....#### f3c6 0f0f DECLE $0F0F ; ....#### ; - - - ; ...###.# f3c7 371d DECLE $371D ; ..##.### ; columns 8 .. 15 ; - - - ; #....... f3c8 c080 DECLE $C080 ; ##...... ; - - - ; .##..... f3c9 ee60 DECLE $EE60 ; ###.###. ; - - - ; ##.##### f3ca d9df DECLE $D9DF ; ##.##..# ; - - - ; ..###### f3cb ff3f DECLE $FF3F ; ######## ; - - - ; #..####. f3cc f89e DECLE $F89E ; #####... ; - - - ; ###..... f3cd d8e0 DECLE $D8E0 ; ##.##... ; - - - ; ..###... f3ce f038 DECLE $F038 ; ####.... ; - - - ; #.#..... f3cf e0a0 DECLE $E0A0 ; ###..... ; columns 16 .. 23 ; - - - ; .####### f3d0 ff7f DECLE $FF7F ; ######## ; - - - ; #..####. f3d1 f39e DECLE $F39E ; ####..## ; - - - ; ######## f3d2 efff DECLE $EFFF ; ###.#### ; - - - ; #.###.#. f3d3 edba DECLE $EDBA ; ###.##.# ; - - - ; #####.## f3d4 f7fb DECLE $F7FB ; ####.### ; - - - ; .###.### f3d5 b377 DECLE $B377 ; #.##..## ; - - - ; #.###... f3d6 bfb8 DECLE $BFB8 ; #.###### ; - - - ; #.#.#.#. f3d7 bfaa DECLE $BFAA ; #.###### ; columns 24 .. 31 ; - - - ; ........ f3d8 3000 DECLE $3000 ; ..##.... ; - - - ; ###....# f3d9 c1e1 DECLE $C1E1 ; ##.....# ; - - - ; #.#...## f3da e2a3 DECLE $E2A3 ; ###...#. ; - - - ; ..##..## f3db 0233 DECLE $0233 ; ......#. ; - - - ; ......## f3dc 0303 DECLE $0303 ; ......## ; - - - ; .....### f3dd 0b07 DECLE $0B07 ; ....#.## ; - - - ; #...#### f3de 8b8f DECLE $8B8F ; #...#.## ; - - - ; ##..#### f3df 6bcf DECLE $6BCF ; .##.#.## ; alignment #7 ; columns 0 .. 7 ; - - - ; .....#.. f3e0 c404 DECLE $C404 ; ##...#.. ; - - - ; .###.#.# f3e1 3f75 DECLE $3F75 ; ..###### ; - - - ; .#.#.#.# f3e2 7f55 DECLE $7F55 ; .####### ; - - - ; ##..###. f3e3 0ece DECLE $0ECE ; ....###. ; - - - ; ....#.#. f3e4 0e0a DECLE $0E0A ; ....###. ; - - - ; ....###. f3e5 0a0e DECLE $0A0E ; ....#.#. ; - - - ; ...##### f3e6 1f1f DECLE $1F1F ; ...##### ; - - - ; ..###.## f3e7 6e3b DECLE $6E3B ; .##.###. ; columns 8 .. 15 ; - - - ; ........ f3e8 8000 DECLE $8000 ; #....... ; - - - ; ##...... f3e9 dcc0 DECLE $DCC0 ; ##.###.. ; - - - ; #.#####. f3ea b2be DECLE $B2BE ; #.##..#. ; - - - ; .######. f3eb fe7e DECLE $FE7E ; #######. ; - - - ; ..####.. f3ec f03c DECLE $F03C ; ####.... ; - - - ; ##...... f3ed b0c0 DECLE $B0C0 ; #.##.... ; - - - ; .###.... f3ee e070 DECLE $E070 ; ###..... ; - - - ; .#...... f3ef c040 DECLE $C040 ; ##...... ; columns 16 .. 23 ; - - - ; ######## f3f0 ffff DECLE $FFFF ; ######## ; - - - ; ..####.. f3f1 e73c DECLE $E73C ; ###..### ; - - - ; ######## f3f2 dfff DECLE $DFFF ; ##.##### ; - - - ; .###.#.. f3f3 db74 DECLE $DB74 ; ##.##.## ; - - - ; ####.### f3f4 eff7 DECLE $EFF7 ; ###.#### ; - - - ; ###.#### f3f5 67ef DECLE $67EF ; .##..### ; - - - ; .###.... f3f6 7f70 DECLE $7F70 ; .####### ; - - - ; .#.#.#.# f3f7 7f55 DECLE $7F55 ; .####### ; columns 24 .. 31 ; - - - ; ........ f3f8 6100 DECLE $6100 ; .##....# ; - - - ; ##....## f3f9 83c3 DECLE $83C3 ; #.....## ; - - - ; .#...### f3fa c547 DECLE $C547 ; ##...#.# ; - - - ; .##..### f3fb 0567 DECLE $0567 ; .....#.# ; - - - ; .....### f3fc 0707 DECLE $0707 ; .....### ; - - - ; ....###. f3fd 170e DECLE $170E ; ...#.### ; - - - ; ...##### f3fe 171f DECLE $171F ; ...#.### ; - - - ; #..##### f3ff d79f DECLE $D79F ; ##.#.### ENDP INCLUDE "gfx/midcity3.asm" 0xf400 MIDCITY3 PROC ; alignment #0 ; columns 0 .. 7 ; - - - ; ........ f400 0000 DECLE $0000 ; ........ ; - - - ; ........ f401 8100 DECLE $8100 ; #......# ; - - - ; ##.....# f402 e0c1 DECLE $E0C1 ; ###..... ; - - - ; ####.... f403 78f0 DECLE $78F0 ; .####... ; - - - ; ######.. f404 7efc DECLE $7EFC ; .######. ; - - - ; #.####.. f405 5bbc DECLE $5BBC ; .#.##.## ; - - - ; ####..## f406 07f3 DECLE $07F3 ; .....### ; - - - ; ##.###.# f407 77dd DECLE $77DD ; .###.### ; columns 8 .. 15 ; - - - ; ........ f408 0600 DECLE $0600 ; .....##. ; - - - ; ....#.## f409 150b DECLE $150B ; ...#.#.# ; - - - ; ..#.#.## f40a 552b DECLE $552B ; .#.#.#.# ; - - - ; #.#.#.#. f40b 55aa DECLE $55AA ; .#.#.#.# ; - - - ; #.#.#.#. f40c 55aa DECLE $55AA ; .#.#.#.# ; - - - ; ###.#.#. f40d 3dea DECLE $3DEA ; ..####.# ; - - - ; #.....## f40e 7883 DECLE $7883 ; .####... ; - - - ; ##.###.# f40f 77dd DECLE $77DD ; .###.### ; columns 16 .. 23 ; - - - ; ........ f410 0000 DECLE $0000 ; ........ ; - - - ; ........ f411 0000 DECLE $0000 ; ........ ; - - - ; ........ f412 c000 DECLE $C000 ; ##...... ; - - - ; .##..... f413 b160 DECLE $B160 ; #.##...# ; - - - ; .####.#. f414 bd7a DECLE $BD7A ; #.####.# ; - - - ; .#.####. f415 af5e DECLE $AF5E ; #.#.#### ; - - - ; .#.##### f416 ae5f DECLE $AE5F ; #.#.###. ; - - - ; .#####.. f417 017c DECLE $017C ; .......# ; columns 24 .. 31 ; - - - ; .#...... f418 4040 DECLE $4040 ; .#...... ; - - - ; ###..... f419 f0e0 DECLE $F0E0 ; ####.... ; - - - ; ####.... f41a a0f0 DECLE $A0F0 ; #.#..... ; - - - ; ###....# f41b a2e1 DECLE $A2E1 ; #.#...#. ; - - - ; ###..#.# f41c eae5 DECLE $EAE5 ; ###.#.#. ; - - - ; #..#.#.# f41d aa95 DECLE $AA95 ; #.#.#.#. ; - - - ; .#####.# f41e 077d DECLE $077D ; .....### ; - - - ; ##.#.... f41f 77d0 DECLE $77D0 ; .###.### ; alignment #1 ; columns 0 .. 7 ; - - - ; ........ f420 0000 DECLE $0000 ; ........ ; - - - ; .......# f421 0301 DECLE $0301 ; ......## ; - - - ; #.....## f422 c183 DECLE $C183 ; ##.....# ; - - - ; ###....# f423 f1e1 DECLE $F1E1 ; ####...# ; - - - ; #####..# f424 fdf9 DECLE $FDF9 ; ######.# ; - - - ; .####..# f425 b779 DECLE $B779 ; #.##.### ; - - - ; ###..##. f426 0ee6 DECLE $0EE6 ; ....###. ; - - - ; #.###.## f427 eebb DECLE $EEBB ; ###.###. ; columns 8 .. 15 ; - - - ; ........ f428 0c00 DECLE $0C00 ; ....##.. ; - - - ; ...#.##. f429 2b16 DECLE $2B16 ; ..#.#.## ; - - - ; .#.#.### f42a ab57 DECLE $AB57 ; #.#.#.## ; - - - ; .#.#.#.# f42b aa55 DECLE $AA55 ; #.#.#.#. ; - - - ; .#.#.#.# f42c aa55 DECLE $AA55 ; #.#.#.#. ; - - - ; ##.#.#.# f42d 7ad5 DECLE $7AD5 ; .####.#. ; - - - ; .....### f42e f007 DECLE $F007 ; ####.... ; - - - ; #.###.## f42f eebb DECLE $EEBB ; ###.###. ; columns 16 .. 23 ; - - - ; ........ f430 0000 DECLE $0000 ; ........ ; - - - ; ........ f431 0000 DECLE $0000 ; ........ ; - - - ; ........ f432 8000 DECLE $8000 ; #....... ; - - - ; ##.....# f433 62c1 DECLE $62C1 ; .##...#. ; - - - ; ####.#.# f434 7af5 DECLE $7AF5 ; .####.#. ; - - - ; #.####.# f435 5ebd DECLE $5EBD ; .#.####. ; - - - ; #.###### f436 5cbf DECLE $5CBF ; .#.###.. ; - - - ; #####..# f437 02f9 DECLE $02F9 ; ......#. ; columns 24 .. 31 ; - - - ; #....... f438 8080 DECLE $8080 ; #....... ; - - - ; ##...... f439 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ###..... f43a 41e0 DECLE $41E0 ; .#.....# ; - - - ; ##....#. f43b 45c2 DECLE $45C2 ; .#...#.# ; - - - ; ##..#.#. f43c d5ca DECLE $D5CA ; ##.#.#.# ; - - - ; ..#.#.#. f43d 552a DECLE $552A ; .#.#.#.# ; - - - ; #####.#. f43e 0ffa DECLE $0FFA ; ....#### ; - - - ; #.#..... f43f eea0 DECLE $EEA0 ; ###.###. ; alignment #2 ; columns 0 .. 7 ; - - - ; .......# f440 0101 DECLE $0101 ; .......# ; - - - ; ......## f441 0703 DECLE $0703 ; .....### ; - - - ; .....### f442 8207 DECLE $8207 ; #.....#. ; - - - ; ##....## f443 e2c3 DECLE $E2C3 ; ###...#. ; - - - ; ####..## f444 fbf3 DECLE $FBF3 ; #####.## ; - - - ; ####..#. f445 6ef2 DECLE $6EF2 ; .##.###. ; - - - ; ##..##.# f446 1ccd DECLE $1CCD ; ...###.. ; - - - ; .###.### f447 dd77 DECLE $DD77 ; ##.###.# ; columns 8 .. 15 ; - - - ; ........ f448 1800 DECLE $1800 ; ...##... ; - - - ; ..#.##.. f449 562c DECLE $562C ; .#.#.##. ; - - - ; #.#.#### f44a 57af DECLE $57AF ; .#.#.### ; - - - ; #.#.#.## f44b 55ab DECLE $55AB ; .#.#.#.# ; - - - ; #.#.#.## f44c 55ab DECLE $55AB ; .#.#.#.# ; - - - ; #.#.#.#. f44d f5aa DECLE $F5AA ; ####.#.# ; - - - ; ....#### f44e e00f DECLE $E00F ; ###..... ; - - - ; .###.### f44f dd77 DECLE $DD77 ; ##.###.# ; columns 16 .. 23 ; - - - ; ........ f450 0000 DECLE $0000 ; ........ ; - - - ; ........ f451 0000 DECLE $0000 ; ........ ; - - - ; ........ f452 0100 DECLE $0100 ; .......# ; - - - ; #.....#. f453 c582 DECLE $C582 ; ##...#.# ; - - - ; ###.#.#. f454 f5ea DECLE $F5EA ; ####.#.# ; - - - ; .####.## f455 bc7b DECLE $BC7B ; #.####.. ; - - - ; .######. f456 b97e DECLE $B97E ; #.###..# ; - - - ; ####..## f457 05f3 DECLE $05F3 ; .....#.# ; columns 24 .. 31 ; - - - ; ........ f458 0000 DECLE $0000 ; ........ ; - - - ; #....... f459 c080 DECLE $C080 ; ##...... ; - - - ; ##...... f45a 83c0 DECLE $83C0 ; #.....## ; - - - ; #....#.# f45b 8a85 DECLE $8A85 ; #...#.#. ; - - - ; #..#.#.# f45c aa95 DECLE $AA95 ; #.#.#.#. ; - - - ; .#.#.#.# f45d aa55 DECLE $AA55 ; #.#.#.#. ; - - - ; ####.#.# f45e 1ef5 DECLE $1EF5 ; ...####. ; - - - ; .#.....# f45f dc41 DECLE $DC41 ; ##.###.. ; alignment #3 ; columns 0 .. 7 ; - - - ; ......#. f460 0202 DECLE $0202 ; ......#. ; - - - ; .....### f461 0f07 DECLE $0F07 ; ....#### ; - - - ; ....#### f462 050f DECLE $050F ; .....#.# ; - - - ; #....### f463 c587 DECLE $C587 ; ##...#.# ; - - - ; ###..### f464 f7e7 DECLE $F7E7 ; ####.### ; - - - ; ###..#.. f465 dde4 DECLE $DDE4 ; ##.###.# ; - - - ; #..##.## f466 389b DECLE $389B ; ..###... ; - - - ; ###.###. f467 bbee DECLE $BBEE ; #.###.## ; columns 8 .. 15 ; - - - ; ........ f468 3000 DECLE $3000 ; ..##.... ; - - - ; .#.##... f469 ac58 DECLE $AC58 ; #.#.##.. ; - - - ; .#.####. f46a af5e DECLE $AF5E ; #.#.#### ; - - - ; .#.#.### f46b ab57 DECLE $AB57 ; #.#.#.## ; - - - ; .#.#.### f46c ab57 DECLE $AB57 ; #.#.#.## ; - - - ; .#.#.#.# f46d ea55 DECLE $EA55 ; ###.#.#. ; - - - ; ...##### f46e c01f DECLE $C01F ; ##...... ; - - - ; ###.###. f46f bbee DECLE $BBEE ; #.###.## ; columns 16 .. 23 ; - - - ; ........ f470 0000 DECLE $0000 ; ........ ; - - - ; ........ f471 0000 DECLE $0000 ; ........ ; - - - ; .......# f472 0201 DECLE $0201 ; ......#. ; - - - ; .....#.# f473 8a05 DECLE $8A05 ; #...#.#. ; - - - ; ##.#.#.# f474 ead5 DECLE $EAD5 ; ###.#.#. ; - - - ; ####.### f475 79f7 DECLE $79F7 ; .####..# ; - - - ; ######.. f476 73fc DECLE $73FC ; .###..## ; - - - ; ###..##. f477 0be6 DECLE $0BE6 ; ....#.## ; columns 24 .. 31 ; - - - ; ........ f478 0000 DECLE $0000 ; ........ ; - - - ; ........ f479 8000 DECLE $8000 ; #....... ; - - - ; #....... f47a 0680 DECLE $0680 ; .....##. ; - - - ; ....#.## f47b 150b DECLE $150B ; ...#.#.# ; - - - ; ..#.#.## f47c 552b DECLE $552B ; .#.#.#.# ; - - - ; #.#.#.#. f47d 55aa DECLE $55AA ; .#.#.#.# ; - - - ; ###.#.#. f47e 3dea DECLE $3DEA ; ..####.# ; - - - ; #.....## f47f b883 DECLE $B883 ; #.###... ; alignment #4 ; columns 0 .. 7 ; - - - ; .....#.. f480 0404 DECLE $0404 ; .....#.. ; - - - ; ....###. f481 1f0e DECLE $1F0E ; ...##### ; - - - ; ...##### f482 0a1f DECLE $0A1F ; ....#.#. ; - - - ; ....###. f483 8a0e DECLE $8A0E ; #...#.#. ; - - - ; ##..###. f484 eece DECLE $EECE ; ###.###. ; - - - ; ##..#..# f485 bac9 DECLE $BAC9 ; #.###.#. ; - - - ; ..##.### f486 7037 DECLE $7037 ; .###.... ; - - - ; ##.###.# f487 77dd DECLE $77DD ; .###.### ; columns 8 .. 15 ; - - - ; ........ f488 6000 DECLE $6000 ; .##..... ; - - - ; #.##.... f489 58b0 DECLE $58B0 ; .#.##... ; - - - ; #.####.. f48a 5ebc DECLE $5EBC ; .#.####. ; - - - ; #.#.#### f48b 57af DECLE $57AF ; .#.#.### ; - - - ; #.#.#### f48c 57af DECLE $57AF ; .#.#.### ; - - - ; #.#.#.## f48d d5ab DECLE $D5AB ; ##.#.#.# ; - - - ; ..###### f48e 803f DECLE $803F ; #....... ; - - - ; ##.###.# f48f 77dd DECLE $77DD ; .###.### ; columns 16 .. 23 ; - - - ; ........ f490 0000 DECLE $0000 ; ........ ; - - - ; ........ f491 0100 DECLE $0100 ; .......# ; - - - ; ......#. f492 0502 DECLE $0502 ; .....#.# ; - - - ; ....#.#. f493 150a DECLE $150A ; ...#.#.# ; - - - ; #.#.#.#. f494 d5aa DECLE $D5AA ; ##.#.#.# ; - - - ; ###.###. f495 f3ee DECLE $F3EE ; ####..## ; - - - ; #####... f496 e7f8 DECLE $E7F8 ; ###..### ; - - - ; ##..##.# f497 17cd DECLE $17CD ; ...#.### ; columns 24 .. 31 ; - - - ; ........ f498 0000 DECLE $0000 ; ........ ; - - - ; ........ f499 0000 DECLE $0000 ; ........ ; - - - ; ........ f49a 0c00 DECLE $0C00 ; ....##.. ; - - - ; ...#.##. f49b 2b16 DECLE $2B16 ; ..#.#.## ; - - - ; .#.#.### f49c ab57 DECLE $AB57 ; #.#.#.## ; - - - ; .#.#.#.# f49d aa55 DECLE $AA55 ; #.#.#.#. ; - - - ; ##.#.#.# f49e 7ad5 DECLE $7AD5 ; .####.#. ; - - - ; .....### f49f 7007 DECLE $7007 ; .###.... ; alignment #5 ; columns 0 .. 7 ; - - - ; ....#... f4a0 0808 DECLE $0808 ; ....#... ; - - - ; ...###.. f4a1 3e1c DECLE $3E1C ; ..#####. ; - - - ; ..#####. f4a2 143e DECLE $143E ; ...#.#.. ; - - - ; ...###.. f4a3 141c DECLE $141C ; ...#.#.. ; - - - ; #..###.. f4a4 dd9c DECLE $DD9C ; ##.###.# ; - - - ; #..#..#. f4a5 7592 DECLE $7592 ; .###.#.# ; - - - ; .##.#### f4a6 e06f DECLE $E06F ; ###..... ; - - - ; #.###.#. f4a7 eeba DECLE $EEBA ; ###.###. ; columns 8 .. 15 ; - - - ; ........ f4a8 c000 DECLE $C000 ; ##...... ; - - - ; .##..... f4a9 b060 DECLE $B060 ; #.##.... ; - - - ; .####... f4aa bc78 DECLE $BC78 ; #.####.. ; - - - ; .#.####. f4ab af5e DECLE $AF5E ; #.#.#### ; - - - ; .#.##### f4ac af5f DECLE $AF5F ; #.#.#### ; - - - ; .#.#.### f4ad ab57 DECLE $AB57 ; #.#.#.## ; - - - ; .######. f4ae 007e DECLE $007E ; ........ ; - - - ; #.###.## f4af eebb DECLE $EEBB ; ###.###. ; columns 16 .. 23 ; - - - ; ........ f4b0 0000 DECLE $0000 ; ........ ; - - - ; .......# f4b1 0201 DECLE $0201 ; ......#. ; - - - ; .....#.# f4b2 0a05 DECLE $0A05 ; ....#.#. ; - - - ; ...#.#.# f4b3 2a15 DECLE $2A15 ; ..#.#.#. ; - - - ; .#.#.#.# f4b4 aa55 DECLE $AA55 ; #.#.#.#. ; - - - ; ##.###.# f4b5 e7dd DECLE $E7DD ; ###..### ; - - - ; ####.... f4b6 cff0 DECLE $CFF0 ; ##..#### ; - - - ; #..##.## f4b7 2e9b DECLE $2E9B ; ..#.###. ; columns 24 .. 31 ; - - - ; ........ f4b8 0000 DECLE $0000 ; ........ ; - - - ; ........ f4b9 0000 DECLE $0000 ; ........ ; - - - ; ........ f4ba 1800 DECLE $1800 ; ...##... ; - - - ; ..#.##.. f4bb 562c DECLE $562C ; .#.#.##. ; - - - ; #.#.#### f4bc 57af DECLE $57AF ; .#.#.### ; - - - ; #.#.#.## f4bd 55ab DECLE $55AB ; .#.#.#.# ; - - - ; #.#.#.## f4be f5ab DECLE $F5AB ; ####.#.# ; - - - ; ....#### f4bf e00f DECLE $E00F ; ###..... ; alignment #6 ; columns 0 .. 7 ; - - - ; ...#.... f4c0 1010 DECLE $1010 ; ...#.... ; - - - ; ..###... f4c1 7c38 DECLE $7C38 ; .#####.. ; - - - ; .#####.. f4c2 287c DECLE $287C ; ..#.#... ; - - - ; ..###... f4c3 2838 DECLE $2838 ; ..#.#... ; - - - ; ..###..# f4c4 ba39 DECLE $BA39 ; #.###.#. ; - - - ; ..#..#.# f4c5 ea25 DECLE $EA25 ; ###.#.#. ; - - - ; ##.##### f4c6 c1df DECLE $C1DF ; ##.....# ; - - - ; .###.#.. f4c7 dd74 DECLE $DD74 ; ##.###.# ; columns 8 .. 15 ; - - - ; ........ f4c8 8000 DECLE $8000 ; #....... ; - - - ; ##...... f4c9 60c0 DECLE $60C0 ; .##..... ; - - - ; ####.... f4ca 78f0 DECLE $78F0 ; .####... ; - - - ; #.####.. f4cb 5ebc DECLE $5EBC ; .#.####. ; - - - ; #.###### f4cc 5fbf DECLE $5FBF ; .#.##### ; - - - ; #.#.#### f4cd 56af DECLE $56AF ; .#.#.##. ; - - - ; ######.. f4ce 01fc DECLE $01FC ; .......# ; - - - ; .###.### f4cf dd77 DECLE $DD77 ; ##.###.# ; columns 16 .. 23 ; - - - ; ........ f4d0 0100 DECLE $0100 ; .......# ; - - - ; ......#. f4d1 0502 DECLE $0502 ; .....#.# ; - - - ; ....#.#. f4d2 150a DECLE $150A ; ...#.#.# ; - - - ; ..#.#.#. f4d3 552a DECLE $552A ; .#.#.#.# ; - - - ; #.#.#.#. f4d4 55aa DECLE $55AA ; .#.#.#.# ; - - - ; #.###.#. f4d5 cfba DECLE $CFBA ; ##..#### ; - - - ; ###..... f4d6 9ee0 DECLE $9EE0 ; #..####. ; - - - ; ..##.### f4d7 5d37 DECLE $5D37 ; .#.###.# ; columns 24 .. 31 ; - - - ; ........ f4d8 0000 DECLE $0000 ; ........ ; - - - ; ........ f4d9 0000 DECLE $0000 ; ........ ; - - - ; ........ f4da 3000 DECLE $3000 ; ..##.... ; - - - ; .#.##... f4db ac58 DECLE $AC58 ; #.#.##.. ; - - - ; .#.####. f4dc af5e DECLE $AF5E ; #.#.#### ; - - - ; .#.#.### f4dd ab57 DECLE $AB57 ; #.#.#.## ; - - - ; .#.#.### f4de eb57 DECLE $EB57 ; ###.#.## ; - - - ; ...##### f4df c01f DECLE $C01F ; ##...... ; alignment #7 ; columns 0 .. 7 ; - - - ; ..#..... f4e0 2020 DECLE $2020 ; ..#..... ; - - - ; .###.... f4e1 f870 DECLE $F870 ; #####... ; - - - ; #####... f4e2 50f8 DECLE $50F8 ; .#.#.... ; - - - ; .###.... f4e3 5170 DECLE $5170 ; .#.#...# ; - - - ; .###..#. f4e4 7572 DECLE $7572 ; .###.#.# ; - - - ; .#..#.#. f4e5 d54a DECLE $D54A ; ##.#.#.# ; - - - ; #.#####. f4e6 83be DECLE $83BE ; #.....## ; - - - ; ###.#... f4e7 bbe8 DECLE $BBE8 ; #.###.## ; columns 8 .. 15 ; - - - ; ........ f4e8 0000 DECLE $0000 ; ........ ; - - - ; #....... f4e9 c080 DECLE $C080 ; ##...... ; - - - ; ###..... f4ea f0e0 DECLE $F0E0 ; ####.... ; - - - ; .####... f4eb bc78 DECLE $BC78 ; #.####.. ; - - - ; .######. f4ec bf7e DECLE $BF7E ; #.###### ; - - - ; .#.####. f4ed ad5e DECLE $AD5E ; #.#.##.# ; - - - ; #####..# f4ee 03f9 DECLE $03F9 ; ......## ; - - - ; ###.###. f4ef bbee DECLE $BBEE ; #.###.## ; columns 16 .. 23 ; - - - ; ........ f4f0 0300 DECLE $0300 ; ......## ; - - - ; .....#.# f4f1 0a05 DECLE $0A05 ; ....#.#. ; - - - ; ...#.#.# f4f2 2a15 DECLE $2A15 ; ..#.#.#. ; - - - ; .#.#.#.# f4f3 aa55 DECLE $AA55 ; #.#.#.#. ; - - - ; .#.#.#.# f4f4 aa55 DECLE $AA55 ; #.#.#.#. ; - - - ; .###.#.# f4f5 9e75 DECLE $9E75 ; #..####. ; - - - ; ##.....# f4f6 3cc1 DECLE $3CC1 ; ..####.. ; - - - ; .##.###. f4f7 bb6e DECLE $BB6E ; #.###.## ; columns 24 .. 31 ; - - - ; ........ f4f8 0000 DECLE $0000 ; ........ ; - - - ; ........ f4f9 0000 DECLE $0000 ; ........ ; - - - ; ........ f4fa 6000 DECLE $6000 ; .##..... ; - - - ; #.##.... f4fb 58b0 DECLE $58B0 ; .#.##... ; - - - ; #.####.# f4fc 5ebd DECLE $5EBD ; .#.####. ; - - - ; #.#.#### f4fd 57af DECLE $57AF ; .#.#.### ; - - - ; #.#.#### f4fe d7af DECLE $D7AF ; ##.#.### ; - - - ; ..#####. f4ff 803e DECLE $803E ; #....... ENDP INCLUDE "gfx/midcity4.asm" 0xf500 MIDCITY4 PROC ; alignment #0 ; columns 0 .. 7 ; - - - ; #.#.#### f500 eeaf DECLE $EEAF ; ###.###. ; - - - ; ###..##. f501 c6e6 DECLE $C6E6 ; ##...##. ; - - - ; ##....#. f502 42c2 DECLE $42C2 ; .#....#. ; - - - ; ........ f503 0000 DECLE $0000 ; ........ ; - - - ; ###.#### f504 efef DECLE $EFEF ; ###.#### ; - - - ; ##..#### f505 c7cf DECLE $C7CF ; ##...### ; - - - ; ..#...## f506 1323 DECLE $1323 ; ...#..## ; - - - ; ....#..# f507 0009 DECLE $0009 ; ........ ; columns 8 .. 15 ; - - - ; ######## f508 6fff DECLE $6FFF ; .##.#### ; - - - ; #.#.###. f509 c6ae DECLE $C6AE ; ##...##. ; - - - ; ##...#.. f50a c0c4 DECLE $C0C4 ; ##...... ; - - - ; .#...... f50b 0040 DECLE $0040 ; ........ ; - - - ; ######## f50c b7ff DECLE $B7FF ; #.##.### ; - - - ; ..##.##. f50d 3236 DECLE $3236 ; ..##..#. ; - - - ; ...#..#. f50e 1112 DECLE $1112 ; ...#...# ; - - - ; .#.#...# f50f 0051 DECLE $0051 ; ........ ; columns 16 .. 23 ; - - - ; #######. f510 ddfe DECLE $DDFE ; ##.###.# ; - - - ; ##.##.## f511 e9db DECLE $E9DB ; ###.#..# ; - - - ; ####.... f512 60f0 DECLE $60F0 ; .##..... ; - - - ; .##..... f513 0060 DECLE $0060 ; ........ ; - - - ; #.###### f514 bfbf DECLE $BFBF ; #.###### ; - - - ; ..###.## f515 333b DECLE $333B ; ..##..## ; - - - ; #..#...# f516 8091 DECLE $8091 ; #....... ; - - - ; ........ f517 0000 DECLE $0000 ; ........ ; columns 24 .. 31 ; - - - ; ######.# f518 dcfd DECLE $DCFD ; ##.###.. ; - - - ; ##.###.. f519 68dc DECLE $68DC ; .##.#... ; - - - ; .##.#... f51a 4068 DECLE $4068 ; .#...... ; - - - ; .#...... f51b 4040 DECLE $4040 ; .#...... ; - - - ; ##..#### f51c cfcf DECLE $CFCF ; ##..#### ; - - - ; #....### f51d 8b87 DECLE $8B87 ; #...#.## ; - - - ; #..#..#. f51e 9092 DECLE $9092 ; #..#.... ; - - - ; ....#... f51f 0008 DECLE $0008 ; ........ ; alignment #1 ; columns 0 .. 7 ; - - - ; .#.##### f520 dd5f DECLE $DD5F ; ##.###.# ; - - - ; ##..##.# f521 8ccd DECLE $8CCD ; #...##.. ; - - - ; #....#.. f522 8484 DECLE $8484 ; #....#.. ; - - - ; ........ f523 0000 DECLE $0000 ; ........ ; - - - ; ##.##### f524 dfdf DECLE $DFDF ; ##.##### ; - - - ; #..##### f525 8f9f DECLE $8F9F ; #...#### ; - - - ; .#...### f526 2747 DECLE $2747 ; ..#..### ; - - - ; ...#..#. f527 0012 DECLE $0012 ; ........ ; columns 8 .. 15 ; - - - ; ######## f528 dfff DECLE $DFFF ; ##.##### ; - - - ; .#.###.# f529 8d5d DECLE $8D5D ; #...##.# ; - - - ; #...#..# f52a 8089 DECLE $8089 ; #....... ; - - - ; #....... f52b 0080 DECLE $0080 ; ........ ; - - - ; ######## f52c 6fff DECLE $6FFF ; .##.#### ; - - - ; .##.##.# f52d 656d DECLE $656D ; .##..#.# ; - - - ; ..#..#.. f52e 2224 DECLE $2224 ; ..#...#. ; - - - ; #.#...#. f52f 00a2 DECLE $00A2 ; ........ ; columns 16 .. 23 ; - - - ; ######.# f530 bafd DECLE $BAFD ; #.###.#. ; - - - ; #.##.### f531 d3b7 DECLE $D3B7 ; ##.#..## ; - - - ; ###....# f532 c1e1 DECLE $C1E1 ; ##.....# ; - - - ; ##...... f533 00c0 DECLE $00C0 ; ........ ; - - - ; .####### f534 7f7f DECLE $7F7F ; .####### ; - - - ; .###.##. f535 6676 DECLE $6676 ; .##..##. ; - - - ; ..#...#. f536 0022 DECLE $0022 ; ........ ; - - - ; ........ f537 0000 DECLE $0000 ; ........ ; columns 24 .. 31 ; - - - ; #####.## f538 b9fb DECLE $B9FB ; #.###..# ; - - - ; #.###..# f539 d1b9 DECLE $D1B9 ; ##.#...# ; - - - ; ##.#...# f53a 80d1 DECLE $80D1 ; #....... ; - - - ; #....... f53b 8080 DECLE $8080 ; #....... ; - - - ; #..##### f53c 9f9f DECLE $9F9F ; #..##### ; - - - ; ....###. f53d 160e DECLE $160E ; ...#.##. ; - - - ; ..#..#.# f53e 2125 DECLE $2125 ; ..#....# ; - - - ; ...#.... f53f 0010 DECLE $0010 ; ........ ; alignment #2 ; columns 0 .. 7 ; - - - ; #.###### f540 bbbf DECLE $BBBF ; #.###.## ; - - - ; #..##.## f541 199b DECLE $199B ; ...##..# ; - - - ; ....#..# f542 0909 DECLE $0909 ; ....#..# ; - - - ; .......# f543 0101 DECLE $0101 ; .......# ; - - - ; #.###### f544 bfbf DECLE $BFBF ; #.###### ; - - - ; ..#####. f545 1e3e DECLE $1E3E ; ...####. ; - - - ; #...###. f546 4e8e DECLE $4E8E ; .#..###. ; - - - ; ..#..#.. f547 0024 DECLE $0024 ; ........ ; columns 8 .. 15 ; - - - ; #######. f548 bffe DECLE $BFFE ; #.###### ; - - - ; #.###.## f549 1bbb DECLE $1BBB ; ...##.## ; - - - ; ...#..## f54a 0113 DECLE $0113 ; .......# ; - - - ; ........ f54b 0000 DECLE $0000 ; ........ ; - - - ; ######## f54c dfff DECLE $DFFF ; ##.##### ; - - - ; ##.##.## f54d cbdb DECLE $CBDB ; ##..#.## ; - - - ; .#..#... f54e 4448 DECLE $4448 ; .#...#.. ; - - - ; .#...#.. f54f 0044 DECLE $0044 ; ........ ; columns 16 .. 23 ; - - - ; #####.## f550 75fb DECLE $75FB ; .###.#.# ; - - - ; .##.###. f551 a76e DECLE $A76E ; #.#..### ; - - - ; ##....## f552 83c3 DECLE $83C3 ; #.....## ; - - - ; #......# f553 0081 DECLE $0081 ; ........ ; - - - ; ######## f554 feff DECLE $FEFF ; #######. ; - - - ; ###.##.. f555 ccec DECLE $CCEC ; ##..##.. ; - - - ; .#...#.. f556 0044 DECLE $0044 ; ........ ; - - - ; .......# f557 0001 DECLE $0001 ; ........ ; columns 24 .. 31 ; - - - ; ####.### f558 73f7 DECLE $73F7 ; .###..## ; - - - ; .###..## f559 a373 DECLE $A373 ; #.#...## ; - - - ; #.#...## f55a 01a3 DECLE $01A3 ; .......# ; - - - ; .......# f55b 0001 DECLE $0001 ; ........ ; - - - ; ..#####. f55c 3e3e DECLE $3E3E ; ..#####. ; - - - ; ...###.. f55d 2c1c DECLE $2C1C ; ..#.##.. ; - - - ; .#..#.#. f55e 424a DECLE $424A ; .#....#. ; - - - ; ..#..... f55f 0020 DECLE $0020 ; ........ ; alignment #3 ; columns 0 .. 7 ; - - - ; .####### f560 767f DECLE $767F ; .###.##. ; - - - ; ..##.##. f561 3336 DECLE $3336 ; ..##..## ; - - - ; ...#..## f562 1213 DECLE $1213 ; ...#..#. ; - - - ; ......#. f563 0202 DECLE $0202 ; ......#. ; - - - ; .######. f564 7e7e DECLE $7E7E ; .######. ; - - - ; .#####.. f565 3c7c DECLE $3C7C ; ..####.. ; - - - ; ...###.. f566 9c1c DECLE $9C1C ; #..###.. ; - - - ; .#..#... f567 0048 DECLE $0048 ; ........ ; columns 8 .. 15 ; - - - ; ######.# f568 7ffd DECLE $7FFD ; .####### ; - - - ; .###.### f569 3677 DECLE $3677 ; ..##.##. ; - - - ; ..#..##. f56a 0226 DECLE $0226 ; ......#. ; - - - ; ........ f56b 0000 DECLE $0000 ; ........ ; - - - ; ######## f56c bfff DECLE $BFFF ; #.###### ; - - - ; #.##.##. f56d 96b6 DECLE $96B6 ; #..#.##. ; - - - ; #..#...# f56e 8891 DECLE $8891 ; #...#... ; - - - ; #...#... f56f 0088 DECLE $0088 ; ........ ; columns 16 .. 23 ; - - - ; ####.### f570 ebf7 DECLE $EBF7 ; ###.#.## ; - - - ; ##.###.# f571 4edd DECLE $4EDD ; .#..###. ; - - - ; #....##. f572 0686 DECLE $0686 ; .....##. ; - - - ; ......#. f573 0002 DECLE $0002 ; ........ ; - - - ; ######## f574 fdff DECLE $FDFF ; ######.# ; - - - ; ##.##..# f575 99d9 DECLE $99D9 ; #..##..# ; - - - ; #...#... f576 0088 DECLE $0088 ; ........ ; - - - ; ......#. f577 0002 DECLE $0002 ; ........ ; columns 24 .. 31 ; - - - ; ###.#### f578 e6ef DECLE $E6EF ; ###..##. ; - - - ; ###..##. f579 47e6 DECLE $47E6 ; .#...### ; - - - ; .#...### f57a 0347 DECLE $0347 ; ......## ; - - - ; ......## f57b 0003 DECLE $0003 ; ........ ; - - - ; .#####.# f57c 7d7d DECLE $7D7D ; .#####.# ; - - - ; ..###..# f57d 5939 DECLE $5939 ; .#.##..# ; - - - ; #..#.#.. f57e 8494 DECLE $8494 ; #....#.. ; - - - ; .#...... f57f 0040 DECLE $0040 ; ........ ; alignment #4 ; columns 0 .. 7 ; - - - ; ######## f580 edff DECLE $EDFF ; ###.##.# ; - - - ; .##.##.# f581 666d DECLE $666D ; .##..##. ; - - - ; ..#..##. f582 2426 DECLE $2426 ; ..#..#.. ; - - - ; .....#.. f583 0404 DECLE $0404 ; .....#.. ; - - - ; ######.. f584 fcfc DECLE $FCFC ; ######.. ; - - - ; #####... f585 78f8 DECLE $78F8 ; .####... ; - - - ; ..###..# f586 3939 DECLE $3939 ; ..###..# ; - - - ; #..#.... f587 0090 DECLE $0090 ; ........ ; columns 8 .. 15 ; - - - ; #####.#. f588 fefa DECLE $FEFA ; #######. ; - - - ; ###.###. f589 6cee DECLE $6CEE ; .##.##.. ; - - - ; .#..##.. f58a 044c DECLE $044C ; .....#.. ; - - - ; ........ f58b 0000 DECLE $0000 ; ........ ; - - - ; #######. f58c 7efe DECLE $7EFE ; .######. ; - - - ; .##.##.. f58d 2c6c DECLE $2C6C ; ..#.##.. ; - - - ; ..#...#. f58e 1122 DECLE $1122 ; ...#...# ; - - - ; ...#.... f58f 0010 DECLE $0010 ; ........ ; columns 16 .. 23 ; - - - ; ###.#### f590 d6ef DECLE $D6EF ; ##.#.##. ; - - - ; #.###.#. f591 9cba DECLE $9CBA ; #..###.. ; - - - ; ....##.. f592 0c0c DECLE $0C0C ; ....##.. ; - - - ; .....#.. f593 0004 DECLE $0004 ; ........ ; - - - ; ######## f594 fbff DECLE $FBFF ; #####.## ; - - - ; #.##..## f595 33b3 DECLE $33B3 ; ..##..## ; - - - ; ...#...# f596 0111 DECLE $0111 ; .......# ; - - - ; .....#.# f597 0005 DECLE $0005 ; ........ ; columns 24 .. 31 ; - - - ; ##.##### f598 cddf DECLE $CDDF ; ##..##.# ; - - - ; ##..##.# f599 8ecd DECLE $8ECD ; #...###. ; - - - ; #...#### f59a 068f DECLE $068F ; .....##. ; - - - ; .....##. f59b 0006 DECLE $0006 ; ........ ; - - - ; #####.## f59c fbfb DECLE $FBFB ; #####.## ; - - - ; .###..## f59d b373 DECLE $B373 ; #.##..## ; - - - ; ..#.#..# f59e 0829 DECLE $0829 ; ....#... ; - - - ; #....... f59f 0080 DECLE $0080 ; ........ ; alignment #5 ; columns 0 .. 7 ; - - - ; ######## f5a0 dbff DECLE $DBFF ; ##.##.## ; - - - ; ##.##.## f5a1 cddb DECLE $CDDB ; ##..##.# ; - - - ; .#..##.# f5a2 484d DECLE $484D ; .#..#... ; - - - ; ....#... f5a3 0808 DECLE $0808 ; ....#... ; - - - ; #####..# f5a4 f9f9 DECLE $F9F9 ; #####..# ; - - - ; ####.... f5a5 f1f0 DECLE $F1F0 ; ####...# ; - - - ; .###..#. f5a6 7272 DECLE $7272 ; .###..#. ; - - - ; ..#....# f5a7 0021 DECLE $0021 ; ........ ; columns 8 .. 15 ; - - - ; ####.#.# f5a8 fdf5 DECLE $FDF5 ; ######.# ; - - - ; ##.###.. f5a9 d8dc DECLE $D8DC ; ##.##... ; - - - ; #..##... f5aa 0898 DECLE $0898 ; ....#... ; - - - ; ........ f5ab 0000 DECLE $0000 ; ........ ; - - - ; ######.# f5ac fdfd DECLE $FDFD ; ######.# ; - - - ; ##.##..# f5ad 58d9 DECLE $58D9 ; .#.##... ; - - - ; .#...#.. f5ae 2244 DECLE $2244 ; ..#...#. ; - - - ; ..#....# f5af 0021 DECLE $0021 ; ........ ; columns 16 .. 23 ; - - - ; ##.##### f5b0 addf DECLE $ADDF ; #.#.##.# ; - - - ; .###.#.# f5b1 3875 DECLE $3875 ; ..###... ; - - - ; ...##... f5b2 1818 DECLE $1818 ; ...##... ; - - - ; ....#... f5b3 0008 DECLE $0008 ; ........ ; - - - ; ######## f5b4 f6ff DECLE $F6FF ; ####.##. ; - - - ; .##..##. f5b5 6666 DECLE $6666 ; .##..##. ; - - - ; ..#...#. f5b6 0222 DECLE $0222 ; ......#. ; - - - ; ....#.#. f5b7 000a DECLE $000A ; ........ ; columns 24 .. 31 ; - - - ; #.###### f5b8 9bbf DECLE $9BBF ; #..##.## ; - - - ; #..##.## f5b9 1d9b DECLE $1D9B ; ...###.# ; - - - ; ...####. f5ba 0c1e DECLE $0C1E ; ....##.. ; - - - ; ....##.. f5bb 000c DECLE $000C ; ........ ; - - - ; ####.### f5bc f7f7 DECLE $F7F7 ; ####.### ; - - - ; ###..### f5bd 66e7 DECLE $66E7 ; .##..##. ; - - - ; .#.#..#. f5be 1052 DECLE $1052 ; ...#.... ; - - - ; ........ f5bf 0000 DECLE $0000 ; ........ ; alignment #6 ; columns 0 .. 7 ; - - - ; ######## f5c0 b7ff DECLE $B7FF ; #.##.### ; - - - ; #.##.### f5c1 9ab7 DECLE $9AB7 ; #..##.#. ; - - - ; #..##.#. f5c2 909a DECLE $909A ; #..#.... ; - - - ; ...#.... f5c3 1010 DECLE $1010 ; ...#.... ; - - - ; ####..## f5c4 f3f3 DECLE $F3F3 ; ####..## ; - - - ; ###....# f5c5 e2e1 DECLE $E2E1 ; ###...#. ; - - - ; ###..#.. f5c6 e4e4 DECLE $E4E4 ; ###..#.. ; - - - ; .#....#. f5c7 0042 DECLE $0042 ; ........ ; columns 8 .. 15 ; - - - ; ###.#.## f5c8 fbeb DECLE $FBEB ; #####.## ; - - - ; #.###..# f5c9 b1b9 DECLE $B1B9 ; #.##...# ; - - - ; ..##.... f5ca 1030 DECLE $1030 ; ...#.... ; - - - ; ........ f5cb 0000 DECLE $0000 ; ........ ; - - - ; #####.## f5cc fbfb DECLE $FBFB ; #####.## ; - - - ; #.##..## f5cd b1b3 DECLE $B1B3 ; #.##...# ; - - - ; #...#... f5ce 4488 DECLE $4488 ; .#...#.. ; - - - ; .#....#. f5cf 0042 DECLE $0042 ; ........ ; columns 16 .. 23 ; - - - ; #.###### f5d0 5bbf DECLE $5BBF ; .#.##.## ; - - - ; ###.#.## f5d1 71eb DECLE $71EB ; .###...# ; - - - ; ..##...# f5d2 3031 DECLE $3031 ; ..##.... ; - - - ; ...#.... f5d3 0010 DECLE $0010 ; ........ ; - - - ; ######## f5d4 edff DECLE $EDFF ; ###.##.# ; - - - ; ##..##.# f5d5 cccd DECLE $CCCD ; ##..##.. ; - - - ; .#...#.. f5d6 0444 DECLE $0444 ; .....#.. ; - - - ; ...#.#.. f5d7 0014 DECLE $0014 ; ........ ; columns 24 .. 31 ; - - - ; .####### f5d8 377f DECLE $377F ; ..##.### ; - - - ; ..##.##. f5d9 3a36 DECLE $3A36 ; ..###.#. ; - - - ; ..####.. f5da 183c DECLE $183C ; ...##... ; - - - ; ...##... f5db 0018 DECLE $0018 ; ........ ; - - - ; ###.#### f5dc efef DECLE $EFEF ; ###.#### ; - - - ; ##..###. f5dd ccce DECLE $CCCE ; ##..##.. ; - - - ; #.#..#.. f5de 20a4 DECLE $20A4 ; ..#..... ; - - - ; ........ f5df 0000 DECLE $0000 ; ........ ; alignment #7 ; columns 0 .. 7 ; - - - ; #######. f5e0 6efe DECLE $6EFE ; .##.###. ; - - - ; .##.###. f5e1 346e DECLE $346E ; ..##.#.. ; - - - ; ..##.#.. f5e2 2034 DECLE $2034 ; ..#..... ; - - - ; ..#..... f5e3 2020 DECLE $2020 ; ..#..... ; - - - ; ###..### f5e4 e7e7 DECLE $E7E7 ; ###..### ; - - - ; ##....## f5e5 c5c3 DECLE $C5C3 ; ##...#.# ; - - - ; ##..#..# f5e6 c8c9 DECLE $C8C9 ; ##..#... ; - - - ; #....#.. f5e7 0084 DECLE $0084 ; ........ ; columns 8 .. 15 ; - - - ; ##.#.### f5e8 f7d7 DECLE $F7D7 ; ####.### ; - - - ; .###..## f5e9 6373 DECLE $6373 ; .##...## ; - - - ; .##....# f5ea 2161 DECLE $2161 ; ..#....# ; - - - ; ........ f5eb 0000 DECLE $0000 ; ........ ; - - - ; ####.### f5ec f7f7 DECLE $F7F7 ; ####.### ; - - - ; .##..### f5ed 6367 DECLE $6367 ; .##...## ; - - - ; ...#...# f5ee 8911 DECLE $8911 ; #...#..# ; - - - ; #....#.. f5ef 0084 DECLE $0084 ; ........ ; columns 16 .. 23 ; - - - ; .####### f5f0 b77f DECLE $B77F ; #.##.### ; - - - ; ##.#.### f5f1 e3d7 DECLE $E3D7 ; ###...## ; - - - ; .##...#. f5f2 6062 DECLE $6062 ; .##..... ; - - - ; ..#..... f5f3 0020 DECLE $0020 ; ........ ; - - - ; ######## f5f4 dbff DECLE $DBFF ; ##.##.## ; - - - ; #..##.## f5f5 999b DECLE $999B ; #..##..# ; - - - ; #...#..# f5f6 0889 DECLE $0889 ; ....#... ; - - - ; ..#.#... f5f7 0028 DECLE $0028 ; ........ ; columns 24 .. 31 ; - - - ; ######## f5f8 6eff DECLE $6EFF ; .##.###. ; - - - ; .##.##.# f5f9 746d DECLE $746D ; .###.#.. ; - - - ; .####... f5fa 3078 DECLE $3078 ; ..##.... ; - - - ; ..##.... f5fb 0030 DECLE $0030 ; ........ ; - - - ; ##.##### f5fc dfdf DECLE $DFDF ; ##.##### ; - - - ; #..###.# f5fd 999d DECLE $999D ; #..##..# ; - - - ; .#..#... f5fe 4048 DECLE $4048 ; .#...... ; - - - ; ........ f5ff 0000 DECLE $0000 ; ........ ENDP INCLUDE "gfx/rockbg.asm" 0xf600 ROCKBG PROC ; alignment #0 ; columns 0 .. 7 ; - - - ; ####.### f600 cff7 DECLE $CFF7 ; ##..#### ; - - - ; #.###### f601 f7bf DECLE $F7BF ; ####.### ; - - - ; ##.####. f602 ffde DECLE $FFDE ; ######## ; - - - ; ####.##. f603 eff6 DECLE $EFF6 ; ###.#### ; - - - ; ######## f604 ffff DECLE $FFFF ; ######## ; - - - ; ##.##### f605 ebdf DECLE $EBDF ; ###.#.## ; - - - ; #####.## f606 f7fb DECLE $F7FB ; ####.### ; - - - ; #.##.### f607 dbb7 DECLE $DBB7 ; ##.##.## ; columns 8 .. 15 ; - - - ; ##.##.## f608 b7db DECLE $B7DB ; #.##.### ; - - - ; ####.### f609 fbf7 DECLE $FBF7 ; #####.## ; - - - ; ###.#.## f60a ddeb DECLE $DDEB ; ##.###.# ; - - - ; #####.#. f60b fdfa DECLE $FDFA ; ######.# ; - - - ; .##.#### f60c f56f DECLE $F56F ; ####.#.# ; - - - ; ######## f60d cfff DECLE $CFFF ; ##..#### ; - - - ; ####..## f60e bcf3 DECLE $BCF3 ; #.####.. ; - - - ; ##..#### f60f f7cf DECLE $F7CF ; ####.### ; columns 16 .. 23 ; - - - ; #####.## f610 fdfb DECLE $FDFB ; ######.# ; - - - ; ######.. f611 7bfc DECLE $7BFC ; .####.## ; - - - ; #.##.### f612 f7b7 DECLE $F7B7 ; ####.### ; - - - ; ######## f613 7bff DECLE $7BFF ; .####.## ; - - - ; ######## f614 deff DECLE $DEFF ; ##.####. ; - - - ; ###.##.# f615 d7ed DECLE $D7ED ; ##.#.### ; - - - ; #.###.## f616 fbbb DECLE $FBBB ; #####.## ; - - - ; ####.### f617 fff7 DECLE $FFF7 ; ######## ; columns 24 .. 31 ; - - - ; ######## f618 fbff DECLE $FBFF ; #####.## ; - - - ; ####.### f619 77f7 DECLE $77F7 ; .###.### ; - - - ; ##.##.## f61a eddb DECLE $EDDB ; ###.##.# ; - - - ; ######.. f61b 7ffc DECLE $7FFC ; .####### ; - - - ; #.####.# f61c d3bd DECLE $D3BD ; ##.#..## ; - - - ; #####.## f61d 7afb DECLE $7AFB ; .####.#. ; - - - ; #.##.### f61e efb7 DECLE $EFB7 ; ###.#### ; - - - ; ###.#### f61f f7ef DECLE $F7EF ; ####.### ; alignment #1 ; columns 0 .. 7 ; - - - ; ###.#### f620 9fef DECLE $9FEF ; #..##### ; - - - ; .####### f621 ee7f DECLE $EE7F ; ###.###. ; - - - ; #.####.# f622 ffbd DECLE $FFBD ; ######## ; - - - ; ###.##.# f623 deed DECLE $DEED ; ##.####. ; - - - ; ######## f624 ffff DECLE $FFFF ; ######## ; - - - ; #.###### f625 d6bf DECLE $D6BF ; ##.#.##. ; - - - ; ####.### f626 eff7 DECLE $EFF7 ; ###.#### ; - - - ; .##.#### f627 b76f DECLE $B76F ; #.##.### ; columns 8 .. 15 ; - - - ; #.##.### f628 6fb7 DECLE $6FB7 ; .##.#### ; - - - ; ###.#### f629 f7ef DECLE $F7EF ; ####.### ; - - - ; ##.#.### f62a bbd7 DECLE $BBD7 ; #.###.## ; - - - ; ####.#.# f62b fbf5 DECLE $FBF5 ; #####.## ; - - - ; ##.##### f62c ebdf DECLE $EBDF ; ###.#.## ; - - - ; ######## f62d 9fff DECLE $9FFF ; #..##### ; - - - ; ###..### f62e 79e7 DECLE $79E7 ; .####..# ; - - - ; #..##### f62f ef9f DECLE $EF9F ; ###.#### ; columns 16 .. 23 ; - - - ; ####.### f630 fbf7 DECLE $FBF7 ; #####.## ; - - - ; #####..# f631 f7f9 DECLE $F7F9 ; ####.### ; - - - ; .##.#### f632 ef6f DECLE $EF6F ; ###.#### ; - - - ; ######## f633 f7ff DECLE $F7FF ; ####.### ; - - - ; #######. f634 bdfe DECLE $BDFE ; #.####.# ; - - - ; ##.##.## f635 afdb DECLE $AFDB ; #.#.#### ; - - - ; .###.### f636 f777 DECLE $F777 ; ####.### ; - - - ; ###.#### f637 ffef DECLE $FFEF ; ######## ; columns 24 .. 31 ; - - - ; ######## f638 f7ff DECLE $F7FF ; ####.### ; - - - ; ###.#### f639 eeef DECLE $EEEF ; ###.###. ; - - - ; #.##.### f63a dbb7 DECLE $DBB7 ; ##.##.## ; - - - ; #####..# f63b fef9 DECLE $FEF9 ; #######. ; - - - ; .####.## f63c a77b DECLE $A77B ; #.#..### ; - - - ; ####.### f63d f5f7 DECLE $F5F7 ; ####.#.# ; - - - ; .##.#### f63e df6f DECLE $DF6F ; ##.##### ; - - - ; ##.##### f63f efdf DECLE $EFDF ; ###.#### ; alignment #2 ; columns 0 .. 7 ; - - - ; ##.##### f640 3fdf DECLE $3FDF ; ..###### ; - - - ; ######## f641 ddff DECLE $DDFF ; ##.###.# ; - - - ; .####.## f642 ff7b DECLE $FF7B ; ######## ; - - - ; ##.##.## f643 bddb DECLE $BDDB ; #.####.# ; - - - ; #######. f644 fffe DECLE $FFFE ; ######## ; - - - ; .####### f645 ad7f DECLE $AD7F ; #.#.##.# ; - - - ; ###.###. f646 dfee DECLE $DFEE ; ##.##### ; - - - ; ##.##### f647 6fdf DECLE $6FDF ; .##.#### ; columns 8 .. 15 ; - - - ; .##.#### f648 df6f DECLE $DF6F ; ##.##### ; - - - ; ##.####. f649 efde DECLE $EFDE ; ###.#### ; - - - ; #.#.#### f64a 77af DECLE $77AF ; .###.### ; - - - ; ###.#.## f64b f7eb DECLE $F7EB ; ####.### ; - - - ; #.###### f64c d7bf DECLE $D7BF ; ##.#.### ; - - - ; ######## f64d 3fff DECLE $3FFF ; ..###### ; - - - ; ##..#### f64e f3cf DECLE $F3CF ; ####..## ; - - - ; ..#####. f64f df3e DECLE $DF3E ; ##.##### ; columns 16 .. 23 ; - - - ; ###.#### f650 f6ef DECLE $F6EF ; ####.##. ; - - - ; ####..## f651 eff3 DECLE $EFF3 ; ###.#### ; - - - ; ##.##### f652 dfdf DECLE $DFDF ; ##.##### ; - - - ; ######## f653 efff DECLE $EFFF ; ###.#### ; - - - ; ######.# f654 7bfd DECLE $7BFD ; .####.## ; - - - ; #.##.### f655 5fb7 DECLE $5FB7 ; .#.##### ; - - - ; ###.#### f656 eeef DECLE $EEEF ; ###.###. ; - - - ; ##.##### f657 ffdf DECLE $FFDF ; ######## ; columns 24 .. 31 ; - - - ; ######## f658 efff DECLE $EFFF ; ###.#### ; - - - ; ##.##### f659 dddf DECLE $DDDF ; ##.###.# ; - - - ; .##.###. f65a b76e DECLE $B76E ; #.##.### ; - - - ; ####..## f65b fdf3 DECLE $FDF3 ; ######.# ; - - - ; ####.### f65c 4ff7 DECLE $4FF7 ; .#..#### ; - - - ; ###.#### f65d ebef DECLE $EBEF ; ###.#.## ; - - - ; ##.####. f65e bfde DECLE $BFDE ; #.###### ; - - - ; #.###### f65f dfbf DECLE $DFBF ; ##.##### ; alignment #3 ; columns 0 .. 7 ; - - - ; #.###### f660 7fbf DECLE $7FBF ; .####### ; - - - ; ######## f661 bbff DECLE $BBFF ; #.###.## ; - - - ; ####.##. f662 fff6 DECLE $FFF6 ; ######## ; - - - ; #.##.### f663 7bb7 DECLE $7BB7 ; .####.## ; - - - ; ######.# f664 fefd DECLE $FEFD ; #######. ; - - - ; ######## f665 5bff DECLE $5BFF ; .#.##.## ; - - - ; ##.###.# f666 bfdd DECLE $BFDD ; #.###### ; - - - ; #.###### f667 dfbf DECLE $DFBF ; ##.##### ; columns 8 .. 15 ; - - - ; ##.##### f668 bedf DECLE $BEDF ; #.#####. ; - - - ; #.####.# f669 dfbd DECLE $DFBD ; ##.##### ; - - - ; .#.####. f66a ef5e DECLE $EF5E ; ###.#### ; - - - ; ##.#.### f66b efd7 DECLE $EFD7 ; ###.#### ; - - - ; .####### f66c af7f DECLE $AF7F ; #.#.#### ; - - - ; #######. f66d 7ffe DECLE $7FFE ; .####### ; - - - ; #..##### f66e e79f DECLE $E79F ; ###..### ; - - - ; .#####.# f66f be7d DECLE $BE7D ; #.#####. ; columns 16 .. 23 ; - - - ; ##.####. f670 edde DECLE $EDDE ; ###.##.# ; - - - ; ###..### f671 dfe7 DECLE $DFE7 ; ##.##### ; - - - ; #.###### f672 bebf DECLE $BEBF ; #.#####. ; - - - ; ######## f673 dfff DECLE $DFFF ; ##.##### ; - - - ; #####.## f674 f7fb DECLE $F7FB ; ####.### ; - - - ; .##.#### f675 be6f DECLE $BE6F ; #.#####. ; - - - ; ##.##### f676 dddf DECLE $DDDF ; ##.###.# ; - - - ; #.#####. f677 ffbe DECLE $FFBE ; ######## ; columns 24 .. 31 ; - - - ; ######## f678 dfff DECLE $DFFF ; ##.##### ; - - - ; #.###### f679 bbbf DECLE $BBBF ; #.###.## ; - - - ; ##.###.# f67a 6fdd DECLE $6FDD ; .##.#### ; - - - ; ###..### f67b fbe7 DECLE $FBE7 ; #####.## ; - - - ; ###.#### f67c 9eef DECLE $9EEF ; #..####. ; - - - ; ##.##### f67d d6df DECLE $D6DF ; ##.#.##. ; - - - ; #.####.# f67e 7fbd DECLE $7FBD ; .####### ; - - - ; .####### f67f bf7f DECLE $BF7F ; #.###### ; alignment #4 ; columns 0 .. 7 ; - - - ; .####### f680 ff7f DECLE $FF7F ; ######## ; - - - ; ######## f681 77ff DECLE $77FF ; .###.### ; - - - ; ###.##.# f682 feed DECLE $FEED ; #######. ; - - - ; .##.#### f683 f76f DECLE $F76F ; ####.### ; - - - ; #####.## f684 fdfb DECLE $FDFB ; ######.# ; - - - ; ######## f685 b7ff DECLE $B7FF ; #.##.### ; - - - ; #.###.## f686 7ebb DECLE $7EBB ; .######. ; - - - ; .######. f687 bf7e DECLE $BF7E ; #.###### ; columns 8 .. 15 ; - - - ; #.###### f688 7cbf DECLE $7CBF ; .#####.. ; - - - ; .####.## f689 bf7b DECLE $BF7B ; #.###### ; - - - ; #.####.# f68a dfbd DECLE $DFBD ; ##.##### ; - - - ; #.#.#### f68b deaf DECLE $DEAF ; ##.####. ; - - - ; ######## f68c 5fff DECLE $5FFF ; .#.##### ; - - - ; ######.# f68d fefd DECLE $FEFD ; #######. ; - - - ; ..###### f68e cf3f DECLE $CF3F ; ##..#### ; - - - ; #####.## f68f 7dfb DECLE $7DFB ; .#####.# ; columns 16 .. 23 ; - - - ; #.####.# f690 dbbd DECLE $DBBD ; ##.##.## ; - - - ; ##..#### f691 bfcf DECLE $BFCF ; #.###### ; - - - ; .######. f692 7d7e DECLE $7D7E ; .#####.# ; - - - ; ######## f693 bfff DECLE $BFFF ; #.###### ; - - - ; ####.##. f694 eff6 DECLE $EFF6 ; ###.#### ; - - - ; ##.##### f695 7cdf DECLE $7CDF ; .#####.. ; - - - ; #.###### f696 bbbf DECLE $BBBF ; #.###.## ; - - - ; .#####.. f697 ff7c DECLE $FF7C ; ######## ; columns 24 .. 31 ; - - - ; ######## f698 bfff DECLE $BFFF ; #.###### ; - - - ; .####### f699 777f DECLE $777F ; .###.### ; - - - ; #.###.## f69a dfbb DECLE $DFBB ; ##.##### ; - - - ; ##..#### f69b f7cf DECLE $F7CF ; ####.### ; - - - ; ##.##### f69c 3ddf DECLE $3DDF ; ..####.# ; - - - ; #.#####. f69d adbe DECLE $ADBE ; #.#.##.# ; - - - ; .####.## f69e ff7b DECLE $FF7B ; ######## ; - - - ; ######## f69f 7fff DECLE $7FFF ; .####### ; alignment #5 ; columns 0 .. 7 ; - - - ; ######## f6a0 ffff DECLE $FFFF ; ######## ; - - - ; #######. f6a1 eefe DECLE $EEFE ; ###.###. ; - - - ; ##.##.## f6a2 fddb DECLE $FDDB ; ######.# ; - - - ; ##.##### f6a3 efdf DECLE $EFDF ; ###.#### ; - - - ; ####.### f6a4 faf7 DECLE $FAF7 ; #####.#. ; - - - ; ######## f6a5 6fff DECLE $6FFF ; .##.#### ; - - - ; .###.##. f6a6 fd76 DECLE $FD76 ; ######.# ; - - - ; ######.# f6a7 7efd DECLE $7EFD ; .######. ; columns 8 .. 15 ; - - - ; .######. f6a8 f97e DECLE $F97E ; #####..# ; - - - ; ####.### f6a9 7ef7 DECLE $7EF7 ; .######. ; - - - ; .####.## f6aa bf7b DECLE $BF7B ; #.###### ; - - - ; .#.####. f6ab bd5e DECLE $BD5E ; #.####.# ; - - - ; ######## f6ac bfff DECLE $BFFF ; #.###### ; - - - ; #####.## f6ad fdfb DECLE $FDFB ; ######.# ; - - - ; .####### f6ae 9e7f DECLE $9E7F ; #..####. ; - - - ; ####.##. f6af fbf6 DECLE $FBF6 ; #####.## ; columns 16 .. 23 ; - - - ; .####.## f6b0 b67b DECLE $B67B ; #.##.##. ; - - - ; #..####. f6b1 7f9e DECLE $7F9E ; .####### ; - - - ; ######.# f6b2 fbfd DECLE $FBFD ; #####.## ; - - - ; ######## f6b3 7fff DECLE $7FFF ; .####### ; - - - ; ###.##.# f6b4 deed DECLE $DEED ; ##.####. ; - - - ; #.###### f6b5 f9bf DECLE $F9BF ; #####..# ; - - - ; .######. f6b6 777e DECLE $777E ; .###.### ; - - - ; #####..# f6b7 fef9 DECLE $FEF9 ; #######. ; columns 24 .. 31 ; - - - ; ######## f6b8 7fff DECLE $7FFF ; .####### ; - - - ; ######## f6b9 efff DECLE $EFFF ; ###.#### ; - - - ; .###.##. f6ba be76 DECLE $BE76 ; #.#####. ; - - - ; #..##### f6bb ef9f DECLE $EF9F ; ###.#### ; - - - ; #.###### f6bc 7bbf DECLE $7BBF ; .####.## ; - - - ; .#####.# f6bd 5a7d DECLE $5A7D ; .#.##.#. ; - - - ; ####.### f6be fff7 DECLE $FFF7 ; ######## ; - - - ; #######. f6bf fffe DECLE $FFFE ; ######## ; alignment #6 ; columns 0 .. 7 ; - - - ; ######## f6c0 feff DECLE $FEFF ; #######. ; - - - ; ######.# f6c1 ddfd DECLE $DDFD ; ##.###.# ; - - - ; #.##.##. f6c2 fbb6 DECLE $FBB6 ; #####.## ; - - - ; #.###### f6c3 dfbf DECLE $DFBF ; ##.##### ; - - - ; ###.#### f6c4 f4ef DECLE $F4EF ; ####.#.. ; - - - ; #######. f6c5 defe DECLE $DEFE ; ##.####. ; - - - ; ###.##.# f6c6 fbed DECLE $FBED ; #####.## ; - - - ; #####.## f6c7 fdfb DECLE $FDFB ; ######.# ; columns 8 .. 15 ; - - - ; ######.# f6c8 f3fd DECLE $F3FD ; ####..## ; - - - ; ###.#### f6c9 fdef DECLE $FDEF ; ######.# ; - - - ; ####.### f6ca 7ff7 DECLE $7FF7 ; .####### ; - - - ; #.####.# f6cb 7bbd DECLE $7BBD ; .####.## ; - - - ; ######## f6cc 7fff DECLE $7FFF ; .####### ; - - - ; ####.### f6cd faf7 DECLE $FAF7 ; #####.#. ; - - - ; #######. f6ce 3dfe DECLE $3DFE ; ..####.# ; - - - ; ###.##.# f6cf f6ed DECLE $F6ED ; ####.##. ; columns 16 .. 23 ; - - - ; ####.##. f6d0 6df6 DECLE $6DF6 ; .##.##.# ; - - - ; ..####.# f6d1 fe3d DECLE $FE3D ; #######. ; - - - ; #####.#. f6d2 f7fa DECLE $F7FA ; ####.### ; - - - ; #######. f6d3 fffe DECLE $FFFE ; ######## ; - - - ; ##.##.## f6d4 bddb DECLE $BDDB ; #.####.# ; - - - ; .####### f6d5 f37f DECLE $F37F ; ####..## ; - - - ; ######.. f6d6 effc DECLE $EFFC ; ###.#### ; - - - ; ####..## f6d7 fdf3 DECLE $FDF3 ; ######.# ; columns 24 .. 31 ; - - - ; #######. f6d8 fffe DECLE $FFFE ; ######## ; - - - ; ######## f6d9 deff DECLE $DEFF ; ##.####. ; - - - ; ###.##.# f6da 7ded DECLE $7DED ; .#####.# ; - - - ; ..###### f6db de3f DECLE $DE3F ; ##.####. ; - - - ; .####### f6dc f77f DECLE $F77F ; ####.### ; - - - ; #####.## f6dd b5fb DECLE $B5FB ; #.##.#.# ; - - - ; ###.###. f6de feee DECLE $FEEE ; #######. ; - - - ; ######.# f6df fffd DECLE $FFFD ; ######## ; alignment #7 ; columns 0 .. 7 ; - - - ; ######## f6e0 fdff DECLE $FDFF ; ######.# ; - - - ; #####.## f6e1 bbfb DECLE $BBFB ; #.###.## ; - - - ; .##.##.# f6e2 f66d DECLE $F66D ; ####.##. ; - - - ; .######. f6e3 bf7e DECLE $BF7E ; #.###### ; - - - ; ##.####. f6e4 e9de DECLE $E9DE ; ###.#..# ; - - - ; ######.# f6e5 bdfd DECLE $BDFD ; #.####.# ; - - - ; ##.##.## f6e6 f7db DECLE $F7DB ; ####.### ; - - - ; ####.### f6e7 fbf7 DECLE $FBF7 ; #####.## ; columns 8 .. 15 ; - - - ; #####.## f6e8 e7fb DECLE $E7FB ; ###..### ; - - - ; ##.##### f6e9 fbdf DECLE $FBDF ; #####.## ; - - - ; ###.#### f6ea ffef DECLE $FFEF ; ######## ; - - - ; .####.## f6eb f77b DECLE $F77B ; ####.### ; - - - ; ######## f6ec ffff DECLE $FFFF ; ######## ; - - - ; ###.#### f6ed f5ef DECLE $F5EF ; ####.#.# ; - - - ; ######.# f6ee 7bfd DECLE $7BFD ; .####.## ; - - - ; ##.##.## f6ef eddb DECLE $EDDB ; ###.##.# ; columns 16 .. 23 ; - - - ; ###.##.# f6f0 dbed DECLE $DBED ; ##.##.## ; - - - ; .####.## f6f1 fd7b DECLE $FD7B ; ######.# ; - - - ; ####.#.# f6f2 eef5 DECLE $EEF5 ; ###.###. ; - - - ; ######.# f6f3 fefd DECLE $FEFD ; #######. ; - - - ; #.##.### f6f4 7ab7 DECLE $7AB7 ; .####.#. ; - - - ; ######## f6f5 e7ff DECLE $E7FF ; ###..### ; - - - ; #####..# f6f6 def9 DECLE $DEF9 ; ##.####. ; - - - ; ###..### f6f7 fbe7 DECLE $FBE7 ; #####.## ; columns 24 .. 31 ; - - - ; ######.# f6f8 fefd DECLE $FEFD ; #######. ; - - - ; #######. f6f9 bdfe DECLE $BDFE ; #.####.# ; - - - ; ##.##.## f6fa fbdb DECLE $FBDB ; #####.## ; - - - ; .####### f6fb bd7f DECLE $BD7F ; #.####.# ; - - - ; ######## f6fc efff DECLE $EFFF ; ###.#### ; - - - ; ####.##. f6fd 6bf6 DECLE $6BF6 ; .##.#.## ; - - - ; ##.###.# f6fe fddd DECLE $FDDD ; ######.# ; - - - ; #####.## f6ff fffb DECLE $FFFB ; ######## ENDP INCLUDE "gfx/rockcrat.asm" 0xf700 ROCKCRAT PROC ;---------- Offset 0 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f700 0000 DECLE $0000 ; ........ ; - - - ; ........ f701 0000 DECLE $0000 ; ........ ; - - - ; ........ f702 0000 DECLE $0000 ; ........ ; - - - ; ........ f703 0000 DECLE $0000 ; ........ ; - - - ; ........ f704 0000 DECLE $0000 ; ........ ; - - - ; ....#... f705 1c08 DECLE $1C08 ; ...###.. ; - - - ; ...####. f706 3f1e DECLE $3F1E ; ..###### ; - - - ; .####### f707 ff7f DECLE $FF7F ; ######## ; Cards 2 - 3: Rock 2 ; - - - ; ........ f708 0000 DECLE $0000 ; ........ ; - - - ; ........ f709 0000 DECLE $0000 ; ........ ; - - - ; ........ f70a 0000 DECLE $0000 ; ........ ; - - - ; ........ f70b 0000 DECLE $0000 ; ........ ; - - - ; ....#... f70c 1c08 DECLE $1C08 ; ...###.. ; - - - ; ..####.. f70d 3e3c DECLE $3E3C ; ..#####. ; - - - ; .######. f70e ff7e DECLE $FF7E ; ######## ; - - - ; ######## f70f ffff DECLE $FFFF ; ######## ; Cards 4 - 6: Rock 3 ; - - - ; ........ f710 0000 DECLE $0000 ; ........ ; - - - ; ........ f711 0000 DECLE $0000 ; ........ ; - - - ; ........ f712 0000 DECLE $0000 ; ........ ; - - - ; ........ f713 0000 DECLE $0000 ; ........ ; - - - ; ........ f714 0000 DECLE $0000 ; ........ ; - - - ; ....#... f715 1c08 DECLE $1C08 ; ...###.. ; - - - ; ...##### f716 3f1f DECLE $3F1F ; ..###### ; - - - ; .####### f717 ff7f DECLE $FF7F ; ######## ; - - - ; ....#... f718 1c08 DECLE $1C08 ; ...###.. ; - - - ; .#####.. f719 fe7c DECLE $FE7C ; #######. ; - - - ; #######. f71a fffe DECLE $FFFE ; ######## ; - - - ; ######## f71b ffff DECLE $FFFF ; ######## ; Cards 7 - 8: Crat 1 ; - - - ; ..#####. f71c ff3e DECLE $FF3E ; ######## ; - - - ; ######## f71d ffff DECLE $FFFF ; ######## ; - - - ; ######## f71e ffff DECLE $FFFF ; ######## ; - - - ; ######## f71f ffff DECLE $FFFF ; ######## ; - - - ; ........ f720 0000 DECLE $0000 ; ........ ; - - - ; #....... f721 8180 DECLE $8180 ; #......# ; - - - ; ##....## f722 e7c3 DECLE $E7C3 ; ###..### ; - - - ; ######## f723 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; ..#####. f724 ff3e DECLE $FF3E ; ######## ; - - - ; ######## f725 ffff DECLE $FFFF ; ######## ; - - - ; ######## f726 ffff DECLE $FFFF ; ######## ; - - - ; ######## f727 ffff DECLE $FFFF ; ######## ; - - - ; ........ f728 0000 DECLE $0000 ; ........ ; - - - ; #....... f729 8080 DECLE $8080 ; #....... ; - - - ; #....... f72a c080 DECLE $C080 ; ##...... ; - - - ; ###..... f72b f8e0 DECLE $F8E0 ; #####... ; - - - ; ........ f72c 0000 DECLE $0000 ; ........ ; - - - ; .......# f72d 0101 DECLE $0101 ; .......# ; - - - ; ......## f72e 0f03 DECLE $0F03 ; ....#### ; - - - ; ...##### f72f 7f1f DECLE $7F1F ; .####### ;---------- Offset 1 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f730 0000 DECLE $0000 ; ........ ; - - - ; ........ f731 0000 DECLE $0000 ; ........ ; - - - ; ........ f732 0000 DECLE $0000 ; ........ ; - - - ; ........ f733 0100 DECLE $0100 ; .......# ; - - - ; ........ f734 0000 DECLE $0000 ; ........ ; - - - ; ...#.... f735 3810 DECLE $3810 ; ..###... ; - - - ; ..####.. f736 7e3c DECLE $7E3C ; .######. ; - - - ; #######. f737 fefe DECLE $FEFE ; #######. ; Cards 2 - 3: Rock 2 ; - - - ; ........ f738 0000 DECLE $0000 ; ........ ; - - - ; ........ f739 0000 DECLE $0000 ; ........ ; - - - ; ........ f73a 0100 DECLE $0100 ; .......# ; - - - ; .......# f73b 0101 DECLE $0101 ; .......# ; - - - ; ...#.... f73c 3810 DECLE $3810 ; ..###... ; - - - ; .####... f73d 7c78 DECLE $7C78 ; .#####.. ; - - - ; ######.. f73e fefc DECLE $FEFC ; #######. ; - - - ; #######. f73f fefe DECLE $FEFE ; #######. ; Cards 4 - 6: Rock 3 ; - - - ; ........ f740 0000 DECLE $0000 ; ........ ; - - - ; ........ f741 0000 DECLE $0000 ; ........ ; - - - ; ........ f742 0000 DECLE $0000 ; ........ ; - - - ; ........ f743 0100 DECLE $0100 ; .......# ; - - - ; ........ f744 0000 DECLE $0000 ; ........ ; - - - ; ...#.... f745 3910 DECLE $3910 ; ..###..# ; - - - ; ..###### f746 7f3f DECLE $7F3F ; .####### ; - - - ; ######## f747 ffff DECLE $FFFF ; ######## ; - - - ; ...#.... f748 3810 DECLE $3810 ; ..###... ; - - - ; #####... f749 fcf8 DECLE $FCF8 ; ######.. ; - - - ; ######.. f74a fefc DECLE $FEFC ; #######. ; - - - ; #######. f74b fefe DECLE $FEFE ; #######. ; Cards 7 - 8: Crat 1 ; - - - ; .#####.. f74c fe7c DECLE $FE7C ; #######. ; - - - ; ######## f74d ffff DECLE $FFFF ; ######## ; - - - ; ######## f74e ffff DECLE $FFFF ; ######## ; - - - ; ######## f74f ffff DECLE $FFFF ; ######## ; - - - ; ........ f750 0100 DECLE $0100 ; .......# ; - - - ; .......# f751 0301 DECLE $0301 ; ......## ; - - - ; #....### f752 cf87 DECLE $CF87 ; ##..#### ; - - - ; ######## f753 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; .#####.. f754 fe7c DECLE $FE7C ; #######. ; - - - ; ######## f755 ffff DECLE $FFFF ; ######## ; - - - ; ######## f756 ffff DECLE $FFFF ; ######## ; - - - ; ######## f757 ffff DECLE $FFFF ; ######## ; - - - ; ........ f758 0000 DECLE $0000 ; ........ ; - - - ; ........ f759 0000 DECLE $0000 ; ........ ; - - - ; ........ f75a 8000 DECLE $8000 ; #....... ; - - - ; ##...... f75b f0c0 DECLE $F0C0 ; ####.... ; - - - ; ........ f75c 0100 DECLE $0100 ; .......# ; - - - ; ......## f75d 0303 DECLE $0303 ; ......## ; - - - ; .....### f75e 1f07 DECLE $1F07 ; ...##### ; - - - ; ..###### f75f ff3f DECLE $FF3F ; ######## ;---------- Offset 2 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f760 0000 DECLE $0000 ; ........ ; - - - ; ........ f761 0000 DECLE $0000 ; ........ ; - - - ; ........ f762 0000 DECLE $0000 ; ........ ; - - - ; .......# f763 0301 DECLE $0301 ; ......## ; - - - ; ........ f764 0000 DECLE $0000 ; ........ ; - - - ; ..#..... f765 7020 DECLE $7020 ; .###.... ; - - - ; .####... f766 fc78 DECLE $FC78 ; ######.. ; - - - ; ######.. f767 fcfc DECLE $FCFC ; ######.. ; Cards 2 - 3: Rock 2 ; - - - ; ........ f768 0000 DECLE $0000 ; ........ ; - - - ; ........ f769 0000 DECLE $0000 ; ........ ; - - - ; .......# f76a 0301 DECLE $0301 ; ......## ; - - - ; ......## f76b 0303 DECLE $0303 ; ......## ; - - - ; ..#..... f76c 7020 DECLE $7020 ; .###.... ; - - - ; ####.... f76d f8f0 DECLE $F8F0 ; #####... ; - - - ; #####... f76e fcf8 DECLE $FCF8 ; ######.. ; - - - ; ######.. f76f fcfc DECLE $FCFC ; ######.. ; Cards 4 - 6: Rock 3 ; - - - ; ........ f770 0000 DECLE $0000 ; ........ ; - - - ; ........ f771 0000 DECLE $0000 ; ........ ; - - - ; ........ f772 0000 DECLE $0000 ; ........ ; - - - ; .......# f773 0301 DECLE $0301 ; ......## ; - - - ; ........ f774 0000 DECLE $0000 ; ........ ; - - - ; ..#....# f775 7321 DECLE $7321 ; .###..## ; - - - ; .####### f776 ff7f DECLE $FF7F ; ######## ; - - - ; ######## f777 ffff DECLE $FFFF ; ######## ; - - - ; ..#..... f778 7020 DECLE $7020 ; .###.... ; - - - ; ####.... f779 f8f0 DECLE $F8F0 ; #####... ; - - - ; #####... f77a fcf8 DECLE $FCF8 ; ######.. ; - - - ; ######.. f77b fcfc DECLE $FCFC ; ######.. ; Cards 7 - 8: Crat 1 ; - - - ; #####... f77c fcf8 DECLE $FCF8 ; ######.. ; - - - ; #######. f77d fefe DECLE $FEFE ; #######. ; - - - ; ######## f77e ffff DECLE $FFFF ; ######## ; - - - ; ######## f77f ffff DECLE $FFFF ; ######## ; - - - ; ........ f780 0300 DECLE $0300 ; ......## ; - - - ; ......## f781 0703 DECLE $0703 ; .....### ; - - - ; ....#### f782 9f0f DECLE $9F0F ; #..##### ; - - - ; ######## f783 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; #####... f784 fcf8 DECLE $FCF8 ; ######.. ; - - - ; #######. f785 fefe DECLE $FEFE ; #######. ; - - - ; #######. f786 fffe DECLE $FFFE ; ######## ; - - - ; ######## f787 ffff DECLE $FFFF ; ######## ; - - - ; ........ f788 0000 DECLE $0000 ; ........ ; - - - ; ........ f789 0000 DECLE $0000 ; ........ ; - - - ; ........ f78a 0000 DECLE $0000 ; ........ ; - - - ; #....... f78b e180 DECLE $E180 ; ###....# ; - - - ; ........ f78c 0300 DECLE $0300 ; ......## ; - - - ; .....### f78d 0707 DECLE $0707 ; .....### ; - - - ; ....#### f78e 3f0f DECLE $3F0F ; ..###### ; - - - ; .####### f78f ff7f DECLE $FF7F ; ######## ;---------- Offset 3 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f790 0000 DECLE $0000 ; ........ ; - - - ; ........ f791 0000 DECLE $0000 ; ........ ; - - - ; ........ f792 0100 DECLE $0100 ; .......# ; - - - ; ......## f793 0703 DECLE $0703 ; .....### ; - - - ; ........ f794 0000 DECLE $0000 ; ........ ; - - - ; .#...... f795 e040 DECLE $E040 ; ###..... ; - - - ; ####.... f796 f8f0 DECLE $F8F0 ; #####... ; - - - ; #####... f797 f8f8 DECLE $F8F8 ; #####... ; Cards 2 - 3: Rock 2 ; - - - ; ........ f798 0000 DECLE $0000 ; ........ ; - - - ; .......# f799 0101 DECLE $0101 ; .......# ; - - - ; ......## f79a 0703 DECLE $0703 ; .....### ; - - - ; .....### f79b 0707 DECLE $0707 ; .....### ; - - - ; .#...... f79c e040 DECLE $E040 ; ###..... ; - - - ; ###..... f79d f0e0 DECLE $F0E0 ; ####.... ; - - - ; ####.... f79e f8f0 DECLE $F8F0 ; #####... ; - - - ; #####... f79f f8f8 DECLE $F8F8 ; #####... ; Cards 4 - 6: Rock 3 ; - - - ; ........ f7a0 0000 DECLE $0000 ; ........ ; - - - ; ........ f7a1 0000 DECLE $0000 ; ........ ; - - - ; ........ f7a2 0100 DECLE $0100 ; .......# ; - - - ; ......## f7a3 0703 DECLE $0703 ; .....### ; - - - ; ........ f7a4 0000 DECLE $0000 ; ........ ; - - - ; .#....## f7a5 e743 DECLE $E743 ; ###..### ; - - - ; ######## f7a6 ffff DECLE $FFFF ; ######## ; - - - ; ######## f7a7 ffff DECLE $FFFF ; ######## ; - - - ; .#...... f7a8 e040 DECLE $E040 ; ###..... ; - - - ; ###..... f7a9 f0e0 DECLE $F0E0 ; ####.... ; - - - ; ####.... f7aa f8f0 DECLE $F8F0 ; #####... ; - - - ; #####... f7ab f8f8 DECLE $F8F8 ; #####... ; Cards 7 - 8: Crat 1 ; - - - ; ####.... f7ac f8f0 DECLE $F8F0 ; #####... ; - - - ; ######.. f7ad fcfc DECLE $FCFC ; ######.. ; - - - ; #######. f7ae fffe DECLE $FFFE ; ######## ; - - - ; ######## f7af ffff DECLE $FFFF ; ######## ; - - - ; .......# f7b0 0701 DECLE $0701 ; .....### ; - - - ; .....### f7b1 0f07 DECLE $0F07 ; ....#### ; - - - ; ...##### f7b2 3f1f DECLE $3F1F ; ..###### ; - - - ; ######## f7b3 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; ####.... f7b4 f8f0 DECLE $F8F0 ; #####... ; - - - ; ######.. f7b5 fcfc DECLE $FCFC ; ######.. ; - - - ; ######.. f7b6 fefc DECLE $FEFC ; #######. ; - - - ; ######## f7b7 ffff DECLE $FFFF ; ######## ; - - - ; ........ f7b8 0000 DECLE $0000 ; ........ ; - - - ; ........ f7b9 0000 DECLE $0000 ; ........ ; - - - ; ........ f7ba 0000 DECLE $0000 ; ........ ; - - - ; ........ f7bb c300 DECLE $C300 ; ##....## ; - - - ; .......# f7bc 0701 DECLE $0701 ; .....### ; - - - ; ....#### f7bd 0f0f DECLE $0F0F ; ....#### ; - - - ; ...##### f7be 7f1f DECLE $7F1F ; .####### ; - - - ; ######## f7bf ffff DECLE $FFFF ; ######## ;---------- Offset 4 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f7c0 0000 DECLE $0000 ; ........ ; - - - ; ........ f7c1 0100 DECLE $0100 ; .......# ; - - - ; .......# f7c2 0301 DECLE $0301 ; ......## ; - - - ; .....### f7c3 0f07 DECLE $0F07 ; ....#### ; - - - ; ........ f7c4 0000 DECLE $0000 ; ........ ; - - - ; #....... f7c5 c080 DECLE $C080 ; ##...... ; - - - ; ###..... f7c6 f0e0 DECLE $F0E0 ; ####.... ; - - - ; ####.... f7c7 f0f0 DECLE $F0F0 ; ####.... ; Cards 2 - 3: Rock 2 ; - - - ; ........ f7c8 0100 DECLE $0100 ; .......# ; - - - ; ......## f7c9 0303 DECLE $0303 ; ......## ; - - - ; .....### f7ca 0f07 DECLE $0F07 ; ....#### ; - - - ; ....#### f7cb 0f0f DECLE $0F0F ; ....#### ; - - - ; #....... f7cc c080 DECLE $C080 ; ##...... ; - - - ; ##...... f7cd e0c0 DECLE $E0C0 ; ###..... ; - - - ; ###..... f7ce f0e0 DECLE $F0E0 ; ####.... ; - - - ; ####.... f7cf f0f0 DECLE $F0F0 ; ####.... ; Cards 4 - 6: Rock 3 ; - - - ; ........ f7d0 0000 DECLE $0000 ; ........ ; - - - ; ........ f7d1 0100 DECLE $0100 ; .......# ; - - - ; .......# f7d2 0301 DECLE $0301 ; ......## ; - - - ; .....### f7d3 0f07 DECLE $0F07 ; ....#### ; - - - ; ........ f7d4 0100 DECLE $0100 ; .......# ; - - - ; #....### f7d5 cf87 DECLE $CF87 ; ##..#### ; - - - ; ######## f7d6 ffff DECLE $FFFF ; ######## ; - - - ; ######## f7d7 ffff DECLE $FFFF ; ######## ; - - - ; #....... f7d8 c080 DECLE $C080 ; ##...... ; - - - ; ##...... f7d9 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ###..... f7da f0e0 DECLE $F0E0 ; ####.... ; - - - ; ####.... f7db f0f0 DECLE $F0F0 ; ####.... ; Cards 7 - 8: Crat 1 ; - - - ; ###..... f7dc f0e0 DECLE $F0E0 ; ####.... ; - - - ; #####... f7dd f8f8 DECLE $F8F8 ; #####... ; - - - ; ######.. f7de fefc DECLE $FEFC ; #######. ; - - - ; ######## f7df ffff DECLE $FFFF ; ######## ; - - - ; ......## f7e0 0f03 DECLE $0F03 ; ....#### ; - - - ; ....#### f7e1 1f0f DECLE $1F0F ; ...##### ; - - - ; ..###### f7e2 7f3f DECLE $7F3F ; .####### ; - - - ; ######## f7e3 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; ###..... f7e4 f0e0 DECLE $F0E0 ; ####.... ; - - - ; #####... f7e5 f8f8 DECLE $F8F8 ; #####... ; - - - ; #####... f7e6 fcf8 DECLE $FCF8 ; ######.. ; - - - ; #######. f7e7 fffe DECLE $FFFE ; ######## ; - - - ; ........ f7e8 0000 DECLE $0000 ; ........ ; - - - ; ........ f7e9 0000 DECLE $0000 ; ........ ; - - - ; ........ f7ea 0000 DECLE $0000 ; ........ ; - - - ; .......# f7eb 8701 DECLE $8701 ; #....### ; - - - ; ......## f7ec 0f03 DECLE $0F03 ; ....#### ; - - - ; ...##### f7ed 1f1f DECLE $1F1F ; ...##### ; - - - ; ..###### f7ee ff3f DECLE $FF3F ; ######## ; - - - ; ######## f7ef ffff DECLE $FFFF ; ######## ;---------- Offset 5 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f7f0 0000 DECLE $0000 ; ........ ; - - - ; .......# f7f1 0301 DECLE $0301 ; ......## ; - - - ; ......## f7f2 0703 DECLE $0703 ; .....### ; - - - ; ....#### f7f3 1f0f DECLE $1F0F ; ...##### ; - - - ; ........ f7f4 0000 DECLE $0000 ; ........ ; - - - ; ........ f7f5 8000 DECLE $8000 ; #....... ; - - - ; ##...... f7f6 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ###..... f7f7 e0e0 DECLE $E0E0 ; ###..... ; Cards 2 - 3: Rock 2 ; - - - ; .......# f7f8 0301 DECLE $0301 ; ......## ; - - - ; .....### f7f9 0707 DECLE $0707 ; .....### ; - - - ; ....#### f7fa 1f0f DECLE $1F0F ; ...##### ; - - - ; ...##### f7fb 1f1f DECLE $1F1F ; ...##### ; - - - ; ........ f7fc 8000 DECLE $8000 ; #....... ; - - - ; #....... f7fd c080 DECLE $C080 ; ##...... ; - - - ; ##...... f7fe e0c0 DECLE $E0C0 ; ###..... ; - - - ; ###..... f7ff e0e0 DECLE $E0E0 ; ###..... ; Cards 4 - 6: Rock 3 ; - - - ; ........ f800 0000 DECLE $0000 ; ........ ; - - - ; .......# f801 0301 DECLE $0301 ; ......## ; - - - ; ......## f802 0703 DECLE $0703 ; .....### ; - - - ; ....#### f803 1f0f DECLE $1F0F ; ...##### ; - - - ; .......# f804 0301 DECLE $0301 ; ......## ; - - - ; ....#### f805 9f0f DECLE $9F0F ; #..##### ; - - - ; ######## f806 ffff DECLE $FFFF ; ######## ; - - - ; ######## f807 ffff DECLE $FFFF ; ######## ; - - - ; ........ f808 8000 DECLE $8000 ; #....... ; - - - ; #....... f809 c080 DECLE $C080 ; ##...... ; - - - ; ##...... f80a e0c0 DECLE $E0C0 ; ###..... ; - - - ; ###..... f80b e0e0 DECLE $E0E0 ; ###..... ; Cards 7 - 8: Crat 1 ; - - - ; ##...... f80c e0c0 DECLE $E0C0 ; ###..... ; - - - ; ####.... f80d f0f0 DECLE $F0F0 ; ####.... ; - - - ; #####... f80e fcf8 DECLE $FCF8 ; ######.. ; - - - ; ######## f80f ffff DECLE $FFFF ; ######## ; - - - ; .....### f810 1f07 DECLE $1F07 ; ...##### ; - - - ; ...##### f811 3f1f DECLE $3F1F ; ..###### ; - - - ; .####### f812 ff7f DECLE $FF7F ; ######## ; - - - ; ######## f813 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; ##...... f814 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ####.... f815 f0f0 DECLE $F0F0 ; ####.... ; - - - ; ####.... f816 f8f0 DECLE $F8F0 ; #####... ; - - - ; ######.. f817 fffc DECLE $FFFC ; ######## ; - - - ; ........ f818 0000 DECLE $0000 ; ........ ; - - - ; ........ f819 0000 DECLE $0000 ; ........ ; - - - ; ........ f81a 0100 DECLE $0100 ; .......# ; - - - ; ......## f81b 0f03 DECLE $0F03 ; ....#### ; - - - ; .....### f81c 1f07 DECLE $1F07 ; ...##### ; - - - ; ..###### f81d 3f3f DECLE $3F3F ; ..###### ; - - - ; .####### f81e ff7f DECLE $FF7F ; ######## ; - - - ; ######## f81f ffff DECLE $FFFF ; ######## ;---------- Offset 6 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f820 0000 DECLE $0000 ; ........ ; - - - ; ......#. f821 0702 DECLE $0702 ; .....### ; - - - ; .....### f822 0f07 DECLE $0F07 ; ....#### ; - - - ; ...##### f823 3f1f DECLE $3F1F ; ..###### ; - - - ; ........ f824 0000 DECLE $0000 ; ........ ; - - - ; ........ f825 0000 DECLE $0000 ; ........ ; - - - ; #....... f826 c080 DECLE $C080 ; ##...... ; - - - ; ##...... f827 c0c0 DECLE $C0C0 ; ##...... ; Cards 2 - 3: Rock 2 ; - - - ; ......#. f828 0702 DECLE $0702 ; .....### ; - - - ; ....#### f829 0f0f DECLE $0F0F ; ....#### ; - - - ; ...##### f82a 3f1f DECLE $3F1F ; ..###### ; - - - ; ..###### f82b 3f3f DECLE $3F3F ; ..###### ; - - - ; ........ f82c 0000 DECLE $0000 ; ........ ; - - - ; ........ f82d 8000 DECLE $8000 ; #....... ; - - - ; #....... f82e c080 DECLE $C080 ; ##...... ; - - - ; ##...... f82f c0c0 DECLE $C0C0 ; ##...... ; Cards 4 - 6: Rock 3 ; - - - ; ........ f830 0000 DECLE $0000 ; ........ ; - - - ; ......#. f831 0702 DECLE $0702 ; .....### ; - - - ; .....### f832 0f07 DECLE $0F07 ; ....#### ; - - - ; ...##### f833 3f1f DECLE $3F1F ; ..###### ; - - - ; ......#. f834 0702 DECLE $0702 ; .....### ; - - - ; ...##### f835 3f1f DECLE $3F1F ; ..###### ; - - - ; ######## f836 ffff DECLE $FFFF ; ######## ; - - - ; ######## f837 ffff DECLE $FFFF ; ######## ; - - - ; ........ f838 0000 DECLE $0000 ; ........ ; - - - ; ........ f839 8000 DECLE $8000 ; #....... ; - - - ; #....... f83a c080 DECLE $C080 ; ##...... ; - - - ; ##...... f83b c0c0 DECLE $C0C0 ; ##...... ; Cards 7 - 8: Crat 1 ; - - - ; #....... f83c c080 DECLE $C080 ; ##...... ; - - - ; ###..... f83d e0e0 DECLE $E0E0 ; ###..... ; - - - ; ####.... f83e f9f0 DECLE $F9F0 ; #####..# ; - - - ; ######## f83f ffff DECLE $FFFF ; ######## ; - - - ; ....#### f840 3f0f DECLE $3F0F ; ..###### ; - - - ; ..###### f841 7f3f DECLE $7F3F ; .####### ; - - - ; ######## f842 ffff DECLE $FFFF ; ######## ; - - - ; ######## f843 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; #....... f844 c080 DECLE $C080 ; ##...... ; - - - ; ###..... f845 e0e0 DECLE $E0E0 ; ###..... ; - - - ; ###..... f846 f0e0 DECLE $F0E0 ; ####.... ; - - - ; #####... f847 fef8 DECLE $FEF8 ; #######. ; - - - ; ........ f848 0000 DECLE $0000 ; ........ ; - - - ; ........ f849 0000 DECLE $0000 ; ........ ; - - - ; ........ f84a 0300 DECLE $0300 ; ......## ; - - - ; .....### f84b 1f07 DECLE $1F07 ; ...##### ; - - - ; ....#### f84c 3f0f DECLE $3F0F ; ..###### ; - - - ; .####### f84d 7f7f DECLE $7F7F ; .####### ; - - - ; ######## f84e ffff DECLE $FFFF ; ######## ; - - - ; ######## f84f ffff DECLE $FFFF ; ######## ;---------- Offset 7 ; Cards 0 - 1: Rock 1 ; - - - ; ........ f850 0000 DECLE $0000 ; ........ ; - - - ; .....#.. f851 0e04 DECLE $0E04 ; ....###. ; - - - ; ....#### f852 1f0f DECLE $1F0F ; ...##### ; - - - ; ..###### f853 7f3f DECLE $7F3F ; .####### ; - - - ; ........ f854 0000 DECLE $0000 ; ........ ; - - - ; ........ f855 0000 DECLE $0000 ; ........ ; - - - ; ........ f856 8000 DECLE $8000 ; #....... ; - - - ; #....... f857 8080 DECLE $8080 ; #....... ; Cards 2 - 3: Rock 2 ; - - - ; .....#.. f858 0e04 DECLE $0E04 ; ....###. ; - - - ; ...####. f859 1f1e DECLE $1F1E ; ...##### ; - - - ; ..###### f85a 7f3f DECLE $7F3F ; .####### ; - - - ; .####### f85b 7f7f DECLE $7F7F ; .####### ; - - - ; ........ f85c 0000 DECLE $0000 ; ........ ; - - - ; ........ f85d 0000 DECLE $0000 ; ........ ; - - - ; ........ f85e 8000 DECLE $8000 ; #....... ; - - - ; #....... f85f 8080 DECLE $8080 ; #....... ; Cards 4 - 6: Rock 3 ; - - - ; ........ f860 0000 DECLE $0000 ; ........ ; - - - ; .....#.. f861 0e04 DECLE $0E04 ; ....###. ; - - - ; ....#### f862 1f0f DECLE $1F0F ; ...##### ; - - - ; ..###### f863 7f3f DECLE $7F3F ; .####### ; - - - ; .....#.. f864 0e04 DECLE $0E04 ; ....###. ; - - - ; ..#####. f865 7f3e DECLE $7F3E ; .####### ; - - - ; ######## f866 ffff DECLE $FFFF ; ######## ; - - - ; ######## f867 ffff DECLE $FFFF ; ######## ; - - - ; ........ f868 0000 DECLE $0000 ; ........ ; - - - ; ........ f869 0000 DECLE $0000 ; ........ ; - - - ; ........ f86a 8000 DECLE $8000 ; #....... ; - - - ; #....... f86b 8080 DECLE $8080 ; #....... ; Cards 7 - 8: Crat 1 ; - - - ; ........ f86c 8000 DECLE $8000 ; #....... ; - - - ; ##...... f86d c0c0 DECLE $C0C0 ; ##...... ; - - - ; ###....# f86e f3e1 DECLE $F3E1 ; ####..## ; - - - ; ######## f86f ffff DECLE $FFFF ; ######## ; - - - ; ...##### f870 7f1f DECLE $7F1F ; .####### ; - - - ; .####### f871 ff7f DECLE $FF7F ; ######## ; - - - ; ######## f872 ffff DECLE $FFFF ; ######## ; - - - ; ######## f873 ffff DECLE $FFFF ; ######## ; Cards 9 - 11: Crat 2 ; - - - ; ........ f874 8000 DECLE $8000 ; #....... ; - - - ; ##...... f875 c0c0 DECLE $C0C0 ; ##...... ; - - - ; ##...... f876 e0c0 DECLE $E0C0 ; ###..... ; - - - ; ####.... f877 fcf0 DECLE $FCF0 ; ######.. ; - - - ; ........ f878 0000 DECLE $0000 ; ........ ; - - - ; ........ f879 0000 DECLE $0000 ; ........ ; - - - ; .......# f87a 0701 DECLE $0701 ; .....### ; - - - ; ....#### f87b 3f0f DECLE $3F0F ; ..###### ; - - - ; ...##### f87c 7f1f DECLE $7F1F ; .####### ; - - - ; ######## f87d ffff DECLE $FFFF ; ######## ; - - - ; ######## f87e ffff DECLE $FFFF ; ######## ; - - - ; ######## f87f ffff DECLE $FFFF ; ######## ENDP INCLUDE "gfx/spin1.asm" ; \_ must be adjacent 0xf880 SPIN1 PROC ;; Character #0, GRAM character index 0 f880 7060 DECLE $7060 ;.##..... ; - - - ;.###.... f881 4648 DECLE $4648 ;.#..#... ; - - - ;.#...##. f882 7846 DECLE $7846 ;.#...##. ; - - - ;.####... f883 0060 DECLE $0060 ;.##..... ; - - - ;........ ;; Character #1, GRAM character index 1 f884 7860 DECLE $7860 ;.##..... ; - - - ;.####... f885 2624 DECLE $2624 ;..#..#.. ; - - - ;..#..##. f886 603e DECLE $603E ;..#####. ; - - - ;.##..... f887 0060 DECLE $0060 ;.##..... ; - - - ;........ ;; Character #2, GRAM character index 2 f888 7060 DECLE $7060 ;.##..... ; - - - ;.###.... f889 262c DECLE $262C ;..#.##.. ; - - - ;..#..##. f88a 605e DECLE $605E ;.#.####. ; - - - ;.##..... f88b 0060 DECLE $0060 ;.##..... ; - - - ;........ ;; Character #3, GRAM character index 3 f88c 3030 DECLE $3030 ;..##.... ; - - - ;..##.... f88d 4628 DECLE $4628 ;..#.#... ; - - - ;.#...##. f88e 605e DECLE $605E ;.#.####. ; - - - ;.##..... f88f 0060 DECLE $0060 ;.##..... ; - - - ;........ ;; Character #4, GRAM character index 4 f890 3030 DECLE $3030 ;..##.... ; - - - ;..##.... f891 4648 DECLE $4648 ;.#..#... ; - - - ;.#...##. f892 e05e DECLE $E05E ;.#.####. ; - - - ;###..... f893 00c0 DECLE $00C0 ;##...... ; - - - ;........ ;; Character #5, GRAM character index 5 f894 3030 DECLE $3030 ;..##.... ; - - - ;..##.... f895 4648 DECLE $4648 ;.#..#... ; - - - ;.#...##. f896 f0ce DECLE $F0CE ;##..###. ; - - - ;####.... f897 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #6, GRAM character index 6 f898 3830 DECLE $3830 ;..##.... ; - - - ;..###... f899 2424 DECLE $2424 ;..#..#.. ; - - - ;..#..#.. f89a fec6 DECLE $FEC6 ;##...##. ; - - - ;#######. f89b 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #7, GRAM character index 7 f89c 3830 DECLE $3830 ;..##.... ; - - - ;..###... f89d 2428 DECLE $2428 ;..#.#... ; - - - ;..#..#.. f89e fec6 DECLE $FEC6 ;##...##. ; - - - ;#######. f89f 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #8, GRAM character index 8 f8a0 3830 DECLE $3830 ;..##.... ; - - - ;..###... f8a1 4428 DECLE $4428 ;..#.#... ; - - - ;.#...#.. f8a2 fec6 DECLE $FEC6 ;##...##. ; - - - ;#######. f8a3 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #9, GRAM character index 9 f8a4 3818 DECLE $3818 ;...##... ; - - - ;..###... f8a5 4828 DECLE $4828 ;..#.#... ; - - - ;.#..#... f8a6 c6fe DECLE $C6FE ;#######. ; - - - ;##...##. f8a7 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #10, GRAM character index 10 f8a8 3818 DECLE $3818 ;...##... ; - - - ;..###... f8a9 4848 DECLE $4848 ;.#..#... ; - - - ;.#..#... f8aa cef6 DECLE $CEF6 ;####.##. ; - - - ;##..###. f8ab 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #11, GRAM character index 11 f8ac 1818 DECLE $1818 ;...##... ; - - - ;...##... f8ad c424 DECLE $C424 ;..#..#.. ; - - - ;##...#.. f8ae 1ee6 DECLE $1EE6 ;###..##. ; - - - ;...####. f8af 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #12, GRAM character index 12 f8b0 1818 DECLE $1818 ;...##... ; - - - ;...##... f8b1 c424 DECLE $C424 ;..#..#.. ; - - - ;##...#.. f8b2 3ec4 DECLE $3EC4 ;##...#.. ; - - - ;..#####. f8b3 0006 DECLE $0006 ;.....##. ; - - - ;........ ;; Character #13, GRAM character index 13 f8b4 1818 DECLE $1818 ;...##... ; - - - ;...##... f8b5 c428 DECLE $C428 ;..#.#... ; - - - ;##...#.. f8b6 3cc4 DECLE $3CC4 ;##...#.. ; - - - ;..####.. f8b7 000c DECLE $000C ;....##.. ; - - - ;........ ;; Character #14, GRAM character index 14 f8b8 3c0c DECLE $3C0C ;....##.. ; - - - ;..####.. f8b9 c848 DECLE $C848 ;.#..#... ; - - - ;##..#... f8ba 0cf4 DECLE $0CF4 ;####.#.. ; - - - ;....##.. f8bb 000c DECLE $000C ;....##.. ; - - - ;........ ;; Character #15, GRAM character index 15 f8bc 1c0c DECLE $1C0C ;....##.. ; - - - ;...###.. f8bd c868 DECLE $C868 ;.##.#... ; - - - ;##..#... f8be 0cf8 DECLE $0CF8 ;#####... ; - - - ;....##.. f8bf 000c DECLE $000C ;....##.. ; - - - ;........ ;; Character #16, GRAM character index 16 f8c0 1c0c DECLE $1C0C ;....##.. ; - - - ;...###.. f8c1 c868 DECLE $C868 ;.##.#... ; - - - ;##..#... f8c2 1ce8 DECLE $1CE8 ;###.#... ; - - - ;...###.. f8c3 000c DECLE $000C ;....##.. ; - - - ;........ ;; Character #17, GRAM character index 17 f8c4 0c0c DECLE $0C0C ;....##.. ; - - - ;....##.. f8c5 c4f4 DECLE $C4F4 ;####.#.. ; - - - ;##...#.. f8c6 1c64 DECLE $1C64 ;.##..#.. ; - - - ;...###.. f8c7 000c DECLE $000C ;....##.. ; - - - ;........ ;; Character #18, GRAM character index 18 f8c8 0c0c DECLE $0C0C ;....##.. ; - - - ;....##.. f8c9 c4f4 DECLE $C4F4 ;####.#.. ; - - - ;##...#.. f8ca 3c44 DECLE $3C44 ;.#...#.. ; - - - ;..####.. f8cb 000c DECLE $000C ;....##.. ; - - - ;........ ;; Character #19, GRAM character index 19 f8cc 3c0c DECLE $3C0C ;....##.. ; - - - ;..####.. f8cd c4c4 DECLE $C4C4 ;##...#.. ; - - - ;##...#.. f8ce 1828 DECLE $1828 ;..#.#... ; - - - ;...##... f8cf 0018 DECLE $0018 ;...##... ; - - - ;........ ;; Character #20, GRAM character index 20 f8d0 3e06 DECLE $3E06 ;.....##. ; - - - ;..#####. f8d1 c8c4 DECLE $C8C4 ;##...#.. ; - - - ;##..#... f8d2 1828 DECLE $1828 ;..#.#... ; - - - ;...##... f8d3 0018 DECLE $0018 ;...##... ; - - - ;........ ;; Character #21, GRAM character index 21 f8d4 1e00 DECLE $1E00 ;........ ; - - - ;...####. f8d5 c8e6 DECLE $C8E6 ;###..##. ; - - - ;##..#... f8d6 1828 DECLE $1828 ;..#.#... ; - - - ;...##... f8d7 0018 DECLE $0018 ;...##... ; - - - ;........ ;; Character #22, GRAM character index 22 f8d8 ce00 DECLE $CE00 ;........ ; - - - ;##..###. f8d9 48f6 DECLE $48F6 ;####.##. ; - - - ;.#..#... f8da 3828 DECLE $3828 ;..#.#... ; - - - ;..###... f8db 0018 DECLE $0018 ;...##... ; - - - ;........ ;; Character #23, GRAM character index 23 f8dc c600 DECLE $C600 ;........ ; - - - ;##...##. f8dd 48fe DECLE $48FE ;#######. ; - - - ;.#..#... f8de 3848 DECLE $3848 ;.#..#... ; - - - ;..###... f8df 0018 DECLE $0018 ;...##... ; - - - ;........ ;; Character #24, GRAM character index 24 f8e0 c600 DECLE $C600 ;........ ; - - - ;##...##. f8e1 44fe DECLE $44FE ;#######. ; - - - ;.#...#.. f8e2 1828 DECLE $1828 ;..#.#... ; - - - ;...##... f8e3 0018 DECLE $0018 ;...##... ; - - - ;........ ;; Character #25, GRAM character index 25 f8e4 fe00 DECLE $FE00 ;........ ; - - - ;#######. f8e5 24c6 DECLE $24C6 ;##...##. ; - - - ;..#..#.. f8e6 3824 DECLE $3824 ;..#..#.. ; - - - ;..###... f8e7 0030 DECLE $0030 ;..##.... ; - - - ;........ ;; Character #26, GRAM character index 26 f8e8 fe00 DECLE $FE00 ;........ ; - - - ;#######. f8e9 24c6 DECLE $24C6 ;##...##. ; - - - ;..#..#.. f8ea 3828 DECLE $3828 ;..#.#... ; - - - ;..###... f8eb 0030 DECLE $0030 ;..##.... ; - - - ;........ ;; Character #27, GRAM character index 27 f8ec f000 DECLE $F000 ;........ ; - - - ;####.... f8ed 26ce DECLE $26CE ;##..###. ; - - - ;..#..##. f8ee 3028 DECLE $3028 ;..#.#... ; - - - ;..##.... f8ef 0030 DECLE $0030 ;..##.... ; - - - ;........ ;; Character #28, GRAM character index 28 f8f0 e0c0 DECLE $E0C0 ;##...... ; - - - ;###..... f8f1 265e DECLE $265E ;.#.####. ; - - - ;..#..##. f8f2 3028 DECLE $3028 ;..#.#... ; - - - ;..##.... f8f3 0030 DECLE $0030 ;..##.... ; - - - ;........ ;; Character #29, GRAM character index 29 f8f4 6060 DECLE $6060 ;.##..... ; - - - ;.##..... f8f5 465e DECLE $465E ;.#.####. ; - - - ;.#...##. f8f6 3028 DECLE $3028 ;..#.#... ; - - - ;..##.... f8f7 0030 DECLE $0030 ;..##.... ; - - - ;........ ;; Character #30, GRAM character index 30 f8f8 6060 DECLE $6060 ;.##..... ; - - - ;.##..... f8f9 465e DECLE $465E ;.#.####. ; - - - ;.#...##. f8fa 704c DECLE $704C ;.#..##.. ; - - - ;.###.... f8fb 0060 DECLE $0060 ;.##..... ; - - - ;........ ;; Character #31, GRAM character index 31 f8fc 6060 DECLE $6060 ;.##..... ; - - - ;.##..... f8fd 465e DECLE $465E ;.#.####. ; - - - ;.#...##. f8fe 7844 DECLE $7844 ;.#...#.. ; - - - ;.####... f8ff 0060 DECLE $0060 ;.##..... ; - - - ;........ ENDP INCLUDE "gfx/spin2.asm" ; / 0xf900 SPIN2 PROC ;; Character #0, GRAM character index 32 f900 813f DECLE $813F ;..###### ; - - - ;#......# f901 bdb9 DECLE $BDB9 ;#.###..# ; - - - ;#.####.# f902 819d DECLE $819D ;#..###.# ; - - - ;#......# f903 00fc DECLE $00FC ;######.. ; - - - ;........ ;; Character #1, GRAM character index 33 f904 017f DECLE $017F ;.####### ; - - - ;.......# f905 99bd DECLE $99BD ;#.####.# ; - - - ;#..##..# f906 80bd DECLE $80BD ;#.####.# ; - - - ;#....... f907 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character #2, GRAM character index 34 f908 01ff DECLE $01FF ;######## ; - - - ;.......# f909 bd1d DECLE $BD1D ;...###.# ; - - - ;#.####.# f90a 80b8 DECLE $80B8 ;#.###... ; - - - ;#....... f90b 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #3, GRAM character index 35 f90c 81ff DECLE $81FF ;######## ; - - - ;#......# f90d 3c2d DECLE $3C2D ;..#.##.# ; - - - ;..####.. f90e 81b4 DECLE $81B4 ;#.##.#.. ; - - - ;#......# f90f 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #4, GRAM character index 36 f910 81ff DECLE $81FF ;######## ; - - - ;#......# f911 3ca5 DECLE $3CA5 ;#.#..#.# ; - - - ;..####.. f912 81a5 DECLE $81A5 ;#.#..#.# ; - - - ;#......# f913 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #5, GRAM character index 37 f914 81ff DECLE $81FF ;######## ; - - - ;#......# f915 a5bd DECLE $A5BD ;#.####.# ; - - - ;#.#..#.# f916 81bd DECLE $81BD ;#.####.# ; - - - ;#......# f917 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #6, GRAM character index 38 f918 81ff DECLE $81FF ;######## ; - - - ;#......# f919 3ca4 DECLE $3CA4 ;#.#..#.. ; - - - ;..####.. f91a 8125 DECLE $8125 ;..#..#.# ; - - - ;#......# f91b 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #7, GRAM character index 39 f91c 80ff DECLE $80FF ;######## ; - - - ;#....... f91d bdb4 DECLE $BDB4 ;#.##.#.. ; - - - ;#.####.# f91e 012d DECLE $012D ;..#.##.# ; - - - ;.......# f91f 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #8, GRAM character index 40 f920 80fe DECLE $80FE ;#######. ; - - - ;#....... f921 bdb9 DECLE $BDB9 ;#.###..# ; - - - ;#.####.# f922 019d DECLE $019D ;#..###.# ; - - - ;.......# f923 007f DECLE $007F ;.####### ; - - - ;........ ;; Character #9, GRAM character index 41 f924 81fc DECLE $81FC ;######.. ; - - - ;#......# f925 99bd DECLE $99BD ;#.####.# ; - - - ;#..##..# f926 81bd DECLE $81BD ;#.####.# ; - - - ;#......# f927 003f DECLE $003F ;..###### ; - - - ;........ ;; Character #10, GRAM character index 42 f928 81f9 DECLE $81F9 ;#####..# ; - - - ;#......# f929 bd9d DECLE $BD9D ;#..###.# ; - - - ;#.####.# f92a 81b9 DECLE $81B9 ;#.###..# ; - - - ;#......# f92b 009f DECLE $009F ;#..##### ; - - - ;........ ;; Character #11, GRAM character index 43 f92c 81f3 DECLE $81F3 ;####..## ; - - - ;#......# f92d bdad DECLE $BDAD ;#.#.##.# ; - - - ;#.####.# f92e 81b5 DECLE $81B5 ;#.##.#.# ; - - - ;#......# f92f 00cf DECLE $00CF ;##..#### ; - - - ;........ ;; Character #12, GRAM character index 44 f930 81e7 DECLE $81E7 ;###..### ; - - - ;#......# f931 bda5 DECLE $BDA5 ;#.#..#.# ; - - - ;#.####.# f932 81a5 DECLE $81A5 ;#.#..#.# ; - - - ;#......# f933 00e7 DECLE $00E7 ;###..### ; - - - ;........ ;; Character #13, GRAM character index 45 f934 81ff DECLE $81FF ;######## ; - - - ;#......# f935 a5bd DECLE $A5BD ;#.####.# ; - - - ;#.#..#.# f936 81bd DECLE $81BD ;#.####.# ; - - - ;#......# f937 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #14, GRAM character index 46 f938 81cf DECLE $81CF ;##..#### ; - - - ;#......# f939 bda5 DECLE $BDA5 ;#.#..#.# ; - - - ;#.####.# f93a 81a5 DECLE $81A5 ;#.#..#.# ; - - - ;#......# f93b 00f3 DECLE $00F3 ;####..## ; - - - ;........ ;; Character #15, GRAM character index 47 f93c 819f DECLE $819F ;#..##### ; - - - ;#......# f93d bdb5 DECLE $BDB5 ;#.##.#.# ; - - - ;#.####.# f93e 81ad DECLE $81AD ;#.#.##.# ; - - - ;#......# f93f 00f9 DECLE $00F9 ;#####..# ; - - - ;........ ;; Character #0, GRAM character index 32 f940 813f DECLE $813F ;..###### ; - - - ;#......# f941 bdb9 DECLE $BDB9 ;#.###..# ; - - - ;#.####.# f942 819d DECLE $819D ;#..###.# ; - - - ;#......# f943 00fc DECLE $00FC ;######.. ; - - - ;........ ;; Character #1, GRAM character index 33 f944 017f DECLE $017F ;.####### ; - - - ;.......# f945 99bd DECLE $99BD ;#.####.# ; - - - ;#..##..# f946 80bd DECLE $80BD ;#.####.# ; - - - ;#....... f947 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character #2, GRAM character index 34 f948 01ff DECLE $01FF ;######## ; - - - ;.......# f949 bd1d DECLE $BD1D ;...###.# ; - - - ;#.####.# f94a 80b8 DECLE $80B8 ;#.###... ; - - - ;#....... f94b 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #3, GRAM character index 35 f94c 81ff DECLE $81FF ;######## ; - - - ;#......# f94d 3c2d DECLE $3C2D ;..#.##.# ; - - - ;..####.. f94e 81b4 DECLE $81B4 ;#.##.#.. ; - - - ;#......# f94f 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #4, GRAM character index 36 f950 81ff DECLE $81FF ;######## ; - - - ;#......# f951 3ca5 DECLE $3CA5 ;#.#..#.# ; - - - ;..####.. f952 81a5 DECLE $81A5 ;#.#..#.# ; - - - ;#......# f953 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #5, GRAM character index 37 f954 81ff DECLE $81FF ;######## ; - - - ;#......# f955 a5bd DECLE $A5BD ;#.####.# ; - - - ;#.#..#.# f956 81bd DECLE $81BD ;#.####.# ; - - - ;#......# f957 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #6, GRAM character index 38 f958 81ff DECLE $81FF ;######## ; - - - ;#......# f959 3ca4 DECLE $3CA4 ;#.#..#.. ; - - - ;..####.. f95a 8125 DECLE $8125 ;..#..#.# ; - - - ;#......# f95b 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #7, GRAM character index 39 f95c 80ff DECLE $80FF ;######## ; - - - ;#....... f95d bdb4 DECLE $BDB4 ;#.##.#.. ; - - - ;#.####.# f95e 012d DECLE $012D ;..#.##.# ; - - - ;.......# f95f 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #8, GRAM character index 40 f960 80fe DECLE $80FE ;#######. ; - - - ;#....... f961 bdb9 DECLE $BDB9 ;#.###..# ; - - - ;#.####.# f962 019d DECLE $019D ;#..###.# ; - - - ;.......# f963 007f DECLE $007F ;.####### ; - - - ;........ ;; Character #9, GRAM character index 41 f964 81fc DECLE $81FC ;######.. ; - - - ;#......# f965 99bd DECLE $99BD ;#.####.# ; - - - ;#..##..# f966 81bd DECLE $81BD ;#.####.# ; - - - ;#......# f967 003f DECLE $003F ;..###### ; - - - ;........ ;; Character #10, GRAM character index 42 f968 81f9 DECLE $81F9 ;#####..# ; - - - ;#......# f969 bd9d DECLE $BD9D ;#..###.# ; - - - ;#.####.# f96a 81b9 DECLE $81B9 ;#.###..# ; - - - ;#......# f96b 009f DECLE $009F ;#..##### ; - - - ;........ ;; Character #11, GRAM character index 43 f96c 81f3 DECLE $81F3 ;####..## ; - - - ;#......# f96d bdad DECLE $BDAD ;#.#.##.# ; - - - ;#.####.# f96e 81b5 DECLE $81B5 ;#.##.#.# ; - - - ;#......# f96f 00cf DECLE $00CF ;##..#### ; - - - ;........ ;; Character #12, GRAM character index 44 f970 81e7 DECLE $81E7 ;###..### ; - - - ;#......# f971 bda5 DECLE $BDA5 ;#.#..#.# ; - - - ;#.####.# f972 81a5 DECLE $81A5 ;#.#..#.# ; - - - ;#......# f973 00e7 DECLE $00E7 ;###..### ; - - - ;........ ;; Character #13, GRAM character index 45 f974 81ff DECLE $81FF ;######## ; - - - ;#......# f975 a5bd DECLE $A5BD ;#.####.# ; - - - ;#.#..#.# f976 81bd DECLE $81BD ;#.####.# ; - - - ;#......# f977 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character #14, GRAM character index 46 f978 81cf DECLE $81CF ;##..#### ; - - - ;#......# f979 bda5 DECLE $BDA5 ;#.#..#.# ; - - - ;#.####.# f97a 81a5 DECLE $81A5 ;#.#..#.# ; - - - ;#......# f97b 00f3 DECLE $00F3 ;####..## ; - - - ;........ ;; Character #15, GRAM character index 47 f97c 819f DECLE $819F ;#..##### ; - - - ;#......# f97d bdb5 DECLE $BDB5 ;#.##.#.# ; - - - ;#.####.# f97e 81ad DECLE $81AD ;#.#.##.# ; - - - ;#......# f97f 00f9 DECLE $00F9 ;#####..# ; - - - ;........ ENDP INCLUDE "gfx/title.asm" ;;==========================================================================;; ;; DATA for title screen sprites ;; ;;==========================================================================;; 0xf980 LMPFONT PROC ;; Skipped 32 indices. ;; Encoding span of 12 entries f980 0061 DECLE $0061 0xf981 LMPTITLE ;; Character #32, GRAM character index 0 f981 1c07 DECLE $1C07 ;.....### ; - - - ;...###.. f982 0f1c DECLE $0F1C ;...###.. ; - - - ;....#### f983 0103 DECLE $0103 ;......## ; - - - ;.......# f984 0701 DECLE $0701 ;.......# ; - - - ;.....### ;; Character #33, GRAM character index 1 f985 ff1e DECLE $FF1E ;...####. ; - - - ;######## f986 1c00 DECLE $1C00 ;........ ; - - - ;...###.. f987 381f DECLE $381F ;...##### ; - - - ;..###... f988 7038 DECLE $7038 ;..###... ; - - - ;.###.... ;; Character #34, GRAM character index 2 f989 00c0 DECLE $00C0 ;##...... ; - - - ;........ f98a 003f DECLE $003F ;..###### ; - - - ;........ f98b cccf DECLE $CCCF ;##..#### ; - - - ;##..##.. f98c 98d8 DECLE $98D8 ;##.##... ; - - - ;#..##... ;; Character #35, GRAM character index 3 f98d c000 DECLE $C000 ;........ ; - - - ;##...... f98e de60 DECLE $DE60 ;.##..... ; - - - ;##.####. f98f 7eb6 DECLE $7EB6 ;#.##.##. ; - - - ;.######. f990 6666 DECLE $6666 ;.##..##. ; - - - ;.##..##. ;; Character #36, GRAM character index 4 f991 0000 DECLE $0000 ;........ ; - - - ;........ f992 863c DECLE $863C ;..####.. ; - - - ;#....##. f993 46be DECLE $46BE ;#.#####. ; - - - ;.#...##. f994 7a4c DECLE $7A4C ;.#..##.. ; - - - ;.####.#. ;; Character #37, GRAM character index 5 f995 0000 DECLE $0000 ;........ ; - - - ;........ f996 ff00 DECLE $FF00 ;........ ; - - - ;######## f997 3330 DECLE $3330 ;..##.... ; - - - ;..##..## f998 6666 DECLE $6666 ;.##..##. ; - - - ;.##..##. ;; Character #38, GRAM character index 6 f999 0000 DECLE $0000 ;........ ; - - - ;........ f99a 601e DECLE $601E ;...####. ; - - - ;.##..... f99b c160 DECLE $C160 ;.##..... ; - - - ;##.....# f99c 78c1 DECLE $78C1 ;##.....# ; - - - ;.####... ;; Character #39, GRAM character index 7 f99d 0000 DECLE $0000 ;........ ; - - - ;........ f99e e300 DECLE $E300 ;........ ; - - - ;###...## f99f cc66 DECLE $CC66 ;.##..##. ; - - - ;##..##.. f9a0 676c DECLE $676C ;.##.##.. ; - - - ;.##..### ;; Character #40, GRAM character index 8 f9a1 0000 DECLE $0000 ;........ ; - - - ;........ f9a2 c878 DECLE $C878 ;.####... ; - - - ;##..#... f9a3 80f0 DECLE $80F0 ;####.... ; - - - ;#....... f9a4 e080 DECLE $E080 ;#....... ; - - - ;###..... ;; Character #41, GRAM character index 9 f9a5 0000 DECLE $0000 ;........ ; - - - ;........ f9a6 8c00 DECLE $8C00 ;........ ; - - - ;#...##.. f9a7 d8cc DECLE $D8CC ;##..##.. ; - - - ;##.##... f9a8 9ed8 DECLE $9ED8 ;##.##... ; - - - ;#..####. ;; Character #42, GRAM character index 10 ;; Character #43, GRAM character index 11 REPEAT 8 f9a9 ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ENDR ;== 1 f9aa ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ;== 2 f9ab ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ;== 3 f9ac ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ;== 4 f9ad ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ;== 5 f9ae ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ;== 6 f9af ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ;== 7 f9b0 ba5d DECLE $BA5D ;.#.###.# ; - - - ;#.###.#. ;== 8 ;; End of font. f9b1 0000 DECLE $0000 ;; Total chars: 12 characters ;; Total length: 50 decles ;; Decles/char: 4.167 decles/character ENDP ;;==========================================================================;; ;; DATA for title screen sprites ;; ;;==========================================================================;; 0xf9b2 TITLESP PROC 0x30 @@x EQU 54 + 16 - 22 0x14 @@y EQU 20 ; X coordinates IF 0 DECLE @@x + 0 + _X.visb DECLE @@x + 8 + _X.visb DECLE @@x + 16 + _X.visb DECLE @@x + 24 + _X.visb DECLE @@x + 32 + _X.visb ELSE f9b2 0630 DECLE @@x + 0 + _X.xsiz + _X.visb f9b3 0640 DECLE @@x + 16 + _X.xsiz + _X.visb f9b4 0650 DECLE @@x + 32 + _X.xsiz + _X.visb f9b5 0660 DECLE @@x + 48 + _X.xsiz + _X.visb f9b6 0670 DECLE @@x + 64 + _X.xsiz + _X.visb ENDI ; Y coordinates f9b7 0294 DECLE @@y + _Y.siz4 + _Y.yres f9b8 0294 DECLE @@y + _Y.siz4 + _Y.yres f9b9 0294 DECLE @@y + _Y.siz4 + _Y.yres f9ba 0294 DECLE @@y + _Y.siz4 + _Y.yres f9bb 0294 DECLE @@y + _Y.siz4 + _Y.yres ; Attributes f9bc 1967 DECLE LMPCARDx + 0*8 f9bd 1977 DECLE LMPCARDx + 2*8 f9be 1987 DECLE LMPCARDx + 4*8 f9bf 1997 DECLE LMPCARDx + 6*8 f9c0 19a7 DECLE LMPCARDx + 8*8 ENDP ;;==========================================================================;; ;; TITLE MESSAGE TABLE ;; ;;==========================================================================;; 0xf9c1 TMTBL PROC f9c1 f9ce f9d8 f9e2 DECLE @@m0, @@m1, @@m2, @@m3 f9c4 f9ec f9c5 f9ce f9d8 f9e2 DECLE @@m0, @@m1, @@m2, @@m3 f9c8 f9ec f9c9 f9f6 fa00 fa0a DECLE @@m4, @@m5, @@m6, @@m7 f9cc fa14 f9cd 0000 DECLE 0 ;01234567890123456789 ;@@m0 S16B " Teaser Edition " 0xf9ce @@m0 f9ce 0000 DECLE _s16p f9cf a001 DECLE _s16p f9d0 0a2a DECLE _s16p f9d1 2a9a DECLE _s16p f9d2 0290 DECLE _s16p f9d3 212a DECLE _s16p f9d4 a24a DECLE _s16p f9d5 7a4a DECLE _s16p f9d6 0270 DECLE _s16p f9d7 0000 DECLE _s16p ;@@m1 S16B " Presenting " 0xf9d8 @@m1 f9d8 0000 DECLE _s16p f9d9 0000 DECLE _s16p f9da 8001 DECLE _s16p f9db 2a92 DECLE _s16p f9dc 2a9a DECLE _s16p f9dd a272 DECLE _s16p f9de 724a DECLE _s16p f9df 0238 DECLE _s16p f9e0 0000 DECLE _s16p f9e1 0000 DECLE _s16p ;@@m2 S16B "a space action game " 0xf9e2 @@m2 f9e2 0208 DECLE _s16p f9e3 829a DECLE _s16p f9e4 1a0a DECLE _s16p f9e5 0228 DECLE _s16p f9e6 1a0a DECLE _s16p f9e7 4aa2 DECLE _s16p f9e8 727a DECLE _s16p f9e9 3802 DECLE _s16p f9ea 6a0a DECLE _s16p f9eb 0228 DECLE _s16p ;@@m3 S16B " by Joe Zbiciak " 0xf9ec @@m3 f9ec 0000 DECLE _s16p f9ed 1002 DECLE _s16p f9ee 02c8 DECLE _s16p f9ef 7952 DECLE _s16p f9f0 0228 DECLE _s16p f9f1 11d2 DECLE _s16p f9f2 1a4a DECLE _s16p f9f3 0a4a DECLE _s16p f9f4 0258 DECLE _s16p f9f5 0000 DECLE _s16p ;@@m4 S16B " Credits: " 0xf9f6 @@m4 f9f6 0000 DECLE _s16p f9f7 0000 DECLE _s16p f9f8 0000 DECLE _s16p f9f9 911a DECLE _s16p f9fa 222a DECLE _s16p f9fb a24a DECLE _s16p f9fc d298 DECLE _s16p f9fd 0000 DECLE _s16p f9fe 0000 DECLE _s16p f9ff 0000 DECLE _s16p ;@@m5 S16B " Prog & Gfx: Joe Z " 0xfa00 @@m5 fa00 8001 DECLE _s16p fa01 7a92 DECLE _s16p fa02 0238 DECLE _s16p fa03 0030 DECLE _s16p fa04 313a DECLE _s16p fa05 d2c0 DECLE _s16p fa06 0000 DECLE _s16p fa07 7952 DECLE _s16p fa08 0228 DECLE _s16p fa09 01d0 DECLE _s16p ;@@m6 S16B " Levels: David H " 0xfa0a @@m6 fa0a 6001 DECLE _s16p fa0b b22a DECLE _s16p fa0c 622a DECLE _s16p fa0d d298 DECLE _s16p fa0e 0000 DECLE _s16p fa0f 0000 DECLE _s16p fa10 0922 DECLE _s16p fa11 4ab2 DECLE _s16p fa12 0220 DECLE _s16p fa13 0140 DECLE _s16p ;@@m7 S16B " Music: Arnauld C " 0xfa14 @@m7 fa14 6801 DECLE _s16p fa15 9aaa DECLE _s16p fa16 1a4a DECLE _s16p fa17 00d0 DECLE _s16p fa18 0000 DECLE _s16p fa19 910a DECLE _s16p fa1a 0a72 DECLE _s16p fa1b 62aa DECLE _s16p fa1c 0220 DECLE _s16p fa1d 0118 DECLE _s16p ENDP ;__ INCLUDE "gfx/hut.asm" 0xfa1e HUT PROC ; gfx_start ; gfx_row "......##" ; 0 ; gfx_row "...#####" ; 1 fa1e 1f03 DECLE _gfx_w ; gfx_row "..######" ; 2 ; gfx_row ".#####.." ; 3 fa1f 7c3f DECLE _gfx_w ; gfx_row ".#######" ; 4 ; gfx_row "##...###" ; 5 fa20 c77f DECLE _gfx_w ; gfx_row "########" ; 6 ; gfx_row "########" ; 7 fa21 ffff DECLE _gfx_w ; gfx_flush ; gfx_start ; gfx_row "##......" ; 0 ; gfx_row ".###...." ; 1 fa22 70c0 DECLE _gfx_w ; gfx_row "..###..." ; 2 ; gfx_row "..#.##.." ; 3 fa23 2c38 DECLE _gfx_w ; gfx_row "..#####." ; 4 ; gfx_row "..#####." ; 5 fa24 3e3e DECLE _gfx_w ; gfx_row "...#####" ; 6 ; gfx_row "...#####" ; 7 fa25 1f1f DECLE _gfx_w ; gfx_flush ; gfx_start ; gfx_row "........" ; 0 ; gfx_row "#......." ; 1 fa26 8000 DECLE _gfx_w ; gfx_row "#......." ; 2 ; gfx_row "##......" ; 3 fa27 c080 DECLE _gfx_w ; gfx_row "##......" ; 4 ; gfx_row "########" ; 5 fa28 ffc0 DECLE _gfx_w ; gfx_row "##......" ; 6 ; gfx_row "##......" ; 7 fa29 c0c0 DECLE _gfx_w ; gfx_flush ; gfx_start ; gfx_row "......##" ; 0 ; gfx_row ".....###" ; 1 fa2a 0703 DECLE _gfx_w ; gfx_row "....###." ; 2 ; gfx_row "...###.." ; 3 fa2b 1c0e DECLE _gfx_w ; gfx_row "...##..." ; 4 ; gfx_row "........" ; 5 fa2c 0018 DECLE _gfx_w ; gfx_row ".##....." ; 6 ; gfx_row "........" ; 7 fa2d 0060 DECLE _gfx_w ; gfx_flush ; gfx_start ; gfx_row "........" ; gfx_row ".......#" fa2e 0100 DECLE _gfx_w ; gfx_row "........" ; gfx_row "........" fa2f 0000 DECLE _gfx_w ; gfx_row "........" ; gfx_row "........" fa30 0000 DECLE _gfx_w ; gfx_row ".......#" ; gfx_row ".......#" fa31 0101 DECLE _gfx_w ; gfx_row "......#." ; gfx_row "......##" fa32 0302 DECLE _gfx_w ; gfx_row "......##" ; gfx_row "......##" fa33 0303 DECLE _gfx_w ; gfx_row "......##" ; gfx_row "......##" fa34 0303 DECLE _gfx_w ; gfx_row ".......#" ; gfx_row "........" fa35 0001 DECLE _gfx_w ; gfx_row "#.#.#..." ; gfx_row ".####..." fa36 78a8 DECLE _gfx_w ; gfx_row "..####.." ; gfx_row "..####.." fa37 3c3c DECLE _gfx_w ; gfx_row "....###." ; gfx_row "....###." fa38 0e0e DECLE _gfx_w ; gfx_row "......##" ; gfx_row ".......#" fa39 0103 DECLE _gfx_w ; gfx_row "...##..." ; gfx_row "##...#.." fa3a c418 DECLE _gfx_w ; gfx_row ".##..#.." ; gfx_row ".####..." fa3b 7864 DECLE _gfx_w ; gfx_row "######.." ; gfx_row "#######." fa3c fefc DECLE _gfx_w ; gfx_row "######.#" ; gfx_row "######.#" fa3d fdfd DECLE _gfx_w ; gfx_row "#.#.#..." ; gfx_row "#####..." fa3e f8a8 DECLE _gfx_w ; gfx_row "####...." ; gfx_row "####...." fa3f f0f0 DECLE _gfx_w ; gfx_row "####...." ; gfx_row "####...." fa40 f0f0 DECLE _gfx_w ; gfx_row "#####..." ; gfx_row "#####..." fa41 f8f8 DECLE _gfx_w ; gfx_flush ENDP INCLUDE "gfx/ground.asm" ;; ======================================================================== ;; ;; GROUND TERRAIN GRAPHICS ;; ;; ======================================================================== ;; 0xfa42 GROUND PROC ;..#####...#####...#####. ;######################## fa42 003e DECLE 00111110b ;.#####...#####...#####.. ;######################## fa43 007c DECLE 01111100b ;#####...#####...#####... ;######################## fa44 00f8 DECLE 11111000b ;####...#####...#####...# ;######################## fa45 00f1 DECLE 11110001b ;###...#####...#####...## ;######################## fa46 00e3 DECLE 11100011b ;##...#####...#####...### ;######################## fa47 00c7 DECLE 11000111b ;#...#####...#####...#### ;######################## fa48 008f DECLE 10001111b ;...#####...#####...##### ;######################## fa49 001f DECLE 00011111b ENDP INCLUDE "gfx/wheels.asm" ;; ======================================================================== ;; ;; WHEEL GRAPHICS ;; ;; ======================================================================== ;; 0xfa4a WHEELS PROC 0x0 @@pnp EQU 0 * 2 ;+1, 0, +1 0x2 @@npn EQU 1 * 2 ; 0, +1, 0 0x4 @@nnn EQU 2 * 2 ; 0, 0, 0 0x6 @@mmm EQU 3 * 2 ;-1, -1, -1 for jumping ; @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%%@@ %%%%%@@ %%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa4a 0000 DECLE @@pnp ; @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%% @@%%%%% @@%%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa4b 0000 DECLE @@pnp ; @@ @@ @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%% %%%%% %%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa4c 0004 DECLE @@nnn ; @@ @@ @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%% %%%%% %%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa4d 0004 DECLE @@nnn ; @@ @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%% %%%%%@@ %%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa4e 0002 DECLE @@npn ; @@ @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%% %%%%% @@%%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa4f 0002 DECLE @@npn ; @@ @@ @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%% %%%%% %%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa50 0004 DECLE @@nnn ; @@ @@ @@ ; @@ @@ @@ ; @@ @@ @@ ; %%%%% %%%%% %%%%% ; %%%%%%%%%%%%%%%%%%%%%%%% fa51 0004 DECLE @@nnn 0x808 @@__m0 EQU 0000100000001000b 0x0 @@__m1 EQU 0000000000000000b 0x800 @@__n0 EQU 0000100000000000b 0x8 @@__n1 EQU 0000000000001000b 0x0 @@__p0 EQU 0000000000000000b 0x808 @@__p1 EQU 0000100000001000b 0x2020 @@_m_0 EQU 0010000000100000b 0x0 @@_m_1 EQU 0000000000000000b 0x2000 @@_n_0 EQU 0010000000000000b 0x20 @@_n_1 EQU 0000000000100000b 0x0 @@_p_0 EQU 0000000000000000b 0x2020 @@_p_1 EQU 0010000000100000b 0x8080 @@m__0 EQU 1000000010000000b 0x0 @@m__1 EQU 0000000000000000b 0x8000 @@n__0 EQU 1000000000000000b 0x80 @@n__1 EQU 0000000010000000b 0x0 @@p__0 EQU 0000000000000000b 0x8080 @@p__1 EQU 1000000010000000b 0xfa52 @@data: ;+1, 0, +1 fa52 2000 DECLE @@p__0 + @@_n_0 + @@__p0 fa53 88a8 DECLE @@p__1 + @@_n_1 + @@__p1 ; 0, +1, 0 fa54 8800 DECLE @@n__0 + @@_p_0 + @@__n0 fa55 20a8 DECLE @@n__1 + @@_p_1 + @@__n1 ; 0, 0, 0 fa56 a800 DECLE @@n__0 + @@_n_0 + @@__n0 fa57 00a8 DECLE @@n__1 + @@_n_1 + @@__n1 ;-1, -1, -1 fa58 a8a8 @@jump DECLE @@m__0 + @@_m_0 + @@__m0 fa59 0000 DECLE @@m__1 + @@_m_1 + @@__m1 ENDP ;__ 0xa5a _GFX.size EQU $ - _GFX 0xfa5a _FONT EQU $ INCLUDE "genasm/font.asm" 0xfa5a FONT: PROC ;; Skipped 0 indices. ;; Encoding span of 1 entry fa5a 0008 DECLE $0008 ;; Character ' ', GRAM character index 0 fa5b 0000 DECLE $0000 ;........ ; - - - ;........ fa5c 0000 DECLE $0000 ;........ ; - - - ;........ fa5d 0000 DECLE $0000 ;........ ; - - - ;........ fa5e 0000 DECLE $0000 ;........ ; - - - ;........ ;; Skipped 15 indices. ;; Encoding span of 10 entries fa5f 7850 DECLE $7850 ;; Character '0', GRAM character index 16 fa60 82fe DECLE $82FE ;#######. ; - - - ;#.....#. fa61 8e82 DECLE $8E82 ;#.....#. ; - - - ;#...###. fa62 8e8e DECLE $8E8E ;#...###. ; - - - ;#...###. fa63 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character '1', GRAM character index 17 fa64 1030 DECLE $1030 ;..##.... ; - - - ;...#.... fa65 1010 DECLE $1010 ;...#.... ; - - - ;...#.... fa66 3c3c DECLE $3C3C ;..####.. ; - - - ;..####.. fa67 003c DECLE $003C ;..####.. ; - - - ;........ ;; Character '2', GRAM character index 18 fa68 047c DECLE $047C ;.#####.. ; - - - ;.....#.. fa69 7c04 DECLE $7C04 ;.....#.. ; - - - ;.#####.. fa6a e0e0 DECLE $E0E0 ;###..... ; - - - ;###..... fa6b 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character '3', GRAM character index 19 fa6c 08f8 DECLE $08F8 ;#####... ; - - - ;....#... fa6d fc08 DECLE $FC08 ;....#... ; - - - ;######.. fa6e 0e0e DECLE $0E0E ;....###. ; - - - ;....###. fa6f 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character '4', GRAM character index 20 fa70 e2e0 DECLE $E2E0 ;###..... ; - - - ;###...#. fa71 fee2 DECLE $FEE2 ;###...#. ; - - - ;#######. fa72 0202 DECLE $0202 ;......#. ; - - - ;......#. fa73 0002 DECLE $0002 ;......#. ; - - - ;........ ;; Character '5', GRAM character index 21 fa74 407c DECLE $407C ;.#####.. ; - - - ;.#...... fa75 7c40 DECLE $7C40 ;.#...... ; - - - ;.#####.. fa76 0e0e DECLE $0E0E ;....###. ; - - - ;....###. fa77 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character '6', GRAM character index 22 fa78 407c DECLE $407C ;.#####.. ; - - - ;.#...... fa79 fc40 DECLE $FC40 ;.#...... ; - - - ;######.. fa7a e2e2 DECLE $E2E2 ;###...#. ; - - - ;###...#. fa7b 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character '7', GRAM character index 23 fa7c 02fe DECLE $02FE ;#######. ; - - - ;......#. fa7d 0e02 DECLE $0E02 ;......#. ; - - - ;....###. fa7e 0e0e DECLE $0E0E ;....###. ; - - - ;....###. fa7f 000e DECLE $000E ;....###. ; - - - ;........ ;; Character '8', GRAM character index 24 fa80 447c DECLE $447C ;.#####.. ; - - - ;.#...#.. fa81 fe44 DECLE $FE44 ;.#...#.. ; - - - ;#######. fa82 8e8e DECLE $8E8E ;#...###. ; - - - ;#...###. fa83 00fe DECLE $00FE ;#######. ; - - - ;........ ;; Character '9', GRAM character index 25 fa84 82fe DECLE $82FE ;#######. ; - - - ;#.....#. fa85 fe82 DECLE $FE82 ;#.....#. ; - - - ;#######. fa86 0e0e DECLE $0E0E ;....###. ; - - - ;....###. fa87 000e DECLE $000E ;....###. ; - - - ;........ ;; Skipped 1 indices. ;; Encoding span of 1 entry fa88 0808 DECLE $0808 ;; Character #59, GRAM character index 27 fa89 ffff DECLE $FFFF ;######## ; - - - ;######## fa8a ffff DECLE $FFFF ;######## ; - - - ;######## fa8b ffff DECLE $FFFF ;######## ; - - - ;######## fa8c ffff DECLE $FFFF ;######## ; - - - ;######## ;; Skipped 11 indices. ;; Encoding span of 5 entries fa8d 5828 DECLE $5828 ;; Character #71, GRAM character index 39 fa8e 120c DECLE $120C ;....##.. ; - - - ;...#..#. fa8f f971 DECLE $F971 ;.###...# ; - - - ;#####..# fa90 ffaf DECLE $FFAF ;#.#.#### ; - - - ;######## fa91 007e DECLE $007E ;.######. ; - - - ;........ ;; Character #72, GRAM character index 40 fa92 8080 DECLE $8080 ;#....... ; - - - ;#....... fa93 0080 DECLE $0080 ;#....... ; - - - ;........ fa94 0003 DECLE $0003 ;......## ; - - - ;........ fa95 a8a8 DECLE $A8A8 ;#.#.#... ; - - - ;#.#.#... ;; Character #73, GRAM character index 41 fa96 00a8 DECLE $00A8 ;#.#.#... ; - - - ;........ fa97 0000 DECLE $0000 ;........ ; - - - ;........ fa98 0000 DECLE $0000 ;........ ; - - - ;........ fa99 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #74, GRAM character index 42 fa9a ffff DECLE $FFFF ;######## ; - - - ;######## fa9b ffff DECLE $FFFF ;######## ; - - - ;######## fa9c ffff DECLE $FFFF ;######## ; - - - ;######## fa9d 00ff DECLE $00FF ;######## ; - - - ;........ ;; Character 'K', GRAM character index 43 fa9e 0000 DECLE $0000 ;........ ; - - - ;........ fa9f 1000 DECLE $1000 ;........ ; - - - ;...#.... faa0 0000 DECLE $0000 ;........ ; - - - ;........ faa1 0000 DECLE $0000 ;........ ; - - - ;........ ;; End of font. faa2 0000 DECLE $0000 ;; Total chars: 17 characters ;; Total length: 73 decles ;; Decles/char: 4.294 decles/character ENDP INCLUDE "genasm/joefnt.asm" 0xfaa3 JOEFNT: PROC ;; Skipped 1 indices. ;; Encoding span of 7 entries faa3 0838 DECLE $0838 ;; Character #33, GRAM character index 1 faa4 0007 DECLE $0007 ;.....### ; - - - ;........ faa5 0000 DECLE $0000 ;........ ; - - - ;........ faa6 7000 DECLE $7000 ;........ ; - - - ;.###.... faa7 3f71 DECLE $3F71 ;.###...# ; - - - ;..###### ;; Character #34, GRAM character index 2 faa8 06ff DECLE $06FF ;######## ; - - - ;.....##. faa9 190d DECLE $190D ;....##.# ; - - - ;...##..# faaa 6131 DECLE $6131 ;..##...# ; - - - ;.##....# faab 00c0 DECLE $00C0 ;##...... ; - - - ;........ ;; Character #35, GRAM character index 3 faac 00ff DECLE $00FF ;######## ; - - - ;........ faad 58dc DECLE $58DC ;##.###.. ; - - - ;.#.##... faae dc50 DECLE $DC50 ;.#.#.... ; - - - ;##.###.. faaf 0701 DECLE $0701 ;.......# ; - - - ;.....### ;; Character #36, GRAM character index 4 fab0 00ff DECLE $00FF ;######## ; - - - ;........ fab1 0601 DECLE $0601 ;.......# ; - - - ;.....##. fab2 6018 DECLE $6018 ;...##... ; - - - ;.##..... fab3 ff80 DECLE $FF80 ;#....... ; - - - ;######## ;; Character #37, GRAM character index 5 fab4 60f0 DECLE $60F0 ;####.... ; - - - ;.##..... fab5 1991 DECLE $1991 ;#..#...# ; - - - ;...##..# fab6 1915 DECLE $1915 ;...#.#.# ; - - - ;...##..# fab7 ff00 DECLE $FF00 ;........ ; - - - ;######## ;; Character #38, GRAM character index 6 fab8 0000 DECLE $0000 ;........ ; - - - ;........ fab9 4534 DECLE $4534 ;..##.#.. ; - - - ;.#...#.# faba 3545 DECLE $3545 ;.#...#.# ; - - - ;..##.#.# fabb ff00 DECLE $FF00 ;........ ; - - - ;######## ;; Character #39, GRAM character index 7 fabc 0000 DECLE $0000 ;........ ; - - - ;........ fabd 5894 DECLE $5894 ;#..#.#.. ; - - - ;.#.##... fabe 54d4 DECLE $54D4 ;##.#.#.. ; - - - ;.#.#.#.. fabf ff00 DECLE $FF00 ;........ ; - - - ;######## ;; Skipped 18 indices. ;; Encoding span of 1 entry fac0 9008 DECLE $9008 ;; Character #58, GRAM character index 26 fac1 423c DECLE $423C ;..####.. ; - - - ;.#....#. fac2 a199 DECLE $A199 ;#..##..# ; - - - ;#.#....# fac3 99a1 DECLE $99A1 ;#.#....# ; - - - ;#..##..# fac4 3c42 DECLE $3C42 ;.#....#. ; - - - ;..####.. ;; End of font. fac5 0000 DECLE $0000 ;; Total chars: 8 characters ;; Total length: 35 decles ;; Decles/char: 4.375 decles/character ENDP INCLUDE "genasm/creepfnt.asm" 0xfac6 CREEPFNT: PROC ;; Skipped 1 indices. ;; Encoding span of 2 entries fac6 0810 DECLE $0810 ;; Character #33, GRAM character index 1 fac7 2200 DECLE $2200 ;........ ; - - - ;..#...#. fac8 3c14 DECLE $3C14 ;...#.#.. ; - - - ;..####.. fac9 185a DECLE $185A ;.#.##.#. ; - - - ;...##... faca 6a1c DECLE $6A1C ;...###.. ; - - - ;.##.#.#. ;; Character #34, GRAM character index 2 facb 9360 DECLE $9360 ;.##..... ; - - - ;#..#..## facc 5c34 DECLE $5C34 ;..##.#.. ; - - - ;.#.###.. facd 181a DECLE $181A ;...##.#. ; - - - ;...##... face 6a3c DECLE $6A3C ;..####.. ; - - - ;.##.#.#. ;; Skipped 1 indices. ;; Encoding span of 4 entries facf 0820 DECLE $0820 ;; Character #36, GRAM character index 4 fad0 827c DECLE $827C ;.#####.. ; - - - ;#.....#. fad1 9292 DECLE $9292 ;#..#..#. ; - - - ;#..#..#. fad2 868a DECLE $868A ;#...#.#. ; - - - ;#....##. fad3 007c DECLE $007C ;.#####.. ; - - - ;........ ;; Character #37, GRAM character index 5 fad4 0000 DECLE $0000 ;........ ; - - - ;........ fad5 95c9 DECLE $95C9 ;##..#..# ; - - - ;#..#.#.# fad6 d59d DECLE $D59D ;#..###.# ; - - - ;##.#.#.# fad7 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #38, GRAM character index 6 fad8 0000 DECLE $0000 ;........ ; - - - ;........ fad9 4a5e DECLE $4A5E ;.#.####. ; - - - ;.#..#.#. fada ca4a DECLE $CA4A ;.#..#.#. ; - - - ;##..#.#. fadb 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #39, GRAM character index 7 fadc 0000 DECLE $0000 ;........ ; - - - ;........ fadd ade9 DECLE $ADE9 ;###.#..# ; - - - ;#.#.##.# fade e9ab DECLE $E9AB ;#.#.#.## ; - - - ;###.#..# fadf 0000 DECLE $0000 ;........ ; - - - ;........ ;; Skipped 20 indices. ;; Encoding span of 11 entries fae0 a058 DECLE $A058 ;; Character '<', GRAM character index 28 fae1 0000 DECLE $0000 ;........ ; - - - ;........ fae2 0000 DECLE $0000 ;........ ; - - - ;........ fae3 0000 DECLE $0000 ;........ ; - - - ;........ fae4 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character '=', GRAM character index 29 fae5 0000 DECLE $0000 ;........ ; - - - ;........ fae6 0000 DECLE $0000 ;........ ; - - - ;........ fae7 180c DECLE $180C ;....##.. ; - - - ;...##... fae8 0030 DECLE $0030 ;..##.... ; - - - ;........ ;; Character '>', GRAM character index 30 fae9 c080 DECLE $C080 ;#....... ; - - - ;##...... faea 60e0 DECLE $60E0 ;###..... ; - - - ;.##..... faeb 6670 DECLE $6670 ;.###.... ; - - - ;.##..##. faec 00cf DECLE $00CF ;##..#### ; - - - ;........ ;; Character '?', GRAM character index 31 faed 4200 DECLE $4200 ;........ ; - - - ;.#....#. faee 0024 DECLE $0024 ;..#..#.. ; - - - ;........ faef 00db DECLE $00DB ;##.##.## ; - - - ;........ faf0 4224 DECLE $4224 ;..#..#.. ; - - - ;.#....#. ;; Character '@', GRAM character index 32 faf1 3f1e DECLE $3F1E ;...####. ; - - - ;..###### faf2 3fff DECLE $3FFF ;######## ; - - - ;..###### faf3 512a DECLE $512A ;..#.#.#. ; - - - ;.#.#...# faf4 dbdb DECLE $DBDB ;##.##.## ; - - - ;##.##.## ;; Character 'A', GRAM character index 33 faf5 0000 DECLE $0000 ;........ ; - - - ;........ faf6 3c18 DECLE $3C18 ;...##... ; - - - ;..####.. faf7 db7e DECLE $DB7E ;.######. ; - - - ;##.##.## faf8 66ff DECLE $66FF ;######## ; - - - ;.##..##. ;; Character 'B', GRAM character index 34 faf9 7a3c DECLE $7A3C ;..####.. ; - - - ;.####.#. fafa fffd DECLE $FFFD ;######.# ; - - - ;######## fafb ffff DECLE $FFFF ;######## ; - - - ;######## fafc 3c7e DECLE $3C7E ;.######. ; - - - ;..####.. ;; Character 'C', GRAM character index 35 fafd 0000 DECLE $0000 ;........ ; - - - ;........ fafe 0000 DECLE $0000 ;........ ; - - - ;........ faff 0000 DECLE $0000 ;........ ; - - - ;........ fb00 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character 'D', GRAM character index 36 fb01 0000 DECLE $0000 ;........ ; - - - ;........ fb02 0000 DECLE $0000 ;........ ; - - - ;........ fb03 0500 DECLE $0500 ;........ ; - - - ;.....#.# fb04 0502 DECLE $0502 ;......#. ; - - - ;.....#.# ;; Character 'E', GRAM character index 37 fb05 0000 DECLE $0000 ;........ ; - - - ;........ fb06 0000 DECLE $0000 ;........ ; - - - ;........ fb07 0300 DECLE $0300 ;........ ; - - - ;......## fb08 0303 DECLE $0303 ;......## ; - - - ;......## ;; Character 'F', GRAM character index 38 fb09 0000 DECLE $0000 ;........ ; - - - ;........ fb0a 0000 DECLE $0000 ;........ ; - - - ;........ fb0b 0500 DECLE $0500 ;........ ; - - - ;.....#.# fb0c 0202 DECLE $0202 ;......#. ; - - - ;......#. ;; End of font. fb0d 0000 DECLE $0000 ;; Total chars: 17 characters ;; Total length: 72 decles ;; Decles/char: 4.235 decles/character ENDP INCLUDE "genasm/creep2.asm" 0xfb0e CREEPFNT2: PROC ;; Skipped 26 indices. ;; Encoding span of 1 entry fb0e d008 DECLE $D008 ;; Character #58, GRAM character index 26 fb0f 7e18 DECLE $7E18 ;...##... ; - - - ;.######. fb10 bbbb DECLE $BBBB ;#.###.## ; - - - ;#.###.## fb11 7e7e DECLE $7E7E ;.######. ; - - - ;.######. fb12 81c3 DECLE $81C3 ;##....## ; - - - ;#......# ;; Skipped 6 indices. ;; Encoding span of 1 entry fb13 3008 DECLE $3008 ;; Character 'A', GRAM character index 33 fb14 7e18 DECLE $7E18 ;...##... ; - - - ;.######. fb15 7777 DECLE $7777 ;.###.### ; - - - ;.###.### fb16 7e7e DECLE $7E7E ;.######. ; - - - ;.######. fb17 81c3 DECLE $81C3 ;##....## ; - - - ;#......# ;; End of font. fb18 0000 DECLE $0000 ;; Total chars: 2 characters ;; Total length: 11 decles ;; Decles/char: 5.500 decles/character ENDP INCLUDE "genasm/creep3.asm" 0xfb19 CREEPFNT3: PROC ;; Skipped 3 indices. ;; Encoding span of 1 entry fb19 1808 DECLE $1808 ;; Character #35, GRAM character index 3 fb1a 7e18 DECLE $7E18 ;...##... ; - - - ;.######. fb1b 77ff DECLE $77FF ;######## ; - - - ;.###.### fb1c ff77 DECLE $FF77 ;.###.### ; - - - ;######## fb1d 187e DECLE $187E ;.######. ; - - - ;...##... ;; Skipped 22 indices. ;; Encoding span of 1 entry fb1e b008 DECLE $B008 ;; Character #58, GRAM character index 26 fb1f 7e18 DECLE $7E18 ;...##... ; - - - ;.######. fb20 bbff DECLE $BBFF ;######## ; - - - ;#.###.## fb21 ffbb DECLE $FFBB ;#.###.## ; - - - ;######## fb22 187e DECLE $187E ;.######. ; - - - ;...##... ;; Skipped 6 indices. ;; Encoding span of 1 entry fb23 3008 DECLE $3008 ;; Character 'A', GRAM character index 33 fb24 a660 DECLE $A660 ;.##..... ; - - - ;#.#..##. fb25 5a3d DECLE $5A3D ;..####.# ; - - - ;.#.##.#. fb26 7e3c DECLE $7E3C ;..####.. ; - - - ;.######. fb27 c3db DECLE $C3DB ;##.##.## ; - - - ;##....## ;; End of font. fb28 0000 DECLE $0000 ;; Total chars: 3 characters ;; Total length: 16 decles ;; Decles/char: 5.333 decles/character ENDP INCLUDE "genasm/creep4.asm" 0xfb29 CREEPFNT4: PROC ;; Skipped 26 indices. ;; Encoding span of 1 entry fb29 d008 DECLE $D008 ;; Character #58, GRAM character index 26 fb2a 7a3c DECLE $7A3C ;..####.. ; - - - ;.####.#. fb2b fbf1 DECLE $FBF1 ;####...# ; - - - ;#####.## fb2c ffff DECLE $FFFF ;######## ; - - - ;######## fb2d 3c7e DECLE $3C7E ;.######. ; - - - ;..####.. ;; Skipped 6 indices. ;; Encoding span of 1 entry fb2e 3008 DECLE $3008 ;; Character 'A', GRAM character index 33 fb2f 4180 DECLE $4180 ;#....... ; - - - ;.#.....# fb30 7e5a DECLE $7E5A ;.#.##.#. ; - - - ;.######. fb31 db7e DECLE $DB7E ;.######. ; - - - ;##.##.## fb32 66ff DECLE $66FF ;######## ; - - - ;.##..##. ;; End of font. fb33 0000 DECLE $0000 ;; Total chars: 2 characters ;; Total length: 11 decles ;; Decles/char: 5.500 decles/character ENDP INCLUDE "genasm/teasefnt.asm" 0xfb34 TEASEFNT: PROC ;; Skipped 1 indices. ;; Encoding span of 20 entries fb34 08a0 DECLE $08A0 ;; Character #33, GRAM character index 1 fb35 c1c1 DECLE $C1C1 ;##.....# ; - - - ;##.....# fb36 c9f3 DECLE $C9F3 ;####..## ; - - - ;##..#..# fb37 c8c9 DECLE $C8C9 ;##..#..# ; - - - ;##..#... fb38 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #34, GRAM character index 2 fb39 8686 DECLE $8686 ;#....##. ; - - - ;#....##. fb3a 86cf DECLE $86CF ;##..#### ; - - - ;#....##. fb3b e386 DECLE $E386 ;#....##. ; - - - ;###...## fb3c 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #35, GRAM character index 3 fb3d 0000 DECLE $0000 ;........ ; - - - ;........ fb3e 191e DECLE $191E ;...####. ; - - - ;...##..# fb3f 9e19 DECLE $9E19 ;...##..# ; - - - ;#..####. fb40 1818 DECLE $1818 ;...##... ; - - - ;...##... ;; Character #36, GRAM character index 4 fb41 3000 DECLE $3000 ;........ ; - - - ;..##.... fb42 0131 DECLE $0131 ;..##...# ; - - - ;.......# fb43 3333 DECLE $3333 ;..##..## ; - - - ;..##..## fb44 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #37, GRAM character index 5 fb45 c6c6 DECLE $C6C6 ;##...##. ; - - - ;##...##. fb46 8c8c DECLE $8C8C ;#...##.. ; - - - ;#...##.. fb47 1818 DECLE $1818 ;...##... ; - - - ;...##... fb48 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #38, GRAM character index 6 fb49 3030 DECLE $3030 ;..##.... ; - - - ;..##.... fb4a 3078 DECLE $3078 ;.####... ; - - - ;..##.... fb4b 1c30 DECLE $1C30 ;..##.... ; - - - ;...###.. fb4c 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #39, GRAM character index 7 fb4d 00c0 DECLE $00C0 ;##...... ; - - - ;........ fb4e cecd DECLE $CECD ;##..##.# ; - - - ;##..###. fb4f cccc DECLE $CCCC ;##..##.. ; - - - ;##..##.. fb50 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #40, GRAM character index 8 fb51 0000 DECLE $0000 ;........ ; - - - ;........ fb52 4c8c DECLE $4C8C ;#...##.. ; - - - ;.#..##.. fb53 474c DECLE $474C ;.#..##.. ; - - - ;.#...### fb54 0f00 DECLE $0F00 ;........ ; - - - ;....#### ;; Character #41, GRAM character index 9 fb55 0000 DECLE $0000 ;........ ; - - - ;........ fb56 9898 DECLE $9898 ;#..##... ; - - - ;#..##... fb57 8e99 DECLE $8E99 ;#..##..# ; - - - ;#...###. fb58 0080 DECLE $0080 ;#....... ; - - - ;........ ;; Character #42, GRAM character index 10 fb59 0000 DECLE $0000 ;........ ; - - - ;........ fb5a 8c8b DECLE $8C8B ;#...#.## ; - - - ;#...##.. fb5b cc8c DECLE $CC8C ;#...##.. ; - - - ;##..##.. fb5c 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #43, GRAM character index 11 fb5d 1818 DECLE $1818 ;...##... ; - - - ;...##... fb5e 1898 DECLE $1898 ;#..##... ; - - - ;...##... fb5f 0e18 DECLE $0E18 ;...##... ; - - - ;....###. fb60 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #44, GRAM character index 12 fb61 0000 DECLE $0000 ;........ ; - - - ;........ fb62 0603 DECLE $0603 ;......## ; - - - ;.....##. fb63 6366 DECLE $6366 ;.##..##. ; - - - ;.##...## fb64 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #45, GRAM character index 13 fb65 0000 DECLE $0000 ;........ ; - - - ;........ fb66 0cc7 DECLE $0CC7 ;##...### ; - - - ;....##.. fb67 c70c DECLE $C70C ;....##.. ; - - - ;##...### fb68 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #46, GRAM character index 14 fb69 0000 DECLE $0000 ;........ ; - - - ;........ fb6a 9917 DECLE $9917 ;...#.### ; - - - ;#..##..# fb6b 1999 DECLE $1999 ;#..##..# ; - - - ;...##..# fb6c 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #47, GRAM character index 15 fb6d 0000 DECLE $0000 ;........ ; - - - ;........ fb6e 9161 DECLE $9161 ;.##....# ; - - - ;#..#...# fb6f 9393 DECLE $9393 ;#..#..## ; - - - ;#..#..## fb70 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #48, GRAM character index 16 fb71 c0c0 DECLE $C0C0 ;##...... ; - - - ;##...... fb72 8c8c DECLE $8C8C ;#...##.. ; - - - ;#...##.. fb73 0306 DECLE $0306 ;.....##. ; - - - ;......## fb74 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #49, GRAM character index 17 fb75 0000 DECLE $0000 ;........ ; - - - ;........ fb76 4c4c DECLE $4C4C ;.#..##.. ; - - - ;.#..##.. fb77 078c DECLE $078C ;#...##.. ; - - - ;.....### fb78 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #50, GRAM character index 18 fb79 0606 DECLE $0606 ;.....##. ; - - - ;.....##. fb7a 464f DECLE $464F ;.#..#### ; - - - ;.#...##. fb7b 63c6 DECLE $63C6 ;##...##. ; - - - ;.##...## fb7c 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #51, GRAM character index 19 fb7d 033f DECLE $033F ;..###### ; - - - ;......## fb7e 0c06 DECLE $0C06 ;.....##. ; - - - ;....##.. fb7f 8c0c DECLE $8C0C ;....##.. ; - - - ;#...##.. fb80 0000 DECLE $0000 ;........ ; - - - ;........ ;; Character #52, GRAM character index 20 fb81 077d DECLE $077D ;.#####.# ; - - - ;.....### fb82 071d DECLE $071D ;...###.# ; - - - ;.....### fb83 7d07 DECLE $7D07 ;.....### ; - - - ;.#####.# fb84 0101 DECLE $0101 ;.......# ; - - - ;.......# ;; End of font. fb85 0000 DECLE $0000 ;; Total chars: 20 characters ;; Total length: 82 decles ;; Decles/char: 4.100 decles/character ENDP 0x12c _FONT.size EQU $ - _FONT 0xfb86 _SFX EQU $ INCLUDE "snd/sfx.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Sound Effects ;; ;;==========================================================================;; ;; ======================================================================== ;; ;; SFXI Macro for generating an SFXINI (init) table entry. ;; ;; SFXT Macro for generating an SFXIND (thinker) table entry. ;; ;; ======================================================================== ;; MACRO SFXI fxn, t, n, v, i, b DECLE ($F AND (%b%)) OR (($1E AND (%n%)) SHL 3) OR (($FF AND (%i%)) SHL 8) DECLE (($F AND (%v%)) SHL 12) OR ($FFF AND (%t%)) ENDM MACRO SFXT fxn @@%fxn% DECLE SFX%fxn% FX%fxn% EQU $ - SFXIND ENDM ;; ======================================================================== ;; ;; SFXINI Indirection table for SFX initializers ;; ;; SFXIND Indirection table for SFX thinkers ;; ;; ======================================================================== ;; 0xfb86 SFXINI PROC ;SFXI BFIRE, $03A, $000, $8, $00, $F fb86 000f DECLE ($F AND ($F)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($00)) SHL 8) fb87 803a DECLE (($F AND ($8)) SHL 12) OR ($FFF AND ($03A)) ;SFXI SMEXP, $888, $01E, $B, $07, $C ; MC only fb88 07fc DECLE ($F AND ($C)) OR (($1E AND ($01E)) SHL 3) OR (($FF AND ($07)) SHL 8) fb89 b888 DECLE (($F AND ($B)) SHL 12) OR ($FFF AND ($888)) ; MC only ;SFXI JUMP2, $A04, $000, $D, $07, $3 ; ... ECS only or both? fb8a 0703 DECLE ($F AND ($3)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($07)) SHL 8) fb8b da04 DECLE (($F AND ($D)) SHL 12) OR ($FFF AND ($A04)) ; ... ECS only or both? ;SFXI ALIEN, $0BE, $000, $A, $00, $F fb8c 000f DECLE ($F AND ($F)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($00)) SHL 8) fb8d a0be DECLE (($F AND ($A)) SHL 12) OR ($FFF AND ($0BE)) ;SFXI LGEXP, $BBB, $01E, $D, $07, $C ; MC only fb8e 07fc DECLE ($F AND ($C)) OR (($1E AND ($01E)) SHL 3) OR (($FF AND ($07)) SHL 8) fb8f dbbb DECLE (($F AND ($D)) SHL 12) OR ($FFF AND ($BBB)) ; MC only ;SFXI DING, $098, $000, $D, $34, $F fb90 340f DECLE ($F AND ($F)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($34)) SHL 8) fb91 d098 DECLE (($F AND ($D)) SHL 12) OR ($FFF AND ($098)) ;SFXI JUMP, $0BE, $000, $C, $07, $F fb92 070f DECLE ($F AND ($F)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($07)) SHL 8) fb93 c0be DECLE (($F AND ($C)) SHL 12) OR ($FFF AND ($0BE)) ;SFXI PLANT, $55E, $000, $B, $00, $3 ; ECS only fb94 0003 DECLE ($F AND ($3)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($00)) SHL 8) fb95 b55e DECLE (($F AND ($B)) SHL 12) OR ($FFF AND ($55E)) ; ECS only ;SFXI SAUC, $06B, $000, $9, $00, $3 ; ECS only fb96 0003 DECLE ($F AND ($3)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($00)) SHL 8) fb97 906b DECLE (($F AND ($9)) SHL 12) OR ($FFF AND ($06B)) ; ECS only ;SFXI DIED, $000, $010, $D, $20, $C ; MC only. fb98 208c DECLE ($F AND ($C)) OR (($1E AND ($010)) SHL 3) OR (($FF AND ($20)) SHL 8) fb99 d000 DECLE (($F AND ($D)) SHL 12) OR ($FFF AND ($000)) ; MC only. ;SFXI SKID, $0AA, $000, $D, $30, $C ; MC only fb9a 300c DECLE ($F AND ($C)) OR (($1E AND ($000)) SHL 3) OR (($FF AND ($30)) SHL 8) fb9b d0aa DECLE (($F AND ($D)) SHL 12) OR ($FFF AND ($0AA)) ; MC only ENDP 0xfb9c SFXIND PROC ;SFXT BFIRE fb9c fc9a @@BFIRE DECLE SFXBFIRE 0x1 FXBFIRE EQU $ - SFXIND ;SFXT SMEXP fb9d fc3c @@SMEXP DECLE SFXSMEXP 0x2 FXSMEXP EQU $ - SFXIND ;SFXT JUMP2 fb9e fc49 @@JUMP2 DECLE SFXJUMP2 0x3 FXJUMP2 EQU $ - SFXIND ;SFXT ALIEN fb9f fca4 @@ALIEN DECLE SFXALIEN 0x4 FXALIEN EQU $ - SFXIND ;SFXT LGEXP fba0 fc3c @@LGEXP DECLE SFXLGEXP 0x5 FXLGEXP EQU $ - SFXIND ;SFXT DING fba1 fcde @@DING DECLE SFXDING 0x6 FXDING EQU $ - SFXIND ;SFXT JUMP fba2 fc27 @@JUMP DECLE SFXJUMP 0x7 FXJUMP EQU $ - SFXIND ;SFXT PLANT fba3 fba7 @@PLANT DECLE SFXPLANT 0x8 FXPLANT EQU $ - SFXIND ;SFXT SAUC fba4 fbdd @@SAUC DECLE SFXSAUC 0x9 FXSAUC EQU $ - SFXIND ;SFXT DIED fba5 fc5c @@DIED DECLE SFXDIED 0xa FXDIED EQU $ - SFXIND ;SFXT SKID fba6 fcec @@SKID DECLE SFXSKID 0xb FXSKID EQU $ - SFXIND ENDP ;; ======================================================================== ;; ;; SFXPLANT -- Doodle Doodle Deedle Doodle ;; ;; ======================================================================== ;; 0xfba7 SFXPLANT PROC ; Note sequence: a, b, c, b, d, b, c, b 0x59e @@a EQU $2CF*2 0x54e @@b EQU $2A7*2 0x4e2 @@c EQU $271*2 0x4ba @@d EQU $25D*2 fba7 02a1 MVI@ R4, R1 fba8 0014 DECR R4 fba9 0009 INCR R1 fbaa 0261 MVO@ R1, R4 fbab 0014 DECR R4 fbac 0088 MOVR R1, R0 fbad 03b8 0007 ANDI #7, R0 fbaf 022c 90a4 BNEQ SFXRET fbb1 0004 0168 03fa CALL SFXGET fbb4 007d SARC R1, 2 fbb5 0079 SARC R1, 1 fbb6 03b9 0007 ANDI #7, R1 fbb8 020c 0002 BNEQ @@ok fbba 02ba 000a MVII #$A, R2 fbbc 02f9 fbd5 @@ok ADDI #@@tbl, R1 fbbe 0288 MVI@ R1, R0 fbbf 0004 016c 000a CALL SFXPUT.1 ; Die if there are no plants left fbc2 02ba 011c MVII #BGMPTBL, R2 0xfbc4 @@loop fbc4 0290 MVI@ R2, R0 fbc5 0378 0008 CMPI #BGI.plant0, R0 fbc7 0224 90bc BEQ SFXRET fbc9 0378 0009 CMPI #BGI.plant1, R0 fbcb 0224 90c0 BEQ SFXRET fbcd 02fa 0004 @@next ADDI #4, R2 fbcf 037a 0130 CMPI #BGMPTBL+20, R2 fbd1 0225 000e BLT @@loop fbd3 0220 90ba B SFXDIE ; no plants fbd5 059e 054e 04e2 @@tbl DECLE @@a, @@b, @@c, @@b, @@d, @@b, @@c, @@b fbd8 054e 04ba 054e 04e2 054e ENDP ;; ======================================================================== ;; ;; SFXSAUC ;; ;; ======================================================================== ;; 0xfbdd SFXSAUC PROC fbdd 02a1 MVI@ R4, R1 fbde 0014 DECR R4 fbdf 008a MOVR R1, R2 fbe0 03b9 0007 ANDI #7, R1 fbe2 02f9 fc1f ADDI #@@tgt, R1 fbe4 0288 MVI@ R1, R0 ; Get target pitch fbe5 0318 SUB@ R3, R0 ; Compare against current fbe6 0378 0003 CMPI #3, R0 ; \ fbe8 020e 001a BGT @@same ; |_ If more than +/- 3 fbea 0378 fffd CMPI #-3, R0 ; | away, keep advancing fbec 0205 0016 BLT @@same ; / towards target. fbee 000a INCR R2 fbef 0262 MVO@ R2, R4 fbf0 0014 DECR R4 ; Get louder/softer fbf1 02fb 000b ADDI #$B, R3 fbf3 0298 MVI@ R3, R0 fbf4 03b9 0004 ANDI #4, R1 fbf6 0339 0002 SUBI #2, R1 fbf8 0079 SARC R1, 1 fbf9 0108 SUBR R1, R0 fbfa 0258 MVO@ R0, R3 fbfb 033b 000b SUBI #$B, R3 ; Die if there are no saucers left fbfd 0280 013d MVI WAVE, R0 fbff 0080 TSTR R0 fc00 0224 90e7 BEQ SFXDIE fc02 0220 90f7 B SFXRET ; R0 contains delta between target and actual fc04 0281 019b @@same MVI SFXSTMP, R1 fc06 03f9 0080 XORI #$80, R1 fc08 0339 0080 SUBI #$80, R1 fc0a 007c SARC R0, 2 fc0b 0078 SARC R0, 1 fc0c 00c8 ADDR R1, R0 fc0d 020b 0008 BMI @@nrnd fc0f 0078 SARC R0, 1 fc10 0028 ADCR R0 fc11 0240 019b MVO R0, SFXSTMP fc13 0078 SARC R0, 1 fc14 0028 ADCR R0 fc15 0200 0004 B @@doit 0xfc17 @@nrnd fc17 0078 SARC R0, 1 fc18 0240 019b MVO R0, SFXSTMP fc1a 0078 SARC R0, 1 0xfc1b @@doit fc1b 02d8 ADD@ R3, R0 fc1c 0258 MVO@ R0, R3 fc1d 0220 9112 B SFXRET fc1f 0087 00aa 008f @@tgt DECLE $87, $AA, $8F, $B4, $87, $AA, $8F, $BE fc22 00b4 0087 00aa 008f 00be ENDP ;; ======================================================================== ;; ;; SFXJUMP/SFXJUMP2 ;; ;; Rapidly descending ramp. Tone only. ;; ;; ======================================================================== ;; 0xfc27 SFXJUMP PROC fc27 0004 0168 03fa CALL SFXGET fc2a 02a1 MVI@ R4, R1 ; Get state byte fc2b 0014 DECR R4 fc2c 0011 DECR R1 ; Count down fc2d 0203 0003 BPL @@novol ; No expiry, no volume update fc2f 0012 DECR R2 ; Decrement volume fc30 02b9 0006 MVII #6, R1 ; Restart counter 0xfc32 @@novol: fc32 0261 MVO@ R1, R4 ; Store updated counter fc33 0014 DECR R4 fc34 02f8 0002 ADDI #2, R0 ; Go down one period fc36 0378 0140 CMPI #$140, R0 ; \_ Die at end fc38 022e 911f BGT SFXDIE ; / fc3a 0220 9033 B SFXPUT ; Update pitch/volume and leave ENDP ;; ======================================================================== ;; ;; SFXSMEXP/SFXLGEXP ;; ;; Explosions: Enveloped noise modulated by random tones. ;; ;; ======================================================================== ;; 0xfc3c SFXSMEXP 0xfc3c SFXLGEXP PROC fc3c 0004 0168 03fa CALL SFXGET fc3f 02f8 0400 ADDI #$0400, R0 fc41 0378 0100 CMPI #$0100, R0 fc43 0201 0007 BC SFXJUMP2.1 fc45 02b8 0001 MVII #1, R0 fc47 0200 0003 @@ok: B SFXJUMP2.1 ENDP ;; ======================================================================== ;; ;; SFXJUMP2 ;; ;; Second half of the JUMP sound effect -- Enveloped low constant pitch. ;; ;; ======================================================================== ;; 0xfc49 SFXJUMP2 PROC fc49 0004 0168 03fa CALL SFXGET 0xfc4c @@1 fc4c 02a1 MVI@ R4, R1 ; Get state byte fc4d 0014 DECR R4 fc4e 0011 DECR R1 ; Count down fc4f 0203 0007 BPL @@novol ; No expiry, no volume update fc51 02b9 0006 MVII #6, R1 ; Restart counter fc53 0012 DECR R2 ; Decr volume every 7 tics fc54 037a 0002 CMPI #2, R2 ; Die when it reaches 2 fc56 0224 913d BEQ SFXDIE 0xfc58 @@novol: fc58 0261 MVO@ R1, R4 ; Store updated counter fc59 0014 DECR R4 fc5a 0220 9053 B SFXPUT ; Update pitch/vol and leave ENDP ;; ======================================================================== ;; ;; SFXDIED ;; ;; Tank fall down go boom. Four staccato blasts of noise that fade out. ;; ;; ======================================================================== ;; 0xfc5c SFXDIED PROC fc5c 02b8 0007 MVII #$07, R0 ; \_ Special case: Own fc5e 0240 01f8 MVO R0, $1F8 ; / the entire PSG0 fc60 00a2 MOVR R4, R2 ; fc61 0290 MVI@ R2, R0 ; fc62 0378 0007 CMPI #7, R0 fc64 0205 001b BLT @@fade fc66 0010 DECR R0 fc67 0250 MVO@ R0, R2 fc68 0078 SARC R0, 1 fc69 0221 915e BC SFXRET fc6b 02fb 000b ADDI #$B, R3 fc6d 0299 MVI@ R3, R1 fc6e 03b9 000f ANDI #$0F, R1 ; Some PSGs set bits 6..7 fc70 033b 000b SUBI #$B, R3 fc72 0011 DECR R1 fc73 0379 0009 CMPI #9, R1 fc75 020e 0002 BGT @@ok fc77 02b9 000d MVII #13, R1 fc79 0241 01fb @@ok: MVO R1, $1FB fc7b 0241 01fc MVO R1, $1FC fc7d 0241 01fd MVO R1, $1FD fc7f 0220 9174 B SFXRET fc81 0010 @@fade: DECR R0 fc82 0203 0013 BPL @@leave fc84 02b8 0006 MVII #6, R0 fc86 0250 MVO@ R0, R2 fc87 02fb 000b ADDI #$B, R3 fc89 0299 MVI@ R3, R1 fc8a 03b9 000f ANDI #$0F, R1 ; Some PSGs set bits 6..7 fc8c 033b 000b SUBI #$B, R3 fc8e 0011 DECR R1 fc8f 0223 0017 BPL @@ok fc91 02b8 0038 MVII #$38, R0 fc93 0240 01f8 MVO R0, $1F8 fc95 0220 917c B SFXDIE fc97 0250 @@leave MVO@ R0, R2 fc98 0220 918d B SFXRET ENDP ;; ======================================================================== ;; ;; SFXBFIRE ;; ;; ======================================================================== ;; 0xfc9a SFXBFIRE PROC fc9a 0298 MVI@ R3, R0 ; Get pitch fc9b 0338 0002 SUBI #2, R0 ; Fast decreasing rate fc9d 0378 0028 CMPI #$28, R0 ; End after $2C fc9f 0225 9186 BLT SFXDIE fca1 0258 MVO@ R0, R3 ; Otherwise update fca2 0220 9197 B SFXRET ENDP ;; ======================================================================== ;; ;; SFXALIEN ;; ;; ======================================================================== ;; 0xfca4 SFXALIEN PROC fca4 02a1 MVI@ R4, R1 ; \ fca5 0009 INCR R1 ; | fca6 008a MOVR R1, R2 ; | Increment state byte fca7 03ba 0003 ANDI #3, R2 ; | fca9 037a 0003 CMPI #3, R2 fcab 0029 ADCR R1 fcac 0014 @@ok: DECR R4 ; | fcad 0261 MVO@ R1, R4 ; / fcae 0014 DECR R4 fcaf 0379 0050 CMPI #80, R1 ; \__ Quit after 60 tics fcb1 022d 9198 BGE SFXDIE ; / fcb3 03ba 0001 ANDI #1, R2 ; \__ Update every 4 counts fcb5 0224 91aa BEQ SFXRET ; / (4 tics/2 tics) fcb7 0065 SLR R1, 2 ; Divide count by 4 fcb8 0004 0168 03fa CALL SFXGET fcbb 008a MOVR R1, R2 ; \ fcbc 02fa fcc6 ADDI #@@vtbl,R2 ; |- Get volume (20 steps) fcbe 0292 MVI@ R2, R2 ; / fcbf 03b9 0003 ANDI #3, R1 ; Alternate among 4 tones fcc1 02f9 fcda ADDI #@@ttbl,R1 ; \_ Get tone (4 tones) fcc3 0288 MVI@ R1, R0 ; / fcc4 0220 90bd B SFXPUT fcc6 000a 000a 000a @@vtbl DECLE $A,$A,$A,$A,9,9,9,8,8,8,7,7,7,6,6,5,4,3,2,0 fcc9 000a 0009 0009 0009 0008 0008 0008 0007 fcd1 0007 0007 0006 0006 0005 0004 0003 0002 fcd9 0000 fcda 00a0 00be 00e2 @@ttbl DECLE $0A0,$0BE,$0E2,$0BE fcdd 00be ENDP ;; ======================================================================== ;; ;; SFXDING ;; ;; ======================================================================== ;; 0xfcde SFXDING PROC fcde 00a2 MOVR R4, R2 fcdf 0290 MVI@ R2, R0 fce0 0010 DECR R0 fce1 0250 MVO@ R0, R2 fce2 0064 SLR R0, 2 fce3 0224 91ca BEQ SFXDIE fce5 02fb 000b ADDI #$B, R3 fce7 0258 MVO@ R0, R3 fce8 033b 000b SUBI #$B, R3 fcea 0220 91df B SFXRET ENDP ;; ======================================================================== ;; ;; SFXSKID ;; ;; ======================================================================== ;; 0xfcec SFXSKID PROC fcec 0298 MVI@ R3, R0 ; SUBI #$40, R0 ; ANDI #$7F, R0 ; ADDI #$20, R0 fced 03f8 0033 XORI #$33, R0 fcef 0258 MVO@ R0, R3 fcf0 02a0 MVI@ R4, R0 fcf1 0014 DECR R4 fcf2 0010 DECR R0 fcf3 020b 0004 BMI @@switch fcf5 0260 MVO@ R0, R4 fcf6 0014 DECR R4 fcf7 0220 91ec B SFXRET fcf9 02b8 000a @@switch: MVII #FXDIED,R0 fcfb 0240 0199 MVO R0, SFXQ fcfd 0220 91e4 B SFXDIE ENDP ;__ INCLUDE "snd/music.asm" ;;==========================================================================;; ;; Envelopes ;; ;;==========================================================================;; 0xfcff ENV PROC 0xfcff @@01: ; envelope #1 fcff ffee dcba 8642 DECLE $FFEE, $DCBA, $8642, $1000 fd02 1000 fd03 0000 0000 0000 DECLE $0000, $0000, $0000, $0000 fd06 0000 fd07 0000 0000 0000 DECLE $0000, $0000, $0000, $0000 fd0a 0000 ENDP ;;==========================================================================;; ;; Null pattern ;; ;;==========================================================================;; 0x0 NULL_P EQU 0 ;;==========================================================================;; ;; M_INTRO ;; ;; Intro ;; ;;==========================================================================;; 0xfd0b M_INTRO PROC ;;--------------------------------------------------------------------------;; ;; Header ;; ;;--------------------------------------------------------------------------;; ; speed, properties, pointers fd0b 0007 0006 fd12 DECLE 7, M_3CH OR M_TICK, @@patterns ; order of patterns fd0e 0000 0000 0001 DECLE 00, 00, 01 fd11 8000 DECLE $8000 ;;--------------------------------------------------------------------------;; ;; Detail of patterns ;; ;;--------------------------------------------------------------------------;; 0xfd12 @@patterns: fd12 0010 fd1a fd25 DECLE 16, @@p000, @@p001, @@p002 ; 00 fd15 fd29 fd16 0008 fd2a fd2c DECLE 8, @@p003, @@p004, @@p005 ; 01 fd19 fd2d ;;--------------------------------------------------------------------------;; ;; Patterns data ;; ;;--------------------------------------------------------------------------;; ; pattern #00 / channel A ;@@p000: NOTES("A#3 0C1", "A#3 0C1", "G#4 0C0", "G#4 0C1") 0xfd1a @@p000: ; fd1a 1313 DECLE _n2 * $100 + _l * $10 + (15-_v) fd1b 1313 DECLE _n2 * $100 + _l * $10 + (15-_v) fd1c 1d03 DECLE _n2 * $100 + _l * $10 + (15-_v) fd1d 1d13 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("F-4 0C2", "G-3 0C0", "G#4 0C0", "G#3 0C0") ; fd1e 1a23 DECLE _n2 * $100 + _l * $10 + (15-_v) fd1f 1003 DECLE _n2 * $100 + _l * $10 + (15-_v) fd20 1d03 DECLE _n2 * $100 + _l * $10 + (15-_v) fd21 1103 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G#4 0C0", "A-3 0C0", "A-4 0C0", "") ; fd22 1d03 DECLE _n2 * $100 + _l * $10 + (15-_v) fd23 1203 DECLE _n2 * $100 + _l * $10 + (15-_v) fd24 1e03 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #00 / channel B ;@@p001: NOTES("NUL 003", "A#2 0C2", "A#2 0C5", "A#2 0C2") 0xfd25 @@p001: ; fd25 003f DECLE _l * $10 + (15-_v) fd26 0723 DECLE _n2 * $100 + _l * $10 + (15-_v) fd27 0753 DECLE _n2 * $100 + _l * $10 + (15-_v) fd28 0723 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #00 / channel C ;@@p002: NOTES("NUL 00F", "", "", "") 0xfd29 @@p002: ; fd29 00ff DECLE _l * $10 + (15-_v) ; pattern #01 / channel A ;@@p003: NOTES("A#3 0C0", "OFF 006", "", "") 0xfd2a @@p003: ; fd2a 1303 DECLE _n2 * $100 + _l * $10 + (15-_v) fd2b 806f DECLE $8000 + _l * $10 + (15-_v) ; pattern #01 / channel B ;@@p004: NOTES("A#2 0C7", "", "", "") 0xfd2c @@p004: ; fd2c 0773 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #01 / channel C ;@@p005: NOTES("A#4 0C7", "", "", "") 0xfd2d @@p005: ; fd2d 1f73 DECLE _n2 * $100 + _l * $10 + (15-_v) ENDP ;;==========================================================================;; ;; M_GAME ;; ;; Background music during game ;; ;;==========================================================================;; 0xfd2e M_GAME PROC ;;--------------------------------------------------------------------------;; ;; Header ;; ;;--------------------------------------------------------------------------;; ; speed, properties, pointers fd2e 0007 0004 fd3e DECLE 7, M_TICK, @@patterns ; order of patterns fd31 0000 0001 0000 DECLE 00, 01, 00, 01, 02, 03, 00, 01 fd34 0001 0002 0003 0000 0001 fd39 0004 0002 0000 DECLE 04, 02, 00, 05 fd3c 0005 fd3d fff4 DECLE -12 AND $FFFF ;;--------------------------------------------------------------------------;; ;; Detail of patterns ;; ;;--------------------------------------------------------------------------;; 0xfd3e @@patterns: fd3e 0010 fd56 0000 DECLE 16, @@p000, NULL_P, NULL_P ; 00 fd41 0000 fd42 0010 fd5f 0000 DECLE 16, @@p001, NULL_P, NULL_P ; 01 fd45 0000 fd46 0010 fd69 0000 DECLE 16, @@p002, NULL_P, NULL_P ; 02 fd49 0000 fd4a 0010 fd72 0000 DECLE 16, @@p003, NULL_P, NULL_P ; 03 fd4d 0000 fd4e 0010 fd7c 0000 DECLE 16, @@p004, NULL_P, NULL_P ; 04 fd51 0000 fd52 0010 fd85 0000 DECLE 16, @@p005, NULL_P, NULL_P ; 05 fd55 0000 ;;--------------------------------------------------------------------------;; ;; Patterns data ;; ;;--------------------------------------------------------------------------;; ; pattern #00 / channel A ;@@p000: NOTES("E-2 0A1", "E-2 0A1", "E-3 0A1", "E-3 0A0") 0xfd56 @@p000: ; fd56 0115 DECLE _n2 * $100 + _l * $10 + (15-_v) fd57 0115 DECLE _n2 * $100 + _l * $10 + (15-_v) fd58 0d15 DECLE _n2 * $100 + _l * $10 + (15-_v) fd59 0d05 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("D-3 0A1", "D-3 0A0", "B-2 0A1", "D-3 0A1") ; fd5a 0b15 DECLE _n2 * $100 + _l * $10 + (15-_v) fd5b 0b05 DECLE _n2 * $100 + _l * $10 + (15-_v) fd5c 0815 DECLE _n2 * $100 + _l * $10 + (15-_v) fd5d 0b15 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("E-3 0A1", "", "", "") ; fd5e 0d15 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #01 / channel A ;@@p001: NOTES("E-2 0A1", "E-2 0A1", "E-3 0A1", "E-3 0A0") 0xfd5f @@p001: ; fd5f 0115 DECLE _n2 * $100 + _l * $10 + (15-_v) fd60 0115 DECLE _n2 * $100 + _l * $10 + (15-_v) fd61 0d15 DECLE _n2 * $100 + _l * $10 + (15-_v) fd62 0d05 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("D-3 0A1", "D-3 0A0", "B-2 0A1", "A-2 0A0") ; fd63 0b15 DECLE _n2 * $100 + _l * $10 + (15-_v) fd64 0b05 DECLE _n2 * $100 + _l * $10 + (15-_v) fd65 0815 DECLE _n2 * $100 + _l * $10 + (15-_v) fd66 0605 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A#2 0A0", "B-2 0A1", "", "") ; fd67 0705 DECLE _n2 * $100 + _l * $10 + (15-_v) fd68 0815 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #02 / channel A ;@@p002: NOTES("A-2 0A1", "A-2 0A1", "A-3 0A1", "A-3 0A0") 0xfd69 @@p002: ; fd69 0615 DECLE _n2 * $100 + _l * $10 + (15-_v) fd6a 0615 DECLE _n2 * $100 + _l * $10 + (15-_v) fd6b 1215 DECLE _n2 * $100 + _l * $10 + (15-_v) fd6c 1205 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G-3 0A1", "G-3 0A0", "E-3 0A1", "G-3 0A1") ; fd6d 1015 DECLE _n2 * $100 + _l * $10 + (15-_v) fd6e 1005 DECLE _n2 * $100 + _l * $10 + (15-_v) fd6f 0d15 DECLE _n2 * $100 + _l * $10 + (15-_v) fd70 1015 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A-3 0A1", "", "", "") ; fd71 1215 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #03 / channel A ;@@p003: NOTES("A-2 0A1", "A-2 0A1", "A-3 0A1", "A-3 0A0") 0xfd72 @@p003: ; fd72 0615 DECLE _n2 * $100 + _l * $10 + (15-_v) fd73 0615 DECLE _n2 * $100 + _l * $10 + (15-_v) fd74 1215 DECLE _n2 * $100 + _l * $10 + (15-_v) fd75 1205 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G-3 0A1", "G-3 0A0", "E-3 0A1", "D-3 0A0") ; fd76 1015 DECLE _n2 * $100 + _l * $10 + (15-_v) fd77 1005 DECLE _n2 * $100 + _l * $10 + (15-_v) fd78 0d15 DECLE _n2 * $100 + _l * $10 + (15-_v) fd79 0b05 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("D#3 0A0", "E-3 0A1", "", "") ; fd7a 0c05 DECLE _n2 * $100 + _l * $10 + (15-_v) fd7b 0d15 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #04 / channel A ;@@p004: NOTES("B-2 0A1", "B-2 0A1", "B-3 0A1", "B-3 0A0") 0xfd7c @@p004: ; fd7c 0815 DECLE _n2 * $100 + _l * $10 + (15-_v) fd7d 0815 DECLE _n2 * $100 + _l * $10 + (15-_v) fd7e 1415 DECLE _n2 * $100 + _l * $10 + (15-_v) fd7f 1405 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A-3 0A1", "A-3 0A0", "F#3 0A1", "A-3 0A1") ; fd80 1215 DECLE _n2 * $100 + _l * $10 + (15-_v) fd81 1205 DECLE _n2 * $100 + _l * $10 + (15-_v) fd82 0f15 DECLE _n2 * $100 + _l * $10 + (15-_v) fd83 1215 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("B-3 0A1", "", "", "") ; fd84 1415 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #05 / channel A ;@@p005: NOTES("E-2 0A0", "E-2 0A1", "E-2 0A0", "G#2 0A0") 0xfd85 @@p005: ; fd85 0105 DECLE _n2 * $100 + _l * $10 + (15-_v) fd86 0115 DECLE _n2 * $100 + _l * $10 + (15-_v) fd87 0105 DECLE _n2 * $100 + _l * $10 + (15-_v) fd88 0505 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G#2 0A1", "G#2 0A0", "A-2 0A0", "A-2 0A1") ; fd89 0515 DECLE _n2 * $100 + _l * $10 + (15-_v) fd8a 0505 DECLE _n2 * $100 + _l * $10 + (15-_v) fd8b 0605 DECLE _n2 * $100 + _l * $10 + (15-_v) fd8c 0615 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A-2 0A0", "A#2 0A0", "A#2 0A1", "B-2 0A0") ; fd8d 0605 DECLE _n2 * $100 + _l * $10 + (15-_v) fd8e 0705 DECLE _n2 * $100 + _l * $10 + (15-_v) fd8f 0715 DECLE _n2 * $100 + _l * $10 + (15-_v) fd90 0805 DECLE _n2 * $100 + _l * $10 + (15-_v) ENDP ;;==========================================================================;; ;; M_LEVEL ;; ;; Played at intermediate checkpoints ;; ;;==========================================================================;; 0xfd91 M_LEVEL PROC ;;--------------------------------------------------------------------------;; ;; Header ;; ;;--------------------------------------------------------------------------;; ; speed, properties, pointers fd91 0008 0001 fd96 DECLE 8, M_DUP, @@patterns ; order of patterns fd94 0000 DECLE 00 fd95 8000 DECLE $8000 ;;--------------------------------------------------------------------------;; ;; Detail of patterns ;; ;;--------------------------------------------------------------------------;; 0xfd96 @@patterns: fd96 0020 fd9a 0000 DECLE 32, @@p000, NULL_P, NULL_P ; 00 fd99 0000 ; pattern #00 / channel A ;@@p000: NOTES("A#3 0C0", "F-4 0C0", "A#4 0C0", "D#4 0C0") 0xfd9a @@p000: ; fd9a 1303 DECLE _n2 * $100 + _l * $10 + (15-_v) fd9b 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fd9c 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fd9d 1803 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G-4 0C0", "A#4 0C0", "F-4 0C0", "A-4 0C0") ; fd9e 1c03 DECLE _n2 * $100 + _l * $10 + (15-_v) fd9f 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fda0 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fda1 1e03 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("C-5 0C0", "A#4 0C0", "A-4 0C0", "F-4 0C0") ; fda2 2103 DECLE _n2 * $100 + _l * $10 + (15-_v) fda3 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fda4 1e03 DECLE _n2 * $100 + _l * $10 + (15-_v) fda5 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A#3 0C0", "F-4 0C0", "A#4 0C0", "D#4 0C0") ; fda6 1303 DECLE _n2 * $100 + _l * $10 + (15-_v) fda7 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fda8 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fda9 1803 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G-4 0C0", "A#4 0C0", "F-4 0C0", "A-4 0C0") ; fdaa 1c03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdab 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdac 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdad 1e03 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("C-5 0C0", "A#3 0CA", "", "") ; fdae 2103 DECLE _n2 * $100 + _l * $10 + (15-_v) fdaf 13a3 DECLE _n2 * $100 + _l * $10 + (15-_v) ENDP ;;==========================================================================;; ;; M_COURS ;; ;; Played at checkpoint Z ;; ;;==========================================================================;; 0xfdb0 M_COURS PROC ;;--------------------------------------------------------------------------;; ;; Header ;; ;;--------------------------------------------------------------------------;; ; speed, properties, pointers fdb0 0009 0001 fdb8 DECLE 9, M_DUP, @@patterns ; order of patterns fdb3 0000 0001 0000 DECLE 00, 01, 00, 02 fdb6 0002 fdb7 8000 DECLE $8000 ;;--------------------------------------------------------------------------;; ;; Detail of patterns ;; ;;--------------------------------------------------------------------------;; 0xfdb8 @@patterns: fdb8 0010 fdc4 0000 DECLE 16, @@p000, NULL_P, NULL_P ; 00 fdbb 0000 fdbc 0008 fdd4 0000 DECLE 8, @@p001, NULL_P, NULL_P ; 01 fdbf 0000 fdc0 0010 fdda 0000 DECLE 16, @@p002, NULL_P, NULL_P ; 02 fdc3 0000 ;;--------------------------------------------------------------------------;; ;; Patterns data ;; ;;--------------------------------------------------------------------------;; ; pattern #00 / channel A ;@@p000: NOTES("A#3 0C0", "F-4 0C0", "A#4 0C0", "D-5 0C0") 0xfdc4 @@p000: ; fdc4 1303 DECLE _n2 * $100 + _l * $10 + (15-_v) fdc5 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdc6 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdc7 2303 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A#4 0C0", "F-4 0C0", "D#5 0C0", "A#4 0C0") ; fdc8 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdc9 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdca 2403 DECLE _n2 * $100 + _l * $10 + (15-_v) fdcb 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("F-4 0C0", "F-5 0C0", "A#4 0C0", "F-4 0C0") ; fdcc 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdcd 2603 DECLE _n2 * $100 + _l * $10 + (15-_v) fdce 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdcf 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A#3 0C0", "F-4 0C0", "A#4 0C0", "D-5 0C0") ; fdd0 1303 DECLE _n2 * $100 + _l * $10 + (15-_v) fdd1 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdd2 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdd3 2303 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #01 / channel A ;@@p001: NOTES("A#4 0C0", "F-4 0C0", "A#4 0C0", "A-4 0C0") 0xfdd4 @@p001: ; fdd4 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdd5 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdd6 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdd7 1e03 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G-4 0C0", "F-4 0C2", "", "") ; fdd8 1c03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdd9 1a23 DECLE _n2 * $100 + _l * $10 + (15-_v) ; pattern #02 / channel A ;@@p002: NOTES("A#4 0C0", "F-4 0C0", "F-3 0C0", "G-3 0C0") 0xfdda @@p002: ; fdda 1f03 DECLE _n2 * $100 + _l * $10 + (15-_v) fddb 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fddc 0e03 DECLE _n2 * $100 + _l * $10 + (15-_v) fddd 1003 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("A-3 0C0", "A#3 0CA", "", "") ; fdde 1203 DECLE _n2 * $100 + _l * $10 + (15-_v) fddf 13a3 DECLE _n2 * $100 + _l * $10 + (15-_v) ENDP ;;==========================================================================;; ;; M_OVER ;; ;; Game Over ;; ;;==========================================================================;; 0xfde0 M_OVER PROC ;;--------------------------------------------------------------------------;; ;; Header ;; ;;--------------------------------------------------------------------------;; ; speed, properties, pointers fde0 0009 0001 fde5 DECLE 9, M_DUP, @@patterns ; order of patterns fde3 0000 DECLE 00 fde4 8000 DECLE $8000 ;;--------------------------------------------------------------------------;; ;; Detail of patterns ;; ;;--------------------------------------------------------------------------;; 0xfde5 @@patterns: fde5 0010 fde9 0000 DECLE 16, @@p000, NULL_P, NULL_P ; 00 fde8 0000 ;;--------------------------------------------------------------------------;; ;; Patterns data ;; ;;--------------------------------------------------------------------------;; ; pattern #00 / channel A ;@@p000: NOTES("A#3 0C0", "D-4 0C0", "F-4 0C0", "G#4 0C1") 0xfde9 @@p000: ; fde9 1303 DECLE _n2 * $100 + _l * $10 + (15-_v) fdea 1703 DECLE _n2 * $100 + _l * $10 + (15-_v) fdeb 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdec 1d13 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G#4 0C0", "G-4 0C0", "F-4 0C0", "G#3 0C0") ; fded 1d03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdee 1c03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdef 1a03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdf0 1103 DECLE _n2 * $100 + _l * $10 + (15-_v) ; NOTES("G#4 0C0", "A-3 0C0", "A-4 0C0", "A#3 0C3") ; fdf1 1d03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdf2 1203 DECLE _n2 * $100 + _l * $10 + (15-_v) fdf3 1e03 DECLE _n2 * $100 + _l * $10 + (15-_v) fdf4 1333 DECLE _n2 * $100 + _l * $10 + (15-_v) ENDP 0x26f _SFX.size EQU $ - _SFX 0xfdf5 _SCTBL EQU $ INCLUDE "genasm/sctbl.asm" ;; Generated by SCTC 0xfdf5 SCTBL PROC ;; top-level SCTBL 0xfdf5 @@top: fdf5 0005 000d fe15 @@00 DECLE $0005, $000D, @@dxt_00, @@dyt_00 fdf8 fe65 fdf9 0005 000f fe2c @@01 DECLE $0005, $000F, @@dxt_01, @@dyt_01 fdfc fe72 fdfd 0006 000e fe47 @@02 DECLE $0006, $000E, @@dxt_02, @@dyt_02 fe00 fe89 fe01 0008 000f fe56 @@03 DECLE $0008, $000F, @@dxt_03, @@dyt_03 fe04 fe96 fe05 000a 000a fe15 @@04 DECLE $000A, $000A, @@dxt_00, @@dyt_01 fe08 fe72 fe09 000c 000b fe2c @@05 DECLE $000C, $000B, @@dxt_01, @@dyt_02 fe0c fe89 fe0d 000e 0010 fe56 @@06 DECLE $000E, $0010, @@dxt_03, @@dyt_00 fe10 fe65 fe11 0010 0011 fe47 @@07 DECLE $0010, $0011, @@dxt_02, @@dyt_03 fe14 fe96 ;; DXT table #0 0xfe15 @@dxt_00: fe15 1500 65ff 000a DECLE $1500, $65FF, 10 fe18 0a20 0a00 DECLE ($0A SHL 8) + ($20), $0A00 fe1a 1223 13b0 DECLE ($12 SHL 8) + ($23), $13B0 fe1c 1332 1db0 DECLE ($13 SHL 8) + ($32), $1DB0 fe1e 1430 1e00 DECLE ($14 SHL 8) + ($30), $1E00 fe20 1c2d 2760 DECLE ($1C SHL 8) + ($2D), $2760 fe22 1d37 31d8 DECLE ($1D SHL 8) + ($37), $31D8 fe24 1e35 31b0 DECLE ($1E SHL 8) + ($35), $31B0 fe26 1c39 31e0 DECLE ($1C SHL 8) + ($39), $31E0 fe28 263a 44e0 DECLE ($26 SHL 8) + ($3A), $44E0 fe2a 2840 5000 DECLE ($28 SHL 8) + ($40), $5000 ;; DXT table #1 0xfe2c @@dxt_01: fe2c 1f00 5bff 000c DECLE $1F00, $5BFF, 12 fe2f 0d31 13e8 DECLE ($0D SHL 8) + ($31), $13E8 fe31 122c 18c0 DECLE ($12 SHL 8) + ($2C), $18C0 fe33 1332 1db0 DECLE ($13 SHL 8) + ($32), $1DB0 fe35 1430 1e00 DECLE ($14 SHL 8) + ($30), $1E00 fe37 1c2d 2760 DECLE ($1C SHL 8) + ($2D), $2760 fe39 1d2e 29b0 DECLE ($1D SHL 8) + ($2E), $29B0 fe3b 1e30 2d00 DECLE ($1E SHL 8) + ($30), $2D00 fe3d 1f33 3168 DECLE ($1F SHL 8) + ($33), $3168 fe3f 2636 4020 DECLE ($26 SHL 8) + ($36), $4020 fe41 2739 4578 DECLE ($27 SHL 8) + ($39), $4578 fe43 2840 5000 DECLE ($28 SHL 8) + ($40), $5000 fe45 2840 5000 DECLE ($28 SHL 8) + ($40), $5000 ;; DXT table #2 0xfe47 @@dxt_02: fe47 1900 79ff 0006 DECLE $1900, $79FF, 6 fe4a 0a23 0af0 DECLE ($0A SHL 8) + ($23), $0AF0 fe4c 1e23 20d0 DECLE ($1E SHL 8) + ($23), $20D0 fe4e 292d 39a8 DECLE ($29 SHL 8) + ($2D), $39A8 fe50 2a3c 4ec0 DECLE ($2A SHL 8) + ($3C), $4EC0 fe52 2b42 58b0 DECLE ($2B SHL 8) + ($42), $58B0 fe54 2d40 5a00 DECLE ($2D SHL 8) + ($40), $5A00 ;; DXT table #3 0xfe56 @@dxt_03: fe56 0400 8bff 0006 DECLE $0400, $8BFF, 6 fe59 2332 36b0 DECLE ($23 SHL 8) + ($32), $36B0 fe5b 2339 3e58 DECLE ($23 SHL 8) + ($39), $3E58 fe5d 243f 46e0 DECLE ($24 SHL 8) + ($3F), $46E0 fe5f 2941 5348 DECLE ($29 SHL 8) + ($41), $5348 fe61 2a51 6a50 DECLE ($2A SHL 8) + ($51), $6A50 fe63 2b4a 6370 DECLE ($2B SHL 8) + ($4A), $6370 ;; DYT table #0 0xfe65 @@dyt_00: fe65 1000 29ff 0005 DECLE $1000, $29FF, 5 fe68 0420 0400 DECLE ($04 SHL 8) + ($20), $0400 fe6a 0519 03e8 DECLE ($05 SHL 8) + ($19), $03E8 fe6c 072d 09d8 DECLE ($07 SHL 8) + ($2D), $09D8 fe6e 0828 0a00 DECLE ($08 SHL 8) + ($28), $0A00 fe70 0a26 0be0 DECLE ($0A SHL 8) + ($26), $0BE0 ;; DYT table #1 0xfe72 @@dyt_01: fe72 0600 1fff 000a DECLE $0600, $1FFF, 10 fe75 0418 0300 DECLE ($04 SHL 8) + ($18), $0300 fe77 0418 0300 DECLE ($04 SHL 8) + ($18), $0300 fe79 0519 03e8 DECLE ($05 SHL 8) + ($19), $03E8 fe7b 0520 0500 DECLE ($05 SHL 8) + ($20), $0500 fe7d 0520 0500 DECLE ($05 SHL 8) + ($20), $0500 fe7f 0720 0700 DECLE ($07 SHL 8) + ($20), $0700 fe81 0729 08f8 DECLE ($07 SHL 8) + ($29), $08F8 fe83 0828 0a00 DECLE ($08 SHL 8) + ($28), $0A00 fe85 082c 0b00 DECLE ($08 SHL 8) + ($2C), $0B00 fe87 0a26 0be0 DECLE ($0A SHL 8) + ($26), $0BE0 ;; DYT table #2 0xfe89 @@dyt_02: fe89 0700 16ff 0005 DECLE $0700, $16FF, 5 fe8c 0320 0300 DECLE ($03 SHL 8) + ($20), $0300 fe8e 0428 0500 DECLE ($04 SHL 8) + ($28), $0500 fe90 0630 0900 DECLE ($06 SHL 8) + ($30), $0900 fe92 0438 0700 DECLE ($04 SHL 8) + ($38), $0700 fe94 0448 0900 DECLE ($04 SHL 8) + ($48), $0900 ;; DYT table #3 0xfe96 @@dyt_03: fe96 0600 1cff 0006 DECLE $0600, $1CFF, 6 fe99 0834 0d00 DECLE ($08 SHL 8) + ($34), $0D00 fe9b 0720 0700 DECLE ($07 SHL 8) + ($20), $0700 fe9d 0820 0800 DECLE ($08 SHL 8) + ($20), $0800 fe9f 0724 07e0 DECLE ($07 SHL 8) + ($24), $07E0 fea1 0513 02f8 DECLE ($05 SHL 8) + ($13), $02F8 fea3 0d29 10a8 DECLE ($0D SHL 8) + ($29), $10A8 ENDP 0xb0 _SCTBL.size EQU $ - _SCTBL 0xfea5 _POW10 EQU $ INCLUDE "util/pow10.asm" ;; ======================================================================== ;; ;; _PW10 ;; ;; Lookup table holding the first 5 powers of 10 (1 thru 10000) as ;; ;; 16-bit numbers. ;; ;; ======================================================================== ;; 0xfea5 _PW10 PROC ; 0 thru 10000 fea5 2710 03e8 0064 DECLE 10000, 1000, 100, 10, 1; 0 fea8 000a 0001 ENDP 0x5 _POW10.size EQU $ - _POW10 IF ($ < $F000) OR ($ > $10000) ERR "F000 overflow" ENDI 0xfeaa _F000.end EQU $ feaa ffff feab ffff feac ffff fead ffff feae ffff feaf ffff feb0 ffff feb1 ffff feb2 ffff feb3 ffff feb4 ffff feb5 ffff feb6 ffff feb7 ffff feb8 ffff feb9 ffff feba ffff febb ffff febc ffff febd ffff febe ffff febf ffff fec0 ffff fec1 ffff fec2 ffff fec3 ffff fec4 ffff fec5 ffff fec6 ffff fec7 ffff fec8 ffff fec9 ffff feca ffff fecb ffff fecc ffff fecd ffff fece ffff fecf ffff fed0 ffff fed1 ffff fed2 ffff fed3 ffff fed4 ffff fed5 ffff fed6 ffff fed7 ffff fed8 ffff fed9 ffff feda ffff fedb ffff fedc ffff fedd ffff fede ffff fedf ffff fee0 ffff fee1 ffff fee2 ffff fee3 ffff fee4 ffff fee5 ffff fee6 ffff fee7 ffff fee8 ffff fee9 ffff feea ffff feeb ffff feec ffff feed ffff feee ffff feef ffff fef0 ffff fef1 ffff fef2 ffff fef3 ffff fef4 ffff fef5 ffff fef6 ffff fef7 ffff fef8 ffff fef9 ffff fefa ffff fefb ffff fefc ffff fefd ffff fefe ffff feff ffff ff00 ffff ff01 ffff ff02 ffff ff03 ffff ff04 ffff ff05 ffff ff06 ffff ff07 ffff ff08 ffff ff09 ffff ff0a ffff ff0b ffff ff0c ffff ff0d ffff ff0e ffff ff0f ffff ff10 ffff ff11 ffff ff12 ffff ff13 ffff ff14 ffff ff15 ffff ff16 ffff ff17 ffff ff18 ffff ff19 ffff ff1a ffff ff1b ffff ff1c ffff ff1d ffff ff1e ffff ff1f ffff ff20 ffff ff21 ffff ff22 ffff ff23 ffff ff24 ffff ff25 ffff ff26 ffff ff27 ffff ff28 ffff ff29 ffff ff2a ffff ff2b ffff ff2c ffff ff2d ffff ff2e ffff ff2f ffff ff30 ffff ff31 ffff ff32 ffff ff33 ffff ff34 ffff ff35 ffff ff36 ffff ff37 ffff ff38 ffff ff39 ffff ff3a ffff ff3b ffff ff3c ffff ff3d ffff ff3e ffff ff3f ffff ff40 ffff ff41 ffff ff42 ffff ff43 ffff ff44 ffff ff45 ffff ff46 ffff ff47 ffff ff48 ffff ff49 ffff ff4a ffff ff4b ffff ff4c ffff ff4d ffff ff4e ffff ff4f ffff ff50 ffff ff51 ffff ff52 ffff ff53 ffff ff54 ffff ff55 ffff ff56 ffff ff57 ffff ff58 ffff ff59 ffff ff5a ffff ff5b ffff ff5c ffff ff5d ffff ff5e ffff ff5f ffff ff60 ffff ff61 ffff ff62 ffff ff63 ffff ff64 ffff ff65 ffff ff66 ffff ff67 ffff ff68 ffff ff69 ffff ff6a ffff ff6b ffff ff6c ffff ff6d ffff ff6e ffff ff6f ffff ff70 ffff ff71 ffff ff72 ffff ff73 ffff ff74 ffff ff75 ffff ff76 ffff ff77 ffff ff78 ffff ff79 ffff ff7a ffff ff7b ffff ff7c ffff ff7d ffff ff7e ffff ff7f ffff ff80 ffff ff81 ffff ff82 ffff ff83 ffff ff84 ffff ff85 ffff ff86 ffff ff87 ffff ff88 ffff ff89 ffff ff8a ffff ff8b ffff ff8c ffff ff8d ffff ff8e ffff ff8f ffff ff90 ffff ff91 ffff ff92 ffff ff93 ffff ff94 ffff ff95 ffff ff96 ffff ff97 ffff ff98 ffff ff99 ffff ff9a ffff ff9b ffff ff9c ffff ff9d ffff ff9e ffff ff9f ffff ffa0 ffff ffa1 ffff ffa2 ffff ffa3 ffff ffa4 ffff ffa5 ffff ffa6 ffff ffa7 ffff ffa8 ffff ffa9 ffff ffaa ffff ffab ffff ffac ffff ffad ffff ffae ffff ffaf ffff ffb0 ffff ffb1 ffff ffb2 ffff ffb3 ffff ffb4 ffff ffb5 ffff ffb6 ffff ffb7 ffff ffb8 ffff ffb9 ffff ffba ffff ffbb ffff ffbc ffff ffbd ffff ffbe ffff ffbf ffff ffc0 ffff ffc1 ffff ffc2 ffff ffc3 ffff ffc4 ffff ffc5 ffff ffc6 ffff ffc7 ffff ffc8 ffff ffc9 ffff ffca ffff ffcb ffff ffcc ffff ffcd ffff ffce ffff ffcf ffff ffd0 ffff ffd1 ffff ffd2 ffff ffd3 ffff ffd4 ffff ffd5 ffff ffd6 ffff ffd7 ffff ffd8 ffff ffd9 ffff ffda ffff ffdb ffff ffdc ffff ffdd ffff ffde ffff ffdf ffff ffe0 ffff ffe1 ffff ffe2 ffff ffe3 ffff ffe4 ffff ffe5 ffff ffe6 ffff ffe7 ffff ffe8 ffff ffe9 ffff ffea ffff ffeb ffff ffec ffff ffed ffff ffee ffff ffef ffff fff0 ffff fff1 ffff fff2 ffff fff3 ffff fff4 ffff fff5 ffff fff6 ffff fff7 ffff fff8 ffff fff9 ffff fffa ffff fffb ffff fffc ffff fffd ffff fffe ffff ffff ffff ;; ======================================================================== ;; ;; ROM HEADER ;; ;; ======================================================================== ;; 0x5000 ORG $5000 ; Standard Mattel cartridge memory map 0x5000 _TOPLEV EQU $ ;; ------------------------------------------------------------------------ ;; 5000 0000 0000 ROMHDR: WORD $0000 ; RTAB (ignored) 5002 0001 0000 DECLE $01,$00 ; Movable object data (ignored) 5004 00a8 006d WORD START ; Program start address (ignored) 5006 0000 0000 WORD $0000 ; Background graphics 5008 0002 0050 WORD ROMHDR + 2 ; Card table -- stored above in header. :-) 500a 008b 006d WORD TITLE ; Title string. 500c 03c0 DECLE $3C0 ; run title code, clicks off, INTY2 on, no ECS ; DECLE $00 ; -> to STIC $32 ; DECLE $00 ; 0 = color stack, 1 = f/b mode ; DECLE 0, 0, 0, 0 ; color stack elements 1 - 4 ; DECLE $00 ; border color ;; ------------------------------------------------------------------------ ;; 0xd _TOPLEV.size EQU $ - _TOPLEV ;;==========================================================================;; ;; MAJOR SUBSYSTEMS AND SUPPORT CODE ;; ;;==========================================================================;; 0x500d _BGMP EQU $ INCLUDE "bg/bgthink.asm" ;; ======================================================================== ;; ;; Bad guy thinker routines ;; ;; ;; ;; These are called when their timers expire. Timers are counted down ;; ;; at a 30Hz rate. ;; ;; ;; ;; Thinkers have 2 bytes of state at their disposal, and can call BGRAND, ;; ;; which returns a predictable hash of level-offset, elapsed time, R1, R3. ;; ;; The first byte of state is initialized when the bad-guy is spawned. ;; ;; The intended use of this bytes is to specify "aggressiveness" and ;; ;; "evasiveness." Aggressiveness is how often the bad-guy fires. ;; ;; Evasiveness is how much the bad guy tries to stay away from the tank. ;; ;; ;; ;; Thinkers: ;; ;; ;; ;; BGT_SAUCxx -- saucer flight programs. ;; ;; BGT_BOULDER -- rolling boulder program (set hscroll, roll) ;; ;; BGT_TURRET -- turret firing program (set hscroll, fire) ;; ;; BGT_MINE -- Land mine: (set hscroll, blink randomly) ;; ;; BGT_PLANT -- space-plant program: duck up/down randomly ;; ;; ;; ;; Support (implemented): ;; ;; ;; ;; BGRAND -- predictable RAND ;; ;; BGBRAND -- predictable RAND, bounded by R2 ;; ;; BGFIRE -- make a bad guy fire ;; ;; BGKILL -- remove bad guy from list of bad guys ;; ;; ;; ;; Support (todo -- maybe won't bother): ;; ;; ;; ;; BGSETHS -- Set horiz-scroll bit for this bad-guy ;; ;; BGSETVEL -- Set velocity for this bad-guy ;; ;; BGSETATTR -- Set attribute number for this bad-guy ;; ;; ;; ;; The thinkers are called with R1 == slot #, R3 == state pointer. ;; ;; R0, R2, R4 are available as scratch. ;; ;; ;; ;; Thinkers return with delay in R0. ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; BGRAND -- A purposefully not-very-random random. The LSBs are the ;; ;; only useful bits. ;; ;; ======================================================================== ;; 0x500d BGRAND PROC 500d 0280 0338 MVI RCIDX, R0 ; mix in rock/crater/spawn index 500f 00d8 ADDR R3, R0 ; add BGMPTBL pointer 5010 01c8 XORR R1, R0 ; mix in slot number 5011 02c0 0168 ADD TIMSEC, R0 ; add time in seconds. 5013 00af JR R5 ENDP ;; ======================================================================== ;; ;; BGBRAND -- Like BGRAND, only bounded to the range specified in R2. ;; ;; ======================================================================== ;; 0x5014 BGBRAND PROC 5014 01c0 CLRR R0 5015 0150 CMPR R2, R0 5016 0204 0017 BEQ @@leave 5018 0007 @@l1 SETC 5019 0050 RLC R0, 1 501a 0150 CMPR R2, R0 501b 0229 0004 BNC @@l1 ; add a couple extra bits to mask. ; this hopefully reduces the bias we give to certain numbers ; with our crappy modulo technique. 501d 005c SLLC R0, 2 501e 02f8 0003 ADDI #3, R0 5020 0270 PSHR R0 5021 0280 0338 MVI RCIDX, R0 ; mix in rock/crater/spawn index 5023 00d8 ADDR R3, R0 ; add BGMPTBL pointer 5024 01c8 XORR R1, R0 ; mix in slot number 5025 02c0 0168 ADD TIMSEC, R0 ; add time in seconds. 5027 0270 PSHR R0 ;\ 5028 0040 SWAP R0 ; |-- fold upper, lower halves 5029 03f0 XOR@ R6, R0 ;/ 502a 03b0 AND@ R6, R0 ; mask approximately into range. 502b 0110 @@l2 SUBR R2, R0 502c 0223 0002 BPL @@l2 502e 00d0 ADDR R2, R0 0x502f @@leave: 502f 00af JR R5 ENDP ;; ======================================================================== ;; ;; BGT_TURRET0: Set horiz scroll, then set thinker to fire program. ;; ;; ======================================================================== ;; 0x5030 BGT_TURRET0 PROC ;; ------------------------------------------------------------ ;; ;; Set up thinker for turret to just fire occasionally. ;; ;; ------------------------------------------------------------ ;; 5030 02b8 000f MVII #BGI.turret1, R0 5032 0200 0011 B BG_SETTHINK ENDP ;; ======================================================================== ;; ;; BGT_BOULDER0: Set horiz scroll + left vel, then set thinker to roller. ;; ;; ======================================================================== ;; 0x5034 BGT_BOULDER0 PROC ;; ------------------------------------------------------------ ;; ;; Set up boulder to have some leftward velocity in addition ;; ;; to what hscroll will give us. ;; ;; ------------------------------------------------------------ ;; 5034 008a MOVR R1, R2 5035 00ca ADDR R1, R2 5036 02fa 0308 ADDI #SPXYV, R2 5038 02b8 a8ff MVII #$A8FF, R0 503a 0250 MVO@ R0, R2 ; Set up thinker for boulder to just animate. 503b 02b8 0004 MVII #BGI.boulder1, R0 503d 0200 0006 B BG_SETTHINK ENDP ;; ======================================================================== ;; ;; BGT_PLANT0: Set horizontal-scroll, and then set ducker as thinker. ;; ;; ======================================================================== ;; 0x503f BGT_PLANT0 PROC 503f 02b8 0009 MVII #BGI.plant1, R0 5041 0200 0002 B BG_SETTHINK ENDP ;; ======================================================================== ;; ;; BGT_MINE0: Set horizontal-scroll, and then set blinker as thinker. ;; ;; ======================================================================== ;; 0x5043 BGT_MINE0 PROC ;; ------------------------------------------------------------ ;; ;; The mines just blink after they've been set h-scroll. ;; ;; ------------------------------------------------------------ ;; 5043 02b8 0007 MVII #BGI.mine1, R0 ; Get address of main thinker ; B BG_SETTHINK ; XXX: fall through to BG_SETTHINK ENDP ;; ======================================================================== ;; ;; BG_SETTHINK ;; ;; This changes the thinker for the bad-guy in R1. ;; ;; R3 is expected to point to offset 3 in the BGMPTBL record (the first ;; ;; "status" byte). ;; ;; ======================================================================== ;; 0x5045 BG_SETTHINK PROC ;; ------------------------------------------------------------ ;; ;; Set the thinker-pointer for this bad-guy. ;; ;; ------------------------------------------------------------ ;; 5045 033b 0002 SUBI #2, R3 ; Rewind to program pointer 5047 0258 @@1: MVO@ R0, R3 ; Set thinker to R0 5048 02fb 0002 ADDI #2, R3 ; Restore R3 ;; ------------------------------------------------------------ ;; ;; Return a delay of 1 + (slot >> 1) for this MOB to stagger ;; ;; the thinking out over multiple frames. This should help ;; ;; stagger boulders/mines that cue as a group. ;; ;; ------------------------------------------------------------ ;; 504a 0088 MOVR R1, R0 504b 0060 SLR R0, 1 504c 0008 INCR R0 504d 0200 10df B BGT_RET ENDP ;; ======================================================================== ;; ;; BGT_MINE1: Just blink pseudo-randomly. ;; ;; ======================================================================== ;; 0x504f BGT_MINE1 PROC 504f 0004 0150 000d CALL BGRAND ; random number to R0 5052 02d8 ADD@ R3, R0 ; Get status byte 1 5053 0258 MVO@ R0, R3 5054 0078 SARC R0 ; Set Red/White based on lsb of status byte. 5055 0270 PSHR R0 ; 5056 02b8 00a1 MVII #SPATBL.lmna, R0 5058 0201 0002 BC @@not1 505a 02b8 00a5 MVII #SPATBL.lmnb, R0 0x505c @@not1: 505c 02ba 0140 MVII #SPAT, R2 ; 505e 00ca ADDR R1, R2 ; 505f 0250 MVO@ R0, R2 5060 02b0 PULR R0 ; delay randomly from 4 to 11 5061 03b8 0007 ANDI #7, R0 5063 02f8 0004 ADDI #4, R0 5065 0200 10c7 B BGT_RET ENDP ;; ======================================================================== ;; ;; BGT_PLANT1: Just duck pseudo-randomly. ;; ;; ======================================================================== ;; 0x5067 BGT_PLANT1 PROC 5067 02ba 0140 MVII #SPAT, R2 ; 5069 00ca ADDR R1, R2 ; 506a 0290 MVI@ R2, R0 506b 0378 00a9 CMPI #SPATBL.plta, R0 506d 0204 0014 BEQ @@pltb 506f 0378 00ad CMPI #SPATBL.pltb, R0 5071 0204 000c BEQ @@plta 5073 0378 00b1 CMPI #SPATBL.pltc, R0 5075 0204 0004 BEQ @@pltd 5077 02b8 00b1 @@pltc MVII #SPATBL.pltc, R0 5079 0200 000a B @@done 507b 02b8 00b5 @@pltd MVII #SPATBL.pltd, R0 507d 0200 0006 B @@done 507f 02b8 00a9 @@plta MVII #SPATBL.plta, R0 5081 0200 0002 B @@done 5083 02b8 00ad @@pltb MVII #SPATBL.pltb, R0 0x5085 @@done: 5085 0250 MVO@ R0, R2 5086 0004 0150 000d CALL BGRAND ; random number to R0 5089 02d8 ADD@ R3, R0 ; Get status byte 1 508a 0258 MVO@ R0, R3 ; delay randomly from 5 to 12 508b 03b8 0007 ANDI #7, R0 508d 02f8 0005 ADDI #5, R0 508f 0200 109d B BGT_RET ENDP ;; ======================================================================== ;; ;; BGT_TURRET1 -- turret firing program ;; ;; ======================================================================== ;; 0x5091 BGT_TURRET1 PROC 5091 0298 MVI@ R3, R0 5092 0080 TSTR R0 5093 0204 0005 BEQ @@not_1st 5095 02b8 000f @@1st MVII #15, R0 ; First time 'round, wait 16 tics 5097 0258 MVO@ R0, R3 ; Initialize flag saying "not 1st" 5098 0200 1094 B BGT_RET 0x509a @@not_1st: ; 2nd and subsequent times, 509a 0280 0111 MVI HBCOL1, R0 509c 0048 SLL R0, 1 509d 0204 000c BEQ @@ok_fire 509f 02f8 0008 ADDI #8, R0 50a1 008a MOVR R1, R2 50a2 004a SLL R2, 1 50a3 02fa 0320 ADDI #SPXYP, R2 50a5 0294 MVI@ R2, R4 50a6 03bc 00ff ANDI #$FF, R4 50a8 0144 CMPR R0, R4 50a9 0205 0003 BLT @@no_fire ; don't fire -- bullet too close 50ab 0004 0160 0137 @@ok_fire CALL BGFIRE.c ; fire every 45 tics. 50ae 02b8 002c @@no_fire MVII #44, R0 50b0 0200 107c B BGT_RET ENDP ;; ======================================================================== ;; ;; BGT_STAL0 -- Stalactite: Shudder when nearing fall point. ;; ;; ======================================================================== ;; 0x50b2 BGT_STAL0 PROC 50b2 008a MOVR R1, R2 50b3 004a SLL R2, 1 50b4 02fa 0320 ADDI #SPXYP, R2 50b6 0294 MVI@ R2, R4 50b7 033c 0010 SUBI #16, R4 50b9 03bc 00ff ANDI #$FF, R4 50bb 01c0 CLRR R0 50bc 035c CMP@ R3, R4 50bd 020e 106f BGT BGT_RET 50bf 02b8 00e1 MVII #SPATBL.stala, R0 50c1 02bc 0013 MVII #BGI.stal1, R4 50c3 02ba 0140 @@1: MVII #SPAT, R2 50c5 00ca ADDR R1, R2 50c6 0250 MVO@ R0, R2 50c7 009a MOVR R3, R2 50c8 033a 0002 SUBI #2, R2 50ca 0254 MVO@ R4, R2 50cb 01c0 CLRR R0 50cc 0200 1060 B BGT_RET ENDP ;; ======================================================================== ;; ;; BGT_STAL1 -- Stalactite: Fall once X gets below state byte 1. ;; ;; Then go to STAL2, which is for accel and landing. ;; ;; ======================================================================== ;; 0x50ce BGT_STAL1 PROC 50ce 008a MOVR R1, R2 50cf 004a SLL R2, 1 50d0 02fa 0320 ADDI #SPXYP, R2 50d2 0294 MVI@ R2, R4 50d3 03bc 00ff ANDI #$FF, R4 50d5 01c0 CLRR R0 50d6 035c CMP@ R3, R4 50d7 020e 1055 BGT BGT_RET 50d9 02b8 00dd MVII #SPATBL.stal, R0 50db 02bc 0014 MVII #BGI.stal2, R4 50dd 0220 001b B BGT_STAL0.1 ENDP ;; ======================================================================== ;; ;; BGT_STAL2 -- Fall, and then stick in the ground once we get there. ;; ;; ======================================================================== ;; 0x50df BGT_STAL2 PROC 50df 008a MOVR R1, R2 ; 50e0 004a SLL R2, 1 ; 50e1 02fa 0321 ADDI #SPXYP+1, R2 ; \ 50e3 0290 MVI@ R2, R0 ; |_ Are we on the ground yet? 50e4 0040 SWAP R0 ; | 50e5 0378 4500 CMPI #$4500, R0 ; / 50e7 020d 000a BGE @@hit 50e9 02fa ffe8 ADDI #SPXYV-SPXYP,R2 ; 50eb 0294 MVI@ R2, R4 ; \ 50ec 02fc 4000 ADDI #$4000, R4 ; |_ accelerate by $00.40 50ee 002c ADCR R4 ; | 50ef 0254 MVO@ R4, R2 ; / 50f0 01c0 CLRR R0 50f1 0200 103b B BGT_RET 0x50f3 @@hit 50f3 02b8 004a MVII #$4A, R0 ; \_ stick in the ground 50f5 0250 MVO@ R0, R2 ; / 50f6 02fa ffe8 ADDI #SPXYV-SPXYP,R2 ; 50f8 01c0 CLRR R0 ; \_ zero out our velocity 50f9 0250 MVO@ R0, R2 ; / 50fa 02ba 0140 MVII #SPAT, R2 ; 50fc 00ca ADDR R1, R2 ; 50fd 02b8 00e9 MVII #SPATBL.stalf, R0 ; \_ Set prio so we're behind 50ff 0250 MVO@ R0, R2 ; / the ground ; PSHR R1 5100 0004 0168 035c CALL PLAYSFX 5103 0002 DECLE FXSMEXP ; PULR R1 5104 02b8 0004 MVII #BGI.null, R0 5106 0220 00c2 B BG_SETTHINK ENDP ;; ======================================================================== ;; ;; See 'bgsaucer.asm' for the Pink/Blue/White saucer motion programs. ;; ;; ======================================================================== ;; ;__ INCLUDE "bg/bgsaucer.asm" ;; ======================================================================== ;; ;; Bad guy thinker routines for saucer ;; ;; I broke these out into a separate file since they're so involved. ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; SCTBL -- Saucer control table. ;; ;; ;; ;; Saucer Control Table Format ;; ;; ;; ;; Top level is a series of 4-word records. Each record contains ;; ;; ;; ;; -- Magnitude of random component for bullet fire delay. ;; ;; -- Minimum delay between bullet fire ;; ;; -- Pointer to Delta-X table ;; ;; -- Pointer to Delta-Y table ;; ;; ;; ;; Delta-X table consists of a 3-word header followed by a series of ;; ;; 2-word entries. ;; ;; ;; ;; DXT header: ;; ;; -- Minimum X coordinate, in 8Q8 ;; ;; -- Maximum X coordinate, in 8Q8 ;; ;; -- Number of entries in table ;; ;; ;; ;; DXT entry: ;; ;; -- Rightward velocity in lower byte of first word (biased 2Q6) ;; ;; -- Number of ticks in upper byte of first word. ;; ;; -- Total delta-X for this motion, in 8Q8 ;; ;; ;; ;; Delta-Y table format is identical to Delta-X table. ;; ;; ;; ;; The saucer control tables are compiled by SCTC. ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; Saucer Control State Machine ;; ;; ;; ;; Saucers have at their heart a three-state control machine. The three ;; ;; states are "Move left/right", "Fire", and "Move up/down". The ;; ;; following diagram indicates the allowed state transitions: ;; ;; ;; ;; ;; ;; +--------------+ ;; ;; | | ;; ;; | +------+ | ;; ;; +----------+ +-->| |---+ +----------+ ;; ;; | | | FIRE | | | ;; ;; +-->| |----------->| |-------------->| |---+ ;; ;; | | MOVE L/R | +------+ | MOVE U/D | | ;; ;; | | | | | | ;; ;; | | |---------------------------------->| | | ;; ;; | +----------+ +----------+ | ;; ;; | | ;; ;; | | ;; ;; +-----------------------------------------------------------------+ ;; ;; ;; ;; Saucers start out in the MOVE L/R state. They exit from this state ;; ;; into either FIRE or MOVE U/D based on whether the random delay the ;; ;; MOB picked is longer than the delay specified for the selected L/R ;; ;; move. ;; ;; ;; ;; If the saucer enters the FIRE state, it records the total delay ;; ;; req'd for the L/R sweep in the second state byte. The firing code ;; ;; then fires after random delays, until the total delay is consumed. ;; ;; ;; ;; The MOVE L/R and MOVE U/D code picks motions from the Delta-X and ;; ;; Delta-Y tables. These tables contain various motion parameters, in ;; ;; the form of a velocity, tick count, and total delta. The total ;; ;; delta is used to calculate the saucer's endpoint for a given motion, ;; ;; and thus ultimately ensure that the saucer stays within its bounding ;; ;; box. The velocity and tick count are used directly to control the ;; ;; saucer motion. ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; SAUC_PICK_D -- Given a current position and DXT/DYT pointer, pick a ;; ;; a slot in the DXT/DYT at random. ;; ;; ;; ;; INPUTS ;; ;; R1 Slot # ;; ;; R2 DXT/DYT pointer. ;; ;; R3 Pointer to BGMPTBL slot ;; ;; R4 Current X/Y coordinate, in 8Q8 format ;; ;; R5 Return address. ;; ;; ;; ;; OUTPUTS ;; ;; R0 Velocity ;; ;; R1 unmodified ;; ;; R2 Tick count ;; ;; R3 unmodified ;; ;; R4 unmodified ;; ;; R5 trashed. ;; ;; ;; ;; ======================================================================== ;; 0x5108 SAUC_PICK_D PROC 5108 0275 PSHR R5 ; Save return addr. 5109 0273 PSHR R3 510a 0093 MOVR R2, R3 ; Save DXT/DYT pointer 510b 02fa 0002 ADDI #2, R2 510d 0292 MVI@ R2, R2 ; Get # of entries 510e 0004 0150 0014 CALL BGBRAND ; pick a random starting point 5111 0048 SLL R0, 1 ; 5112 009a MOVR R3, R2 0x5113 @@try_next: 5113 0093 MOVR R2, R3 ; \ 5114 02fb 0004 ADDI #4, R3 ; |-- Index to selected entry's 'delta' 5116 00c3 ADDR R0, R3 ; / field. 5117 00a5 MOVR R4, R5 ; Copy X/Y coord to temp 5118 02dd ADD@ R3, R5 ; Try going right/down 5119 000a INCR R2 ; |-- Is it too big? 511a 0201 0003 BC @@not_ok_pos ; (overflowed!) 511c 0355 CMP@ R2, R5 ; / 511d 0209 0015 BNC @@ok_pos ; No: This entry is ok in the +ve dir. 0x511f @@not_ok_pos 511f 00a5 MOVR R4, R5 5120 031d SUB@ R3, R5 5121 0012 DECR R2 ; \___ Is it too small? 5122 0209 0003 BNC @@not_ok_neg ; (underflowed!) 5124 0355 CMP@ R2, R5 ; / 5125 0201 0011 BC @@ok_neg ; No: This entry is ok in the -ve dir. 0x5127 @@not_ok_neg: 5127 0338 0002 SUBI #2, R0 ; Neither direction ok, so go to prev entry 5129 0223 0017 BPL @@try_next 512b 02fa 0002 ADDI #2, R2 ; \ 512d 0290 MVI@ R2, R0 ; | Wrap around if go prior to 1st 512e 033a 0002 SUBI #2, R2 ; |-- entry in DXT/DYT 5130 0010 DECR R0 ; | 5131 0048 SLL R0 ; / 5132 0220 0020 B @@try_next 0x5134 @@ok_pos: 5134 0013 DECR R3 ; point to vel/tick field 5135 0298 MVI@ R3, R0 ; Read vel/tick 5136 0200 0004 B @@unpack_vel_tick 0x5138 @@ok_neg: 5138 0013 DECR R3 ; point to vel/tick field 5139 0298 MVI@ R3, R0 ; Read vel/tick 513a 03f8 00ff XORI #$FF, R0 ; \__ negate velocity field ; INCR R0 ; / (no incr for 1s compl) 0x513c @@unpack_vel_tick: 513c 0082 MOVR R0, R2 ; copy packed field over 513d 03b8 00ff ANDI #$FF, R0 ; keep only velocity in R0 513f 01c2 XORR R0, R2 ; clear velocity from R2 5140 0042 SWAP R2 ; put tick in lower half of R2 5141 03f8 0080 XORI #$80, R0 ; \ 5143 0338 0080 SUBI #$80, R0 ; |- Sign extend and scale velocity 5145 004c SLL R0, 2 ; / from 2Q6 to 8Q8 5146 0040 SWAP R0 ; swapped 1s compl. 5147 02b3 PULR R3 ; restore R3 5148 02b7 PULR PC ; return ENDP ;; ======================================================================== ;; ;; BGT_SAUC_LR -- Left/Right motion state for Saucer. ;; ;; ======================================================================== ;; 0x5149 BGT_SAUC_LR PROC 5149 0049 SLL R1, 1 ; double slot number for x/y indexing 514a 029a MVI@ R3, R2 ; Get SCP # from status byte 1. 514b 004e SLL R2, 2 ; \ 514c 02fa fdf5 ADDI #SCTBL, R2 ; |-- Index into SCTBL and remember it. 514e 0242 035e MVO R2, BGTTMP ; / 5150 02fa 0002 ADDI #2, R2 5152 0292 MVI@ R2, R2 ; Get DXT pointer into R2. 5153 02f9 0320 ADDI #SPXY1, R1 ;\ 5155 0288 MVI@ R1, R0 ; |-- Get current X coordinate into R4 5156 0040 SWAP R0 5157 0084 MOVR R0, R4 5158 0339 0320 SUBI #SPXY1, R1 ;/ 515a 0004 0150 0108 CALL SAUC_PICK_D ; pick a velocity and tick-count 515d 000b INCR R3 515e 025a MVO@ R2, R3 ; record tick count in status byte 2 515f 008c MOVR R1, R4 ; \ Set the velocity of this saucer 5160 02fc 0308 ADDI #SPXYV, R4 ; |- to the selected horiz velocity. 5162 0260 MVO@ R0, R4 ; / 5163 01c0 CLRR R0 ; \__ no vertical velocity 5164 0260 MVO@ R0, R4 ; / 5165 0061 SLR R1, 1 ; restore slot number 5166 0284 035e MVI BGTTMP, R4 ; \ 5168 02a2 MVI@ R4, R2 ; |-- calculate random portion of delay 5169 0004 0150 0014 CALL BGBRAND ; / 516c 02e0 ADD@ R4, R0 ; Add fixed portion of delay 516d 0082 MOVR R0, R2 ; \ 516e 031a SUB@ R3, R2 ; |-- Is this delay >= than motion 516f 020d 0019 BGE @@next_is_ud ; / duration? ; If not (eg. result was negative), then next state is "FIRE" 5171 001a COMR R2 ; \__ Store updated "remaining ticks", 5172 025a MVO@ R2, R3 ; / compensating for off-by-1 tick counts ; Decide whether we're running firing program 0 or 1 based on ; whether this is a spinner or a regular saucer. 5173 02ba 0140 MVII #SPAT1, R2 ; \ 5175 00ca ADDR R1, R2 ; |- look up the saucer's attribute 5176 0292 MVI@ R2, R2 ; / ; Set firing program to #1 for spinners, #0 otherwise ; NOTE: Change this if we get more than 2 spinners to check a ; range. This will force spinners to be consecutive in SPATBL. 5177 037a 0001 CMPI #SPATBL.wht0, R2 ; Is it the spinner? 5179 0205 0008 BLT @@set_next_state ; 517b 037a 000d CMPI #SPATBL.wht3, R2 ; Is it the spinner? 517d 02ba 000a MVII #BGI.sauc_f0, R2 ; Assume not a spinner 517f 020e 0002 BGT @@set_next_state 5181 02ba 000b @@spinner: MVII #BGI.sauc_f1, R2 ; Oh, it was a spinner 0x5183 @@set_next_state: 5183 033b 0003 SUBI #3, R3 ; Rewind to program pointer 5185 025a MVO@ R2, R3 ; Set thinker to "FIRE" or "MOVE U/D" 5186 02fb 0002 ADDI #2, R3 ; Restore R3 5188 0200 0fa4 B BGT_RET 0x518a @@next_is_ud: ;; We picked a random delay that's longer than the delay for ;; this left/right motion, so clamp to the L/R motion length ;; and transition directly to the MOVE U/D state. 518a 0298 MVI@ R3, R0 ; Get movement's duration as our delay 518b 02ba 000d MVII #BGI.sauc_ud,R2 518d 0220 000b B @@set_next_state ENDP ;; ======================================================================== ;; ;; BGT_SAUC_UD -- Up/Down motion state for Saucer. ;; ;; ======================================================================== ;; 0x518f BGT_SAUC_UD PROC 518f 0049 SLL R1, 1 5190 029a MVI@ R3, R2 ; Get SCP # from status byte 1. 5191 004e SLL R2, 2 ; \ 5192 02fa fdf5 ADDI #SCTBL, R2 ; |-- Index into SCTBL and remember it. 5194 0242 035e MVO R2, BGTTMP ; / 5196 02fa 0003 ADDI #3, R2 5198 0292 MVI@ R2, R2 ; Get DYT pointer into R2. 5199 02f9 0321 ADDI #SPXY1+1,R1 ; \ 519b 0288 MVI@ R1, R0 ; |-- Get current Y coordinate into R4 519c 0040 SWAP R0 519d 0084 MOVR R0, R4 519e 0339 0321 SUBI #SPXY1+1,R1 ; / 51a0 0004 0150 0108 CALL SAUC_PICK_D ; pick a velocity and tick-count 51a3 000b INCR R3 51a4 025a MVO@ R2, R3 ; record tick count in status byte 2 51a5 008c MOVR R1, R4 ; \ 51a6 01d2 CLRR R2 ; | 51a7 02fc 0308 ADDI #SPXYV, R4 ; |__ Set the velocity of this saucer 51a9 0262 MVO@ R2, R4 ; | to the selected vert velocity. 51aa 0260 MVO@ R0, R4 ; / 51ab 0298 MVI@ R3, R0 ; get tick count back into R0. 51ac 02ba 000c MVII #BGI.sauc_lr,R2 51ae 033b 0003 SUBI #3, R3 ; Rewind to program pointer 51b0 025a MVO@ R2, R3 ; Set thinker to "MOVE L/R" 51b1 02fb 0002 ADDI #2, R3 ; Restore R3 51b3 0061 SLR R1, 1 51b4 0200 0f78 B BGT_RET ENDP ;; ======================================================================== ;; ;; BGT_SAUC_F1 -- FIRE state for White Spinner Saucer ;; ;; ======================================================================== ;; 0x51b6 BGT_SAUC_F1 PROC 51b6 02ba 000b MVII #BGI.sauc_f1, R2 51b8 0242 035e MVO R2, BGTTMP ;; ------------------------------------------------------------ ;; ;; We only let spinners fire in the left half of the screen. ;; ;; ------------------------------------------------------------ ;; 51ba 0280 016e MVI SPINB, R0 51bc 0080 TSTR R0 51bd 020c 000d BNEQ @@cd2 51bf 02bc 0320 MVII #SPXY1, R4 ; \ 51c1 00cc ADDR R1, R4 ; |_ Get the X&Y coordinate of the bad guy 51c2 00cc ADDR R1, R4 ; | 51c3 0001 SDBD ; | 51c4 02a2 MVI@ R4, R2 ; / 51c5 0090 MOVR R2, R0 51c6 0042 SWAP R2 ; Put X in MSB 51c7 033a 1800 SUBI #$1800, R2 51c9 0209 0001 BNC @@cd2 ; Underflow? Too far left 51cb 0142 CMPR R0, R2 ; \__ ok to fire if X-24 > Y. 51cc 02b8 0001 @@cd2 MVII #1, R0 ; (default delay if not firing) 51ce 0209 0016 BNC @@com_dly ; / (note unsigned comparisons.) ; XXX: Add rule here to prevent firing if ship too far right. 51d0 0282 010d MVI CRATCNT,R2 ; \ 51d2 037a 0003 CMPI #3, R2 ; |- Don't fire if crater still onscreen 51d4 020e 0010 BGT @@com_dly ; / (Allow it in the last several cards) 51d6 0240 016e MVO R0, SPINB 51d8 0004 0160 013b CALL BGFIRE.b 0x51db @@common: 51db 029c MVI@ R3, R4 ; Get SCP # from status byte 1. 51dc 00e4 ADDR R4, R4 ; \ 51dd 00e4 ADDR R4, R4 ; |-- Index into SCTBL (SCTBL + 4*SCP#) 51de 02fc fdf5 ADDI #SCTBL, R4 ; / 51e0 02a2 MVI@ R4, R2 ; \___ calculate random portion of delay 51e1 0004 0150 0014 CALL BGBRAND ; / 51e4 02e0 ADD@ R4, R0 ; Add fixed portion of delay 51e5 0008 INCR R0 ; Compensate for "off-by-1" on delay counts 0x51e6 @@com_dly: 51e6 0082 MOVR R0, R2 ; \ 51e7 000b INCR R3 ; |__ Is this delay >= than motion 51e8 031a SUB@ R3, R2 ; | duration? 51e9 020d 000b BGE @@next_is_ud ; / ; If not (eg. result was negative), then next state is "FIRE" 51eb 001a COMR R2 ; \__ Store updated "remaining ticks", 51ec 025a MVO@ R2, R3 ; / compensating for off-by-1 tick counts 51ed 0282 035e MVI BGTTMP, R2 ; (we saved proper ptr earlier.) 0x51ef @@set_next_state: 51ef 033b 0003 SUBI #3, R3 ; Rewind to program pointer 51f1 025a MVO@ R2, R3 ; Set thinker to "FIRE" or "MOVE U/D" 51f2 02fb 0002 ADDI #2, R3 ; Restore R3 51f4 0200 0f38 B BGT_RET 0x51f6 @@next_is_ud: ;; We picked a random delay that's longer than the delay for ;; this left/right motion, so clamp to the L/R motion length ;; and transition directly to the MOVE U/D state. 51f6 0298 MVI@ R3, R0 ; Get movement's duration as our delay 51f7 02ba 000d MVII #BGI.sauc_ud,R2 51f9 0220 000b B @@set_next_state ENDP ;; ======================================================================== ;; ;; BGT_SAUC_F0 -- FIRE state for Pink/Blue Sacuers ;; ;; ======================================================================== ;; 0x51fb BGT_SAUC_F0 PROC 51fb 02ba 000a MVII #BGI.sauc_f0, R2 51fd 0242 035e MVO R2, BGTTMP 51ff 02b8 0002 MVII #2, R0 ; default delay if not firing 0x51e6 @@no_fire SET BGT_SAUC_F1.com_dly ;; ------------------------------------------------------------ ;; ;; We only let saucers fire in certain ranges of the screen, ;; ;; in order to keep it 'fair'. Those ranges are set up like ;; ;; so, with X representing "no fire" areas: ;; ;; ;; ;; ---------------X-XX--XXXXXXXXXXXXXXXXXXX ;; ;; ;; ;; The island of X-XX's represents the area to the right of ;; ;; the moon buggy's vertical gun turret up through the tip of ;; ;; of its horizontal turret, when the buggy is at its maximum ;; ;; velocity. ;; ;; ;; ;; We allow some bullets just in front of the buggy as a sort ;; ;; of "bluffing" bullet fire. We disallow unproductive fire ;; ;; through the rest of the right hand of the screen since it ;; ;; just wastes bullet sprites from group 2. ;; ;; ------------------------------------------------------------ ;; 5201 02ba 0320 MVII #SPXY1, R2 ; \ 5203 00ca ADDR R1, R2 ; |_ Get the X coordinate of the bad guy 5204 00ca ADDR R1, R2 ; | 5205 0292 MVI@ R2, R2 ; / 5206 0042 SWAP R2 5207 037a 3700 CMPI #55*256,R2 ; \__ ok to fire in left part of screen 5209 0209 003f BNC @@ok_fire ; / (note unsigned comparisons.) 520b 037a 3c00 CMPI #60*256,R2 ; \ 520d 0229 0028 BNC @@no_fire ; |_ tiny island to allow firing directly 520f 037a 3e00 CMPI #62*256,R2 ; | above buggy's gun turret :-) 5211 0209 0037 BNC @@ok_fire ; / ; If there's a crater directly beneath the saucer, ; only fire 25% of the time 5213 0280 0102 MVI TICK, R0 5215 03b8 0007 ANDI #7, R0 5217 0204 0013 BEQ @@skipnice 5219 0272 PSHR R2 521a 0042 SWAP R2 521b 0066 SLR R2, 2 521c 0062 SLR R2, 1 521d 0094 MOVR R2, R4 521e 02b2 PULR R2 521f 03bc 001f ANDI #$1F, R4 5221 02fc 02b4 ADDI #GROW+20, R4 5223 02b8 18da MVII #GCARDx,R0 5225 0360 CMP@ R4, R0 5226 020c 0026 BNEQ @@no_fire1 5228 000c INCR R4 5229 0360 CMP@ R4, R0 522a 020c 0022 BNEQ @@no_fire1 ; Skip the next test with odds proportional to ; (POINT + COURSE*4 + k) / 128 522c 0004 0150 000d @@skipnice: CALL BGRAND 522f 03b8 007f ANDI #$7F, R0 5231 004c SLL R0, 2 5232 0048 SLL R0, 1 5233 0084 MOVR R0, R4 5234 0280 013a MVI COURSE, R0 5236 004c SLL R0, 2 5237 004c SLL R0, 2 5238 0048 SLL R0, 1 5239 02f8 001e ADDI #30, R0 523b 02c0 0139 ADD POINT, R0 523d 0144 CMPR R0, R4 523e 02b8 0002 MVII #2, R0 5240 0205 0008 BLT @@ok_fire 0x5242 @@nofireovertank 5242 037a 5100 CMPI #81*256,R2 ; \ 5244 0221 005f BC @@no_fire ; |_ make sure we don't fire inside the 5246 037a 4d00 CMPI #77*256,R2 ; | two no-fire islands. 5248 0229 0063 BNC @@no_fire ; / 524a 02bd 51db @@ok_fire: MVII #BGT_SAUC_F1.common, R5 524c 0200 0ef1 B BGFIRE.a ; 524e 02b8 0005 @@no_fire1: MVII #5, R0 ; If over crater, wait 1/6th second 5250 0220 006b B @@no_fire ENDP ;; ======================================================================== ;; ;; BGT_SAUC_EX -- Exit motion state for Saucer. ;; ;; ;; ;; When exiting, go in the direction that'll take us over the tank. This ;; ;; allows the tank to make one last pot shot at the saucer. Note that ;; ;; the test need only be approximate--if the saucer is near the tank ;; ;; anyway, the player doesn't need the extra help so much. ;; ;; ======================================================================== ;; 0x5252 BGT_SAUC_EX PROC 5252 008a MOVR R1, R2 ; \ 5253 004a SLL R2, 1 ; |- index into SPXYP table 5254 02fa 0320 ADDI #SPXYP, R2 ; / 5256 0290 MVI@ R2, R0 ; \ 5257 0338 0004 SUBI #4, R0 ; |_ Are we to the left or right of 5259 03b8 00ff ANDI #$FF, R0 ; | the tank? (approximately) 525b 0340 015d CMP TXLO, R0 ; / 525d 02b8 00fe @@got_xvel: MVII #$00FE, R0 ; default to moving left. 525f 002f ADCR PC ; Exit right if compared velocity >= 0 5260 0018 COMR R0 ; $0200 is high speed to right. 5261 02fa ffe8 ADDI #SPXYV-SPXYP, R2 5263 0250 MVO@ R0, R2 ; Store as new X velocity 5264 000a INCR R2 5265 01c0 CLRR R0 5266 0250 MVO@ R0, R2 ; Store zero out Y velocity 5267 02b8 00ff MVII #$FF, R0 5269 0200 0ec3 B BGT_RET ; Sleep a long time. ENDP ;__ INCLUDE "bg/bgfollow.asm" ;; ======================================================================== ;; ;; Bad guy thinker routines for the Follower ;; ;; ;; ;; The follower is a special challenge because it's actually TWO BGs. ;; ;; Only one of them drives. The other has a null thinker. ;; ;; ;; ;; There are three follower types: ;; ;; ;; ;; -- Standard. Merely charges at the tank from behind. ;; ;; -- Minelayer. Like standard, but also drops mines ahead of tank. ;; ;; -- Charger. Comes in from the right and fires at the tank. ;; ;; ;; ;; The follower must be told to exit multiple times. For the standard ;; ;; follower, the first "FLEXIT" inches the follower forward a little. ;; ;; The second causes it to move in front of the tank and hover. The ;; ;; third causes it to leave the screen. ;; ;; ;; ;; The minelayer works similarly, except that it can be loaded up ;; ;; with a predetermined # of mines. (The mine count gets stored in the ;; ;; 2nd BG's status byte.) Once the follower is ahead of the tank, each ;; ;; FLEXIT causes the minelayer to lay a mine. Once the mine count is ;; ;; exhausted, one more FLEXIT will cause it to leave. ;; ;; ;; ;; The charger works similarly to the minelayer. The charger comes with ;; ;; a predetermined # of bullets. Each FLEXIT causes it to fire a ;; ;; bullet. When the bullets run out, the next FLEXIT causes the ;; ;; charger to play chicken with the tank. ;; ;; ;; ;; The thinkers are called with R1 == slot #, R3 == state pointer. ;; ;; R0, R2, R4 are available as scratch. ;; ;; ;; ;; Thinkers return with delay in R0. ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; BGT_FOLLOW0 -- Follower initialization ;; ;; On first think, identify slot number of second half ;; ;; so we can link together. Then set thinker to main ;; ;; hover algo. ;; ;; ======================================================================== ;; 0x526b BGT_FOLLOW0 PROC ; MVII #99, R0 ; B BGT_RET 526b 02bc 0140 MVII #SPAT1, R4 ;\_ Search sprite attrs for ;/ the other half of follower 526d 02a2 @@l MVI@ R4, R2 526e 037a 0091 CMPI #SPATBL.fol0b, R2 5270 0205 0004 BLT @@nope 5272 037a 009d CMPI #SPATBL.fol3b, R2 5274 0206 0006 BLE @@found_it 5276 037c 0145 @@nope: CMPI #SPAT1+5, R4 5278 0229 000c BNC @@l ; MVII #1, R0 ;\_ Failed? Just try again 527a 0200 0014 B @@ret ;/ next tic 527c 033c 0141 @@found_it SUBI #SPAT1+1, R4 ;\_ Store f1 slot# in 1st 527e 025c MVO@ R4, R3 ;/ stat byte 527f 037a 0099 CMPI #SPATBL.fol2b, R2 ; Is it the reverse follower? 5281 02ba 0014 MVII #$14, R2 ; Default target column 5283 020c 0002 BNEQ @@set_it 5285 02ba 0083 MVII #$83, R2 ; Reverse follower target column 5287 000b @@set_it: INCR R3 ;\_ Set target column in 5288 025a MVO@ R2, R3 ;/ 2nd status byte 5289 02ba 0011 MVII #BGI.follow1,R2 ;\ 528b 033b 0003 SUBI #3, R3 ; |- Set thinker to primary 528d 025a MVO@ R2, R3 ;/ thinker. 528e 02fb 0002 ADDI #2, R3 5290 02b8 0001 @@ret MVII #1, R0 5292 0200 0e9a B BGT_RET ENDP ;; ======================================================================== ;; ;; BGT_FOLLOW1 -- Hover near the target column. The target column ;; ;; starts out to the left of the tank. The exit method ;; ;; sets the target column ahead of the tank causing the ;; ;; follower to charge the tank. Cute, eh? ;; ;; ======================================================================== ;; 0x5294 BGT_FOLLOW1 PROC ; MVII #99, R0 ; B BGT_RET ; Get current Follower position and use to calculate ; new target velocity. 5294 008a MOVR R1, R2 ;\ 5295 004a SLL R2, 1 ; |- Point at follower's X coord 5296 02fa 0320 ADDI #SPXY1, R2 ;/ 5298 0290 MVI@ R2, R0 ;\_ record it so BGMAKE can spawn 5299 0240 015e MVO R0, FXLO ;/ mines under minelayer 529b 000b INCR R3 529c 0298 MVI@ R3, R0 ; Get target column 529d 0013 DECR R3 529e 0004 0150 02f2 CALL FLR_HONE ; Hone in on target column 52a1 0003 DECLE 3 ; DECLE $0000, $FFFF 52a2 02f9 0140 ADDI #SPAT1, R1 52a4 0288 MVI@ R1, R0 52a5 0378 0089 CMPI #SPATBL.fol2a, R0 52a7 02b8 0046 MVII #$46, R0 ; Reverse follower target Y coord 52a9 0204 0002 BEQ @@rev_follower 52ab 02b8 0049 MVII #$49, R0 ; Normal target Y coord 52ad 0339 0140 @@rev_follower SUBI #SPAT1, R1 52af 000a INCR R2 ; Point at follower's Y coord ;; Look for rocks to our right 52b0 0243 035e MVO R3, BGTTMP 52b2 0283 015e MVI FXLO, R3 52b4 0067 SLR R3, 2 52b5 0063 SLR R3, 1 52b6 009c MOVR R3, R4 52b7 02fc 029f ADDI #GROW - 1, R4 52b9 02bd 0003 MVII #3, R5 0x52bb @@rloop: 52bb 02a3 MVI@ R4, R3 52bc 000c INCR R4 52bd 03bb 01f8 ANDI #$1F8, R3 52bf 037b 0160 CMPI #RCARD*8, R3 52c1 0209 0004 BNC @@nextr 52c3 037b 0190 CMPI #(RCARD+6)*8, R3 52c5 0209 000c BNC @@float 52c7 0015 @@nextr: DECR R5 52c8 022c 000e BNEQ @@rloop 52ca 0283 015f MVI FHCNT, R3 52cc 0013 DECR R3 52cd 020b 0012 BMI @@hone3 52cf 0243 015f MVO R3, FHCNT 52d1 0200 0006 B @@hone 52d3 02bb 0014 @@float: MVII #20, R3 52d5 0243 015f MVO R3, FHCNT 52d7 0338 000a SUBI #10, R0 52d9 0283 035e @@hone: MVI BGTTMP, R3 52db 0004 0150 02f2 CALL FLR_HONE 52de 0000 DECLE 0 52df 0200 0006 B @@sync 52e1 0283 035e @@hone3: MVI BGTTMP, R3 52e3 0004 0150 02f2 CALL FLR_HONE 52e6 0003 DECLE 3 ; DECLE $4800, $4A00 52e7 0004 0150 0321 @@sync: CALL FLR_SYNC ; Ensure flr halves stay sync'd 52ea 02ba 0002 MVII #2, R2 ; \ 52ec 0004 0150 0014 CALL BGBRAND ; |_ Wait 1 - 2 tics 52ef 0008 INCR R0 ; | 52f0 0200 0e3c B BGT_RET ; / ENDP ;; ======================================================================== ;; ;; FLR_HONE Hone in on a target coord. ;; ;; ;; ;; INPUTS ;; ;; R0 -- Target ordinate value ;; ;; R1 -- Slot # (not used but must be preserved) ;; ;; R2 -- Ptr to current ordinate ;; ;; R3 -- Ptr to state byte (not used but must be preserved) ;; ;; R4 -- scratch ;; ;; R5 -- Return address ;; ;; ;; ;; OUTPUT ;; ;; Preserves R1, R2, R3 ;; ;; ;; ;; ======================================================================== ;; 0x52f2 FLR_HONE PROC 52f2 0080 TSTR R0 52f3 020c 0002 BNEQ @@notz 52f5 0338 0008 SUBI #8, R0 ; Treat 0 as -8. 0x52f7 @@notz 52f7 0270 PSHR R0 ; Save target ordinate 52f8 0290 MVI@ R2, R0 ; Get current ordinate (8.8) 52f9 03b8 00ff ANDI #$FF, R0 ; make it integer 52fb 0330 SUB@ SP, R0 ; \_ Find delta to target 52fc 0020 NEGR R0 ; / 52fd 004c SLL R0, 2 ; \_ *8 52fe 0048 SLL R0, 1 ; / 52ff 02ef ADD@ R5, PC 5300 004c SLL R0, 2 ; *32 if arg is 1 5301 0338 0004 SUBI #4, R0 5303 0275 PSHR R5 5304 0084 MOVR R0, R4 ; Save it 5305 0004 0150 000d CALL BGRAND ; 5308 0272 PSHR R2 ; \ 5309 0062 SLR R2 ; |_ pick bits 5:2 or 3:0 530a 0201 0001 BC @@o ; | of RAND based on odd/even 530c 0064 SLR R0, 2 ; | (x/y) coordinate address 530d 02b2 @@o: PULR R2 ; / 530e 03b8 000f ANDI #$0F, R0 ; \ 5310 0338 0008 SUBI #$08, R0 ; |- Round randomly in 2 LSBs 5312 00c4 ADDR R0, R4 ; / 5313 033a 0018 SUBI #SPXYP-SPXYV,R2 ; \ 5315 0290 MVI@ R2, R0 ; | 5316 0040 SWAP R0 ; | 5317 0048 SLL R0 ; | 5318 00e0 ADDR R4, R0 ; | Average new velocity 5319 007c SARC R0, 2 ; |_ with current velocity 531a 0028 ADCR R0 ; | to accelerate toward 531b 0040 SWAP R0 ; | goal. 531c 0250 MVO@ R0, R2 ; | 531d 02fa 0018 ADDI #SPXYP-SPXYV,R2 ; / 531f 02b5 PULR R5 IF 0 CMP@ R5, R2 ; Check lower bound BC @@lok DECR R5 MVI@ R5, R0 MVO@ R0, R2 INCR R5 JR R5 @@lok: CMP@ R5, R2 ; Check upper bound BNC @@hok DECR R5 MVI@ R5, R0 MVO@ R0, R2 ENDI 5320 00af @@hok: JR R5 ENDP ;; ======================================================================== ;; ;; FLR_SYNC Synchronize the two halves of the follower. ;; ;; ;; ;; INPUTS ;; ;; R0 -- scratch ;; ;; R1 -- Slot # of parent ;; ;; R2 -- scratch ;; ;; R3 -- Ptr to state byte (pts to slot# of other half!) ;; ;; R4 -- scratch ;; ;; R5 -- Return address ;; ;; ======================================================================== ;; 0x5321 FLR_SYNC PROC 5321 0298 MVI@ R3, R0 ; Get slot # of other half ; Ick: Follower may have died but we'll tick it once more? IF 0 MVII #SPAT, R2 ADDR R0, R2 MVI@ R2, R2 CMPI #SPATBL.fol0b, R2 BLT @@skip CMPI #SPATBL.fol3b, R2 BGT @@skip ENDI 5322 0108 SUBR R1, R0 ; ADDR R0, R0 ; 5323 0048 SLL R0, 1 ; non-interruptible on purpose 5324 008c MOVR R1, R4 ; \ 5325 00cc ADDR R1, R4 ; |- Point to parent's XY vel 5326 02fc 0308 ADDI #SPXYV, R4 ; / 5328 02a2 MVI@ R4, R2 ; \ 5329 0014 DECR R4 ; |_ Copy X vel 532a 00c4 ADDR R0, R4 ; | 532b 0262 MVO@ R2, R4 ; / 532c 0104 SUBR R0, R4 532d 02a2 MVI@ R4, R2 ; \ 532e 0014 DECR R4 ; |_ Copy Y vel 532f 00c4 ADDR R0, R4 ; | 5330 0262 MVO@ R2, R4 ; / 5331 0104 SUBR R0, R4 5332 02fc 0016 ADDI #SPXY1-SPXYV-2, R4 ; Move to position table 5334 02a2 MVI@ R4, R2 ; \ 5335 0272 PSHR R2 ; |- Get X, Y positions 5336 02a2 MVI@ R4, R2 ; / 5337 033c 0002 SUBI #2, R4 5339 00c4 ADDR R0, R4 533a 02b0 PULR R0 533b 0260 MVO@ R0, R4 ; \_ Write out X, Y positions 533c 0262 MVO@ R2, R4 ; / 533d 00af @@skip: JR R5 ENDP ;; ======================================================================== ;; ;; BGT_FLEXIT -- Charge the tank, wait ;; ;; ======================================================================== ;; 0x533e BGT_FLEXIT PROC 0x6e @@laymine EQU (CUE.laidmine SHR 8) + 1 533e 000b INCR R3 ; 2nd state byte is target vel. 533f 02b8 001c MVII #$1C, R0 ; \ 5341 0358 CMP@ R3, R0 ; |- Advance to 1st stopping pt? 5342 020e 001a BGT @@set ; / 5344 02b8 0078 MVII #120, R0 ; \ 5346 0358 CMP@ R3, R0 ; |- Advance to 2nd stopping pt? 5347 020e 0015 BGT @@set ; / ; Ok, at 2nd stopping point. See if we need to lay a mine. 5349 0013 DECR R3 ; \ 534a 029a MVI@ R3, R2 ; | Index to other half of 534b 000b INCR R3 ; |- follower, since its state 534c 004e SLL R2, 2 ; | byte holds the mine count 534d 02fa 011e ADDI #BGMPTBL+2, R2 ; / 534f 0295 MVI@ R2, R5 ; \_ Any mines left? 5350 0015 DECR R5 ; / 5351 020b 0009 BMI @@nomine ; No: Proceed to 3rd stop (exit) 5353 0255 MVO@ R5, R2 ; Store updated mine count 5354 02b8 007d MVII #125, R0 ; Inch forward slightly 5356 02ba 006e MVII #@@laymine, R2 ; \_ Lay mine using CUE mechanism. 5358 0242 011a MVO R2, CUENUM ; / X coord comes from FXLO. 535a 0200 0002 B @@set 535c 02b8 00e1 @@nomine: MVII #225, R0 535e 0258 @@set: MVO@ R0, R3 535f 0013 DECR R3 5360 0004 0150 0321 CALL FLR_SYNC 5363 02b8 0011 MVII #BGI.follow1, R0 5365 0220 0321 B BG_SETTHINK ENDP ;; ======================================================================== ;; ;; BGT_FLADV -- Reverse follower: Fire available bullets, then charge. ;; ;; ======================================================================== ;; 0x5367 BGT_FLADV PROC 5367 029a MVI@ R3, R2 ; Get 2nd half slot # 5368 004e SLL R2, 2 ; \ 5369 02fa 011e ADDI #BGMPTBL+2, R2 ; |- Look up remaining bullets 536b 0290 MVI@ R2, R0 ; / 536c 0010 DECR R0 536d 020b 0005 BMI @@advance 536f 0250 MVO@ R0, R2 ; Store updated bullet count 5370 02bd 5378 MVII #@@leave, R5 5372 0200 0dbf B BGFIRE.d 5374 000b @@advance: INCR R3 ; MVII #$20, R0 ; CMP@ R3, R0 ; BLT @@set 5375 01c0 CLRR R0 5376 0258 @@set: MVO@ R0, R3 5377 0013 DECR R3 5378 02b8 0011 @@leave: MVII #BGI.follow1, R0 537a 0220 0336 B BG_SETTHINK ENDP ;__ 0x36f _BGMP.size EQU $ - _BGMP 0x537c _ENG1 EQU $ INCLUDE "engine/engine1.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; ENGINE1 -- This is the very-time-critical GRAM and STIC register update ;; ;; stuff. We calculate this one frame ahead so that all we do ;; ;; here is a bunch of high speed block copies. ;; ;;==========================================================================;; 0x537c ENGINE1 PROC ;;------------------------------------------------------------------;; ;; During-vblank stuff. We cycle count as it's a tight fit. When ;; ;; we arrive here, we may have as little as 3500 cycles or so ;; ;; for all of our updates, since we have non-interruptible code ;; ;; elsewhere that will delay interrupts. ;; ;;------------------------------------------------------------------;; 537c 0240 0020 MVO R0, $20 ; 11 Enable the display 0x537e @@1: ;;------------------------------------------------------------------;; ;; Copy over sprite "pseudo registers" from 16-bit RAM. ;; ;;------------------------------------------------------------------;; 537e 01ed CLRR R5 ; 6 Point to MOB registers 537f 0284 0349 MVI SDATP, R4 ; 10 Point to RAM copy of MOB registers ;---- ; 16 ; 11 (from display enable) ;==== ; 27 REPEAT 24 ; unrolled completely for speed 5381 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5382 0268 MVO@ R0, R5 ; 9 / ENDR ;== 1 5383 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5384 0268 MVO@ R0, R5 ; 9 / ;== 2 5385 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5386 0268 MVO@ R0, R5 ; 9 / ;== 3 5387 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5388 0268 MVO@ R0, R5 ; 9 / ;== 4 5389 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 538a 0268 MVO@ R0, R5 ; 9 / ;== 5 538b 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 538c 0268 MVO@ R0, R5 ; 9 / ;== 6 538d 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 538e 0268 MVO@ R0, R5 ; 9 / ;== 7 538f 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5390 0268 MVO@ R0, R5 ; 9 / ;== 8 5391 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5392 0268 MVO@ R0, R5 ; 9 / ;== 9 5393 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5394 0268 MVO@ R0, R5 ; 9 / ;== 10 5395 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5396 0268 MVO@ R0, R5 ; 9 / ;== 11 5397 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 5398 0268 MVO@ R0, R5 ; 9 / ;== 12 5399 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 539a 0268 MVO@ R0, R5 ; 9 / ;== 13 539b 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 539c 0268 MVO@ R0, R5 ; 9 / ;== 14 539d 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 539e 0268 MVO@ R0, R5 ; 9 / ;== 15 539f 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53a0 0268 MVO@ R0, R5 ; 9 / ;== 16 53a1 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53a2 0268 MVO@ R0, R5 ; 9 / ;== 17 53a3 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53a4 0268 MVO@ R0, R5 ; 9 / ;== 18 53a5 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53a6 0268 MVO@ R0, R5 ; 9 / ;== 19 53a7 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53a8 0268 MVO@ R0, R5 ; 9 / ;== 20 53a9 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53aa 0268 MVO@ R0, R5 ; 9 / ;== 21 53ab 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53ac 0268 MVO@ R0, R5 ; 9 / ;== 22 53ad 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53ae 0268 MVO@ R0, R5 ; 9 / ;== 23 53af 02a0 MVI@ R4, R0 ; 8 \_ copy STIC shadow register 53b0 0268 MVO@ R0, R5 ; 9 / ;== 24 ;---- ; 408 = 17*24 ; 27 (carried forward) ;==== ; 435 ;;------------------------------------------------------------------;; ;; Record collisions with the buggy and clear its collision reg. ;; ;;------------------------------------------------------------------;; 53b1 02b8 0103 MVII #$0103, R0 ; 8 Magic constant 53b3 0001 SDBD ; 4 \_ sets carry if any collision 53b4 0368 CMP@ R5, R0 ; 10 / happens w/ MOB 2..7 53b5 0051 RLC R1, 1 ; 6 record this collision in lsb of R0 53b6 0381 0135 AND MOBHIT, R1 ; 11 store out the collision flag 53b8 0241 0135 MVO R1, MOBHIT ; 11 store out the collision flag 53ba 0240 0018 MVO R0, $18 ; 11 \_ Clear previous collisions. 53bc 0240 0019 MVO R0, $19 ; 11 / ;---- ; 72 ; 435 (carried forward) ;==== ; 507 ;;------------------------------------------------------------------;; ;; Copy over ground data for scrolling ground and horiz bullet. ;; ;;------------------------------------------------------------------;; 53be 0280 010e MVI GDATA, R0 ; 10 Pointer to ground gfx data 53c0 0240 38d8 MVO R0, GGRAM ; 11 53c2 02b9 38e3 MVII #HBGRAM,R1 ; 8 Pointer to horiz bullet GRAM card 53c4 0301 0114 SUB HBROW, R1 ; 10 Adjust for pixel row of bullet 53c6 0280 010f MVI HBDATA, R0 ; 10 Get bullet pixel 53c8 0248 MVO@ R0, R1 ; 9 Draw it. ;---- ; 58 ; 507 ;==== ; 565 ;;------------------------------------------------------------------;; ;; Copy over rock/crater data for scrolling rocks, craters. ;; ;;------------------------------------------------------------------;; 53c9 0285 0342 MVI RPTR, R5 ; 10 Pointer to Rock/Crater gfx data 53cb 02bc 3960 MVII #RGRAM, R4 ; 8 ;---- ; 18 ; 565 ;==== ; 583 REPEAT 12*4 ; unrolled completely for speed 53cd 02a8 MVI@ R5, R0 ; 8 \ 53ce 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53cf 0040 SWAP R0, 1 ; 6 | 53d0 0260 MVO@ R0, R4 ; 9 / ENDR ;---- ;== 1 53d1 02a8 MVI@ R5, R0 ; 8 \ 53d2 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53d3 0040 SWAP R0, 1 ; 6 | 53d4 0260 MVO@ R0, R4 ; 9 / ;== 2 53d5 02a8 MVI@ R5, R0 ; 8 \ 53d6 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53d7 0040 SWAP R0, 1 ; 6 | 53d8 0260 MVO@ R0, R4 ; 9 / ;== 3 53d9 02a8 MVI@ R5, R0 ; 8 \ 53da 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53db 0040 SWAP R0, 1 ; 6 | 53dc 0260 MVO@ R0, R4 ; 9 / ;== 4 53dd 02a8 MVI@ R5, R0 ; 8 \ 53de 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53df 0040 SWAP R0, 1 ; 6 | 53e0 0260 MVO@ R0, R4 ; 9 / ;== 5 53e1 02a8 MVI@ R5, R0 ; 8 \ 53e2 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53e3 0040 SWAP R0, 1 ; 6 | 53e4 0260 MVO@ R0, R4 ; 9 / ;== 6 53e5 02a8 MVI@ R5, R0 ; 8 \ 53e6 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53e7 0040 SWAP R0, 1 ; 6 | 53e8 0260 MVO@ R0, R4 ; 9 / ;== 7 53e9 02a8 MVI@ R5, R0 ; 8 \ 53ea 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53eb 0040 SWAP R0, 1 ; 6 | 53ec 0260 MVO@ R0, R4 ; 9 / ;== 8 53ed 02a8 MVI@ R5, R0 ; 8 \ 53ee 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53ef 0040 SWAP R0, 1 ; 6 | 53f0 0260 MVO@ R0, R4 ; 9 / ;== 9 53f1 02a8 MVI@ R5, R0 ; 8 \ 53f2 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53f3 0040 SWAP R0, 1 ; 6 | 53f4 0260 MVO@ R0, R4 ; 9 / ;== 10 53f5 02a8 MVI@ R5, R0 ; 8 \ 53f6 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53f7 0040 SWAP R0, 1 ; 6 | 53f8 0260 MVO@ R0, R4 ; 9 / ;== 11 53f9 02a8 MVI@ R5, R0 ; 8 \ 53fa 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53fb 0040 SWAP R0, 1 ; 6 | 53fc 0260 MVO@ R0, R4 ; 9 / ;== 12 53fd 02a8 MVI@ R5, R0 ; 8 \ 53fe 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 53ff 0040 SWAP R0, 1 ; 6 | 5400 0260 MVO@ R0, R4 ; 9 / ;== 13 5401 02a8 MVI@ R5, R0 ; 8 \ 5402 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5403 0040 SWAP R0, 1 ; 6 | 5404 0260 MVO@ R0, R4 ; 9 / ;== 14 5405 02a8 MVI@ R5, R0 ; 8 \ 5406 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5407 0040 SWAP R0, 1 ; 6 | 5408 0260 MVO@ R0, R4 ; 9 / ;== 15 5409 02a8 MVI@ R5, R0 ; 8 \ 540a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 540b 0040 SWAP R0, 1 ; 6 | 540c 0260 MVO@ R0, R4 ; 9 / ;== 16 540d 02a8 MVI@ R5, R0 ; 8 \ 540e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 540f 0040 SWAP R0, 1 ; 6 | 5410 0260 MVO@ R0, R4 ; 9 / ;== 17 5411 02a8 MVI@ R5, R0 ; 8 \ 5412 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5413 0040 SWAP R0, 1 ; 6 | 5414 0260 MVO@ R0, R4 ; 9 / ;== 18 5415 02a8 MVI@ R5, R0 ; 8 \ 5416 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5417 0040 SWAP R0, 1 ; 6 | 5418 0260 MVO@ R0, R4 ; 9 / ;== 19 5419 02a8 MVI@ R5, R0 ; 8 \ 541a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 541b 0040 SWAP R0, 1 ; 6 | 541c 0260 MVO@ R0, R4 ; 9 / ;== 20 541d 02a8 MVI@ R5, R0 ; 8 \ 541e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 541f 0040 SWAP R0, 1 ; 6 | 5420 0260 MVO@ R0, R4 ; 9 / ;== 21 5421 02a8 MVI@ R5, R0 ; 8 \ 5422 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5423 0040 SWAP R0, 1 ; 6 | 5424 0260 MVO@ R0, R4 ; 9 / ;== 22 5425 02a8 MVI@ R5, R0 ; 8 \ 5426 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5427 0040 SWAP R0, 1 ; 6 | 5428 0260 MVO@ R0, R4 ; 9 / ;== 23 5429 02a8 MVI@ R5, R0 ; 8 \ 542a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 542b 0040 SWAP R0, 1 ; 6 | 542c 0260 MVO@ R0, R4 ; 9 / ;== 24 542d 02a8 MVI@ R5, R0 ; 8 \ 542e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 542f 0040 SWAP R0, 1 ; 6 | 5430 0260 MVO@ R0, R4 ; 9 / ;== 25 5431 02a8 MVI@ R5, R0 ; 8 \ 5432 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5433 0040 SWAP R0, 1 ; 6 | 5434 0260 MVO@ R0, R4 ; 9 / ;== 26 5435 02a8 MVI@ R5, R0 ; 8 \ 5436 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5437 0040 SWAP R0, 1 ; 6 | 5438 0260 MVO@ R0, R4 ; 9 / ;== 27 5439 02a8 MVI@ R5, R0 ; 8 \ 543a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 543b 0040 SWAP R0, 1 ; 6 | 543c 0260 MVO@ R0, R4 ; 9 / ;== 28 543d 02a8 MVI@ R5, R0 ; 8 \ 543e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 543f 0040 SWAP R0, 1 ; 6 | 5440 0260 MVO@ R0, R4 ; 9 / ;== 29 5441 02a8 MVI@ R5, R0 ; 8 \ 5442 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5443 0040 SWAP R0, 1 ; 6 | 5444 0260 MVO@ R0, R4 ; 9 / ;== 30 5445 02a8 MVI@ R5, R0 ; 8 \ 5446 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5447 0040 SWAP R0, 1 ; 6 | 5448 0260 MVO@ R0, R4 ; 9 / ;== 31 5449 02a8 MVI@ R5, R0 ; 8 \ 544a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 544b 0040 SWAP R0, 1 ; 6 | 544c 0260 MVO@ R0, R4 ; 9 / ;== 32 544d 02a8 MVI@ R5, R0 ; 8 \ 544e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 544f 0040 SWAP R0, 1 ; 6 | 5450 0260 MVO@ R0, R4 ; 9 / ;== 33 5451 02a8 MVI@ R5, R0 ; 8 \ 5452 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5453 0040 SWAP R0, 1 ; 6 | 5454 0260 MVO@ R0, R4 ; 9 / ;== 34 5455 02a8 MVI@ R5, R0 ; 8 \ 5456 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5457 0040 SWAP R0, 1 ; 6 | 5458 0260 MVO@ R0, R4 ; 9 / ;== 35 5459 02a8 MVI@ R5, R0 ; 8 \ 545a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 545b 0040 SWAP R0, 1 ; 6 | 545c 0260 MVO@ R0, R4 ; 9 / ;== 36 545d 02a8 MVI@ R5, R0 ; 8 \ 545e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 545f 0040 SWAP R0, 1 ; 6 | 5460 0260 MVO@ R0, R4 ; 9 / ;== 37 5461 02a8 MVI@ R5, R0 ; 8 \ 5462 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5463 0040 SWAP R0, 1 ; 6 | 5464 0260 MVO@ R0, R4 ; 9 / ;== 38 5465 02a8 MVI@ R5, R0 ; 8 \ 5466 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5467 0040 SWAP R0, 1 ; 6 | 5468 0260 MVO@ R0, R4 ; 9 / ;== 39 5469 02a8 MVI@ R5, R0 ; 8 \ 546a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 546b 0040 SWAP R0, 1 ; 6 | 546c 0260 MVO@ R0, R4 ; 9 / ;== 40 546d 02a8 MVI@ R5, R0 ; 8 \ 546e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 546f 0040 SWAP R0, 1 ; 6 | 5470 0260 MVO@ R0, R4 ; 9 / ;== 41 5471 02a8 MVI@ R5, R0 ; 8 \ 5472 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5473 0040 SWAP R0, 1 ; 6 | 5474 0260 MVO@ R0, R4 ; 9 / ;== 42 5475 02a8 MVI@ R5, R0 ; 8 \ 5476 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5477 0040 SWAP R0, 1 ; 6 | 5478 0260 MVO@ R0, R4 ; 9 / ;== 43 5479 02a8 MVI@ R5, R0 ; 8 \ 547a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 547b 0040 SWAP R0, 1 ; 6 | 547c 0260 MVO@ R0, R4 ; 9 / ;== 44 547d 02a8 MVI@ R5, R0 ; 8 \ 547e 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 547f 0040 SWAP R0, 1 ; 6 | 5480 0260 MVO@ R0, R4 ; 9 / ;== 45 5481 02a8 MVI@ R5, R0 ; 8 \ 5482 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5483 0040 SWAP R0, 1 ; 6 | 5484 0260 MVO@ R0, R4 ; 9 / ;== 46 5485 02a8 MVI@ R5, R0 ; 8 \ 5486 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 5487 0040 SWAP R0, 1 ; 6 | 5488 0260 MVO@ R0, R4 ; 9 / ;== 47 5489 02a8 MVI@ R5, R0 ; 8 \ 548a 0260 MVO@ R0, R4 ; 9 |_ copy over 2 rows of card 548b 0040 SWAP R0, 1 ; 6 | 548c 0260 MVO@ R0, R4 ; 9 / ;== 48 ;1536 total for 12 card (48 iters) ; 583 ;==== ;2119 ;;------------------------------------------------------------------;; ;; Update the wheels on the buggy. ;; ;;------------------------------------------------------------------;; 548d 0284 0341 MVI WPTR, R4 ; 10 Pointer to wheel graphic (two words) 548f 02a0 MVI@ R4, R0 ; 8 Get first word 5490 0240 3945 MVO R0, WGRAM ; 11 Row 0 5492 0040 SWAP R0, 1 ; 6 5493 0240 3946 MVO R0, WGRAM+1 ; 11 Row 1 5495 02a0 MVI@ R4, R0 ; 8 Get second word 5496 0240 3948 MVO R0, WGRAM+3 ; 11 Row 2 5498 0040 SWAP R0, 1 ; 6 5499 0240 3949 MVO R0, WGRAM+4 ; 11 Row 3 ;---- ; 82 ;2119 ;==== ;2201 ;;------------------------------------------------------------------;; ;; Also update the "spinner" bad-guy. ;; ;;------------------------------------------------------------------;; 549b 0285 016d MVI SPINCNT,R5 ; 10 Point to the spinner's frame counter 549d 02bc 3918 MVII #SGRAM, R4 ; 8 Point to spinner's GRAM entry 549f 02fd f880 ADDI #SPIN1, R5 ; 8 Offset into spinner's animation 54a1 02a8 MVI@ R5, R0 ; 8 \ 54a2 0260 MVO@ R0, R4 ; 9 | 54a3 0040 SWAP R0, 1 ; 6 | 54a4 0260 MVO@ R0, R4 ; 9 | 54a5 02a8 MVI@ R5, R0 ; 8 | 54a6 0260 MVO@ R0, R4 ; 9 | 54a7 0040 SWAP R0, 1 ; 6 | 54a8 0260 MVO@ R0, R4 ; 9 |-- Copy over 7 rows of 1 card 54a9 02a8 MVI@ R5, R0 ; 8 | 54aa 0260 MVO@ R0, R4 ; 9 | 54ab 0040 SWAP R0, 1 ; 6 | 54ac 0260 MVO@ R0, R4 ; 9 | 54ad 02a8 MVI@ R5, R0 ; 8 | 54ae 0260 MVO@ R0, R4 ; 9 | ; SWAP R0, 1 ; - | \__ Last row not needed ; MVO@ R0, R4 ; - / / ;---- ; 139 ;2201 ;==== ;2340 ;;------------------------------------------------------------------;; ;; Copy over mountain data for top or middle mountain, if either. ;; ;; We avoid most conditional code here by hard-coding for 8 ;; ;; cards, and relying on external code to set up our GRAM pointer ;; ;; for us. If there's no mountain update this frame, MPTR == 0. ;; ;;------------------------------------------------------------------;; 54af 0285 0340 MVI MPTR, R5 ; 10 Get mountain gfx data pointer 54b1 00ad TSTR R5 ; 6 Is it NULL? 54b2 0204 011d BEQ @@nomtn ; 7 If yes, skip mountain update. 54b4 0284 033c MVI MGOFS, R4 ; 10 Get GRAM address for mtn gfx. 54b6 0282 0344 MVI MGRAM, R2 ; 10 Get GRAM address for mtn gfx. 54b8 02bb 0008 MVII #8, R3 ; 8 54ba 01a3 ANDR R4, R3 ; 6 54bb 02bb 0030 MVII #$0030, R3 ; 8 Init circular-addressing mask 54bd 0204 008a BEQ @@mloop_e ; 7/9 ;---- ; 72 do odd loop ; 74 do even loop ; 0x54bf @@mloop_o: REPEAT 4 ; unrolled completely for speed 54bf 02a8 MVI@ R5, R0 ; 8 54c0 0260 MVO@ R0, R4 ; 9 Row 0, card 0 54c1 0040 SWAP R0, 1 ; 6 54c2 0260 MVO@ R0, R4 ; 9 Row 1, card 0 54c3 02a8 MVI@ R5, R0 ; 8 54c4 0260 MVO@ R0, R4 ; 9 Row 2, card 0 54c5 0040 SWAP R0, 1 ; 6 54c6 0260 MVO@ R0, R4 ; 9 Row 3, card 0 54c7 02a8 MVI@ R5, R0 ; 8 54c8 0260 MVO@ R0, R4 ; 9 Row 4, card 0 54c9 0040 SWAP R0, 1 ; 6 54ca 0260 MVO@ R0, R4 ; 9 Row 5, card 0 54cb 02a8 MVI@ R5, R0 ; 8 54cc 0260 MVO@ R0, R4 ; 9 Row 6, card 0 54cd 0040 SWAP R0, 1 ; 6 54ce 0260 MVO@ R0, R4 ; 9 Row 7, card 0 54cf 019c ANDR R3, R4 ; 6 54d0 01d4 XORR R2, R4 ; 6 54d1 02a8 MVI@ R5, R0 ; 8 54d2 0260 MVO@ R0, R4 ; 9 Row 0, card 1 54d3 0040 SWAP R0, 1 ; 6 54d4 0260 MVO@ R0, R4 ; 9 Row 1, card 1 54d5 02a8 MVI@ R5, R0 ; 8 54d6 0260 MVO@ R0, R4 ; 9 Row 2, card 1 54d7 0040 SWAP R0, 1 ; 6 54d8 0260 MVO@ R0, R4 ; 9 Row 3, card 1 54d9 02a8 MVI@ R5, R0 ; 8 54da 0260 MVO@ R0, R4 ; 9 Row 4, card 1 54db 0040 SWAP R0, 1 ; 6 54dc 0260 MVO@ R0, R4 ; 9 Row 5, card 1 54dd 02a8 MVI@ R5, R0 ; 8 54de 0260 MVO@ R0, R4 ; 9 Row 6, card 1 54df 0040 SWAP R0, 1 ; 6 54e0 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ENDR ;---- ;== 1 54e1 02a8 MVI@ R5, R0 ; 8 54e2 0260 MVO@ R0, R4 ; 9 Row 0, card 0 54e3 0040 SWAP R0, 1 ; 6 54e4 0260 MVO@ R0, R4 ; 9 Row 1, card 0 54e5 02a8 MVI@ R5, R0 ; 8 54e6 0260 MVO@ R0, R4 ; 9 Row 2, card 0 54e7 0040 SWAP R0, 1 ; 6 54e8 0260 MVO@ R0, R4 ; 9 Row 3, card 0 54e9 02a8 MVI@ R5, R0 ; 8 54ea 0260 MVO@ R0, R4 ; 9 Row 4, card 0 54eb 0040 SWAP R0, 1 ; 6 54ec 0260 MVO@ R0, R4 ; 9 Row 5, card 0 54ed 02a8 MVI@ R5, R0 ; 8 54ee 0260 MVO@ R0, R4 ; 9 Row 6, card 0 54ef 0040 SWAP R0, 1 ; 6 54f0 0260 MVO@ R0, R4 ; 9 Row 7, card 0 54f1 019c ANDR R3, R4 ; 6 54f2 01d4 XORR R2, R4 ; 6 54f3 02a8 MVI@ R5, R0 ; 8 54f4 0260 MVO@ R0, R4 ; 9 Row 0, card 1 54f5 0040 SWAP R0, 1 ; 6 54f6 0260 MVO@ R0, R4 ; 9 Row 1, card 1 54f7 02a8 MVI@ R5, R0 ; 8 54f8 0260 MVO@ R0, R4 ; 9 Row 2, card 1 54f9 0040 SWAP R0, 1 ; 6 54fa 0260 MVO@ R0, R4 ; 9 Row 3, card 1 54fb 02a8 MVI@ R5, R0 ; 8 54fc 0260 MVO@ R0, R4 ; 9 Row 4, card 1 54fd 0040 SWAP R0, 1 ; 6 54fe 0260 MVO@ R0, R4 ; 9 Row 5, card 1 54ff 02a8 MVI@ R5, R0 ; 8 5500 0260 MVO@ R0, R4 ; 9 Row 6, card 1 5501 0040 SWAP R0, 1 ; 6 5502 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ;== 2 5503 02a8 MVI@ R5, R0 ; 8 5504 0260 MVO@ R0, R4 ; 9 Row 0, card 0 5505 0040 SWAP R0, 1 ; 6 5506 0260 MVO@ R0, R4 ; 9 Row 1, card 0 5507 02a8 MVI@ R5, R0 ; 8 5508 0260 MVO@ R0, R4 ; 9 Row 2, card 0 5509 0040 SWAP R0, 1 ; 6 550a 0260 MVO@ R0, R4 ; 9 Row 3, card 0 550b 02a8 MVI@ R5, R0 ; 8 550c 0260 MVO@ R0, R4 ; 9 Row 4, card 0 550d 0040 SWAP R0, 1 ; 6 550e 0260 MVO@ R0, R4 ; 9 Row 5, card 0 550f 02a8 MVI@ R5, R0 ; 8 5510 0260 MVO@ R0, R4 ; 9 Row 6, card 0 5511 0040 SWAP R0, 1 ; 6 5512 0260 MVO@ R0, R4 ; 9 Row 7, card 0 5513 019c ANDR R3, R4 ; 6 5514 01d4 XORR R2, R4 ; 6 5515 02a8 MVI@ R5, R0 ; 8 5516 0260 MVO@ R0, R4 ; 9 Row 0, card 1 5517 0040 SWAP R0, 1 ; 6 5518 0260 MVO@ R0, R4 ; 9 Row 1, card 1 5519 02a8 MVI@ R5, R0 ; 8 551a 0260 MVO@ R0, R4 ; 9 Row 2, card 1 551b 0040 SWAP R0, 1 ; 6 551c 0260 MVO@ R0, R4 ; 9 Row 3, card 1 551d 02a8 MVI@ R5, R0 ; 8 551e 0260 MVO@ R0, R4 ; 9 Row 4, card 1 551f 0040 SWAP R0, 1 ; 6 5520 0260 MVO@ R0, R4 ; 9 Row 5, card 1 5521 02a8 MVI@ R5, R0 ; 8 5522 0260 MVO@ R0, R4 ; 9 Row 6, card 1 5523 0040 SWAP R0, 1 ; 6 5524 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ;== 3 5525 02a8 MVI@ R5, R0 ; 8 5526 0260 MVO@ R0, R4 ; 9 Row 0, card 0 5527 0040 SWAP R0, 1 ; 6 5528 0260 MVO@ R0, R4 ; 9 Row 1, card 0 5529 02a8 MVI@ R5, R0 ; 8 552a 0260 MVO@ R0, R4 ; 9 Row 2, card 0 552b 0040 SWAP R0, 1 ; 6 552c 0260 MVO@ R0, R4 ; 9 Row 3, card 0 552d 02a8 MVI@ R5, R0 ; 8 552e 0260 MVO@ R0, R4 ; 9 Row 4, card 0 552f 0040 SWAP R0, 1 ; 6 5530 0260 MVO@ R0, R4 ; 9 Row 5, card 0 5531 02a8 MVI@ R5, R0 ; 8 5532 0260 MVO@ R0, R4 ; 9 Row 6, card 0 5533 0040 SWAP R0, 1 ; 6 5534 0260 MVO@ R0, R4 ; 9 Row 7, card 0 5535 019c ANDR R3, R4 ; 6 5536 01d4 XORR R2, R4 ; 6 5537 02a8 MVI@ R5, R0 ; 8 5538 0260 MVO@ R0, R4 ; 9 Row 0, card 1 5539 0040 SWAP R0, 1 ; 6 553a 0260 MVO@ R0, R4 ; 9 Row 1, card 1 553b 02a8 MVI@ R5, R0 ; 8 553c 0260 MVO@ R0, R4 ; 9 Row 2, card 1 553d 0040 SWAP R0, 1 ; 6 553e 0260 MVO@ R0, R4 ; 9 Row 3, card 1 553f 02a8 MVI@ R5, R0 ; 8 5540 0260 MVO@ R0, R4 ; 9 Row 4, card 1 5541 0040 SWAP R0, 1 ; 6 5542 0260 MVO@ R0, R4 ; 9 Row 5, card 1 5543 02a8 MVI@ R5, R0 ; 8 5544 0260 MVO@ R0, R4 ; 9 Row 6, card 1 5545 0040 SWAP R0, 1 ; 6 5546 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ;== 4 ;1072 = (32*8 + 12) * 4 5547 0200 0088 B @@mloop_done ; 9 ; 72 ;---- ;1153 0x5549 @@mloop_e: REPEAT 4 5549 019c ANDR R3, R4 ; 6 554a 01d4 XORR R2, R4 ; 6 554b 02a8 MVI@ R5, R0 ; 8 554c 0260 MVO@ R0, R4 ; 9 Row 0, card 0 554d 0040 SWAP R0, 1 ; 6 554e 0260 MVO@ R0, R4 ; 9 Row 1, card 0 554f 02a8 MVI@ R5, R0 ; 8 5550 0260 MVO@ R0, R4 ; 9 Row 2, card 0 5551 0040 SWAP R0, 1 ; 6 5552 0260 MVO@ R0, R4 ; 9 Row 3, card 0 5553 02a8 MVI@ R5, R0 ; 8 5554 0260 MVO@ R0, R4 ; 9 Row 4, card 0 5555 0040 SWAP R0, 1 ; 6 5556 0260 MVO@ R0, R4 ; 9 Row 5, card 0 5557 02a8 MVI@ R5, R0 ; 8 5558 0260 MVO@ R0, R4 ; 9 Row 6, card 0 5559 0040 SWAP R0, 1 ; 6 555a 0260 MVO@ R0, R4 ; 9 Row 7, card 0 555b 02a8 MVI@ R5, R0 ; 8 555c 0260 MVO@ R0, R4 ; 9 Row 0, card 1 555d 0040 SWAP R0, 1 ; 6 555e 0260 MVO@ R0, R4 ; 9 Row 1, card 1 555f 02a8 MVI@ R5, R0 ; 8 5560 0260 MVO@ R0, R4 ; 9 Row 2, card 1 5561 0040 SWAP R0, 1 ; 6 5562 0260 MVO@ R0, R4 ; 9 Row 3, card 1 5563 02a8 MVI@ R5, R0 ; 8 5564 0260 MVO@ R0, R4 ; 9 Row 4, card 1 5565 0040 SWAP R0, 1 ; 6 5566 0260 MVO@ R0, R4 ; 9 Row 5, card 1 5567 02a8 MVI@ R5, R0 ; 8 5568 0260 MVO@ R0, R4 ; 9 Row 6, card 1 5569 0040 SWAP R0, 1 ; 6 556a 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ENDR ;---- ;== 1 556b 019c ANDR R3, R4 ; 6 556c 01d4 XORR R2, R4 ; 6 556d 02a8 MVI@ R5, R0 ; 8 556e 0260 MVO@ R0, R4 ; 9 Row 0, card 0 556f 0040 SWAP R0, 1 ; 6 5570 0260 MVO@ R0, R4 ; 9 Row 1, card 0 5571 02a8 MVI@ R5, R0 ; 8 5572 0260 MVO@ R0, R4 ; 9 Row 2, card 0 5573 0040 SWAP R0, 1 ; 6 5574 0260 MVO@ R0, R4 ; 9 Row 3, card 0 5575 02a8 MVI@ R5, R0 ; 8 5576 0260 MVO@ R0, R4 ; 9 Row 4, card 0 5577 0040 SWAP R0, 1 ; 6 5578 0260 MVO@ R0, R4 ; 9 Row 5, card 0 5579 02a8 MVI@ R5, R0 ; 8 557a 0260 MVO@ R0, R4 ; 9 Row 6, card 0 557b 0040 SWAP R0, 1 ; 6 557c 0260 MVO@ R0, R4 ; 9 Row 7, card 0 557d 02a8 MVI@ R5, R0 ; 8 557e 0260 MVO@ R0, R4 ; 9 Row 0, card 1 557f 0040 SWAP R0, 1 ; 6 5580 0260 MVO@ R0, R4 ; 9 Row 1, card 1 5581 02a8 MVI@ R5, R0 ; 8 5582 0260 MVO@ R0, R4 ; 9 Row 2, card 1 5583 0040 SWAP R0, 1 ; 6 5584 0260 MVO@ R0, R4 ; 9 Row 3, card 1 5585 02a8 MVI@ R5, R0 ; 8 5586 0260 MVO@ R0, R4 ; 9 Row 4, card 1 5587 0040 SWAP R0, 1 ; 6 5588 0260 MVO@ R0, R4 ; 9 Row 5, card 1 5589 02a8 MVI@ R5, R0 ; 8 558a 0260 MVO@ R0, R4 ; 9 Row 6, card 1 558b 0040 SWAP R0, 1 ; 6 558c 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ;== 2 558d 019c ANDR R3, R4 ; 6 558e 01d4 XORR R2, R4 ; 6 558f 02a8 MVI@ R5, R0 ; 8 5590 0260 MVO@ R0, R4 ; 9 Row 0, card 0 5591 0040 SWAP R0, 1 ; 6 5592 0260 MVO@ R0, R4 ; 9 Row 1, card 0 5593 02a8 MVI@ R5, R0 ; 8 5594 0260 MVO@ R0, R4 ; 9 Row 2, card 0 5595 0040 SWAP R0, 1 ; 6 5596 0260 MVO@ R0, R4 ; 9 Row 3, card 0 5597 02a8 MVI@ R5, R0 ; 8 5598 0260 MVO@ R0, R4 ; 9 Row 4, card 0 5599 0040 SWAP R0, 1 ; 6 559a 0260 MVO@ R0, R4 ; 9 Row 5, card 0 559b 02a8 MVI@ R5, R0 ; 8 559c 0260 MVO@ R0, R4 ; 9 Row 6, card 0 559d 0040 SWAP R0, 1 ; 6 559e 0260 MVO@ R0, R4 ; 9 Row 7, card 0 559f 02a8 MVI@ R5, R0 ; 8 55a0 0260 MVO@ R0, R4 ; 9 Row 0, card 1 55a1 0040 SWAP R0, 1 ; 6 55a2 0260 MVO@ R0, R4 ; 9 Row 1, card 1 55a3 02a8 MVI@ R5, R0 ; 8 55a4 0260 MVO@ R0, R4 ; 9 Row 2, card 1 55a5 0040 SWAP R0, 1 ; 6 55a6 0260 MVO@ R0, R4 ; 9 Row 3, card 1 55a7 02a8 MVI@ R5, R0 ; 8 55a8 0260 MVO@ R0, R4 ; 9 Row 4, card 1 55a9 0040 SWAP R0, 1 ; 6 55aa 0260 MVO@ R0, R4 ; 9 Row 5, card 1 55ab 02a8 MVI@ R5, R0 ; 8 55ac 0260 MVO@ R0, R4 ; 9 Row 6, card 1 55ad 0040 SWAP R0, 1 ; 6 55ae 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ;== 3 55af 019c ANDR R3, R4 ; 6 55b0 01d4 XORR R2, R4 ; 6 55b1 02a8 MVI@ R5, R0 ; 8 55b2 0260 MVO@ R0, R4 ; 9 Row 0, card 0 55b3 0040 SWAP R0, 1 ; 6 55b4 0260 MVO@ R0, R4 ; 9 Row 1, card 0 55b5 02a8 MVI@ R5, R0 ; 8 55b6 0260 MVO@ R0, R4 ; 9 Row 2, card 0 55b7 0040 SWAP R0, 1 ; 6 55b8 0260 MVO@ R0, R4 ; 9 Row 3, card 0 55b9 02a8 MVI@ R5, R0 ; 8 55ba 0260 MVO@ R0, R4 ; 9 Row 4, card 0 55bb 0040 SWAP R0, 1 ; 6 55bc 0260 MVO@ R0, R4 ; 9 Row 5, card 0 55bd 02a8 MVI@ R5, R0 ; 8 55be 0260 MVO@ R0, R4 ; 9 Row 6, card 0 55bf 0040 SWAP R0, 1 ; 6 55c0 0260 MVO@ R0, R4 ; 9 Row 7, card 0 55c1 02a8 MVI@ R5, R0 ; 8 55c2 0260 MVO@ R0, R4 ; 9 Row 0, card 1 55c3 0040 SWAP R0, 1 ; 6 55c4 0260 MVO@ R0, R4 ; 9 Row 1, card 1 55c5 02a8 MVI@ R5, R0 ; 8 55c6 0260 MVO@ R0, R4 ; 9 Row 2, card 1 55c7 0040 SWAP R0, 1 ; 6 55c8 0260 MVO@ R0, R4 ; 9 Row 3, card 1 55c9 02a8 MVI@ R5, R0 ; 8 55ca 0260 MVO@ R0, R4 ; 9 Row 4, card 1 55cb 0040 SWAP R0, 1 ; 6 55cc 0260 MVO@ R0, R4 ; 9 Row 5, card 1 55cd 02a8 MVI@ R5, R0 ; 8 55ce 0260 MVO@ R0, R4 ; 9 Row 6, card 1 55cf 0040 SWAP R0, 1 ; 6 55d0 0260 MVO@ R0, R4 ; 9 Row 7, card 1 ;== 4 ;1072 = (32*8 + 12)*4 ; 74 ;---- ;1146 0x55d1 @@mloop_done: ;1153 (Worst case: odd loop) ;2340 (carried forward from above) ;==== ;3493 ; 125 Assumed overhead of reaching ENGINE ;==== ;3618 ;;------------------------------------------------------------------;; ;; Punch line: GRAM is available for ~3796 cycles, which means ;; ;; we can tolerate interrupts disabled for up to ~178 cycles. ;; ;;------------------------------------------------------------------;; 0x55d1 @@nomtn: ;;------------------------------------------------------------------;; ;; Do remainder of spinner update. ;; ;;------------------------------------------------------------------;; 55d1 0285 016d MVI SPINCNT,R5 ; 10 Point to the spinner's frame counter 55d3 00a9 MOVR R5, R1 ; 6 55d4 03b9 0080 ANDI #$80, R1 ; 8 55d6 02fd 0004 ADDI #4, R5 ; 8 Update the frame counter 55d8 03bd 007c ANDI #31*4, R5 ; 8 Mask away the fractional portion 55da 01cd XORR R1, R5 ; 6 55db 0245 016d MVO R5, SPINCNT ; 11 Store it back out ;---- ; 57 ;3618 ;---- ;3675 ENDP ; falls into remainder of ENGINE1 which is outside the PROC 0x55dd @@foo: ;;------------------------------------------------------------------;; ;; Skip card oriented updates if we're not at normal game screen. ;; ;;------------------------------------------------------------------;; 55dd 0280 0119 MVI EMODE, R0 ; 10 55df 0010 DECR R0 ; 6 55e0 020c 01bf BNEQ E1.skip_card ; 7/9 ;---- ; 23 ;;------------------------------------------------------------------;; ;; Finish constructing current frame's "state of the world." ;; ;;------------------------------------------------------------------;; ; ICALL upcrd ;1331 Do card-oriented updates. INCLUDE "engine/upcrd.asm" ;1331 Do card-oriented updates. ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; UPCRD Do card-oriented screen updates (scroll cards, decode world) ;; ;;==========================================================================;; 0x55e2 UPCRD PROC ; PSHR R5 ;;------------------------------------------------------------------;; ;; If we're displaying a horizontal bullet, undisplay it. ;; ;;------------------------------------------------------------------;; 55e2 0281 0110 MVI HBCOL0, R1 ; 10 Get horizontal bullet column 55e4 0339 0002 SUBI #2, R1 ; 8 0 means no horizontal bullet ; 1 means bullet going away 55e6 020b 0006 BMI @@nohb0 ; 7/9 Skip if no bullet 55e8 02f9 02a1 ADDI #GROW+1,R1 ; 8 Make ptr to screen 55ea 0288 MVI@ R1, R0 ; 8 \ 55eb 03b8 8e00 ANDI #$8E00, R0 ; 8 |-- Undisplay the bullet 55ed 0248 MVO@ R0, R1 ; 9 / 0x55ee @@nohb0: ;---- ; 58 ;;------------------------------------------------------------------;; ;; Determine if we need to move the "ground terrain" by a card. ;; ;;------------------------------------------------------------------;; 55ee 0280 0105 MVI PGPHAS, R0 ; 10 Get ground phase 55f0 0064 SLR R0, 2 ; 8 55f1 0060 SLR R0, 1 ; 6 Bits 7..3 are card offset 55f2 0340 0108 CMP PGCARD, R0 ; 10 Same as before? 55f4 0204 00b8 BEQ @@no_bot ; 7/9 Don't do the ground then. 55f6 0240 0108 MVO R0, PGCARD ; 11 save new ground card offset. ;---- ; 52 55f8 0280 0115 MVI HBKOS, R0 ; 10 55fa 0010 DECR R0 ; 6 55fb 020b 000a BMI @@nohbkos ; 7/9 55fd 01c0 CLRR R0 ; 6 \ 55fe 0240 0115 MVO R0, HBKOS ; 11 | 5600 0240 010f MVO R0, HBDATA ; 11 | 5602 0240 0111 MVO R0, HBCOL1 ; 11 |-- We hit the rock, so nuke the 5604 0008 INCR R0 ; 6 | bullet too. 5605 0240 0110 MVO R0, HBCOL0 ; 11 / 0x5607 @@nohbkos ;---- ; 79 ; 52 (carried forward) ; 58 (carried forward) ;---- ; 189 (worst case) ;;------------------------------------------------------------------;; ;; Update the crater-maker refire counter. ;; ;;------------------------------------------------------------------;; 5607 0283 010d MVI CRATCNT, R3 ; 10 \ 5609 0013 DECR R3 ; 6 |__ Decrement the crater re-fire 560a 020b 0002 BMI @@ccz ; 7/9 | counter. Don't let it go -ve. 560c 0243 010d MVO R3, CRATCNT ; 11 / 0x560e @@ccz: ;---- ; 34 ; 189 (carried forward) ;---- ; 223 ;;------------------------------------------------------------------;; ;; Scroll the ground by one card. ;; ;;------------------------------------------------------------------;; 560e 02bc 02a0 MVII #GROW, R4 ; 8 5610 02bd 02a1 MVII #GROW+1, R5 ; 8 5612 0280 02a0 MVI GROW, R0 ; 10 5614 03b8 2000 ANDI #$2000, R0 ; 8 5616 03e8 XOR@ R5, R0 ; 8 ;---- ; 42 5617 0260 @@crow MVO@ R0, R4 ; 9 REPEAT 18 5618 02a8 MVI@ R5, R0 ; 8 5619 0260 MVO@ R0, R4 ; 9 ENDR ;---- ;== 1 561a 02a8 MVI@ R5, R0 ; 8 561b 0260 MVO@ R0, R4 ; 9 ;== 2 561c 02a8 MVI@ R5, R0 ; 8 561d 0260 MVO@ R0, R4 ; 9 ;== 3 561e 02a8 MVI@ R5, R0 ; 8 561f 0260 MVO@ R0, R4 ; 9 ;== 4 5620 02a8 MVI@ R5, R0 ; 8 5621 0260 MVO@ R0, R4 ; 9 ;== 5 5622 02a8 MVI@ R5, R0 ; 8 5623 0260 MVO@ R0, R4 ; 9 ;== 6 5624 02a8 MVI@ R5, R0 ; 8 5625 0260 MVO@ R0, R4 ; 9 ;== 7 5626 02a8 MVI@ R5, R0 ; 8 5627 0260 MVO@ R0, R4 ; 9 ;== 8 5628 02a8 MVI@ R5, R0 ; 8 5629 0260 MVO@ R0, R4 ; 9 ;== 9 562a 02a8 MVI@ R5, R0 ; 8 562b 0260 MVO@ R0, R4 ; 9 ;== 10 562c 02a8 MVI@ R5, R0 ; 8 562d 0260 MVO@ R0, R4 ; 9 ;== 11 562e 02a8 MVI@ R5, R0 ; 8 562f 0260 MVO@ R0, R4 ; 9 ;== 12 5630 02a8 MVI@ R5, R0 ; 8 5631 0260 MVO@ R0, R4 ; 9 ;== 13 5632 02a8 MVI@ R5, R0 ; 8 5633 0260 MVO@ R0, R4 ; 9 ;== 14 5634 02a8 MVI@ R5, R0 ; 8 5635 0260 MVO@ R0, R4 ; 9 ;== 15 5636 02a8 MVI@ R5, R0 ; 8 5637 0260 MVO@ R0, R4 ; 9 ;== 16 5638 02a8 MVI@ R5, R0 ; 8 5639 0260 MVO@ R0, R4 ; 9 ;== 17 563a 02a8 MVI@ R5, R0 ; 8 563b 0260 MVO@ R0, R4 ; 9 ;== 18 ; 306 563c 000d INCR R5 ; 6 563d 000c INCR R4 ; 6 563e 02a8 MVI@ R5, R0 ; 8 563f 037d 02c8 CMPI #GROW+40, R5 ; 8 5641 0225 002b BLT @@crow ; 9/7 ;---- ; 702 (2 iterations: 352 + 350) ; 42 (carried forward) ;---- ; 744 IF 0 MVI EMODE, R0 ; 10 \ CMPI #2, R0 ; 8 |- Skip decoding rocks (title) BEQ @@done_upcrd ; 9 / ;---- ; 27 ; 223 (carried forward) ; 744 (carried forward) ;---- ; 994 ELSE ; 223 ; 744 ;---- ; 967 ENDI ;;------------------------------------------------------------------;; ;; Decode next Rock/Crater/Cue/Exit/Caution whatever. ;; ;;------------------------------------------------------------------;; 5643 0282 0160 MVI RCCNT, R2 ; 10 \ 5645 0012 DECR R2 ; 6 |- Count down between items 5646 0242 0160 MVO R2, RCCNT ; 11 / 5648 0203 0052 BPL @@done_nxtrc ; 7/9 Leave if count's not expired ; 564a 0285 0338 MVI RCIDX, R5 ; 10 Get current world pointer 564c 02ab MVI@ R5, R3 ; 8 Get next word from world 564d 0245 0338 MVO R5, RCIDX ; 11 Save new world pointer 564f 0053 RLC R3 ; 6 extract bit 15 5650 0063 SLR R3 ; 6 5651 0243 0160 MVO R3, RCCNT ; 11 store the rock/crater count 5653 03bb ff00 ANDI #$FF00, R3 ; 8 clear count byte (does not clobber C) 5655 0043 SWAP R3 ; 6 details in lower byte 5656 0201 001c BC @@cue_spawn ; 7/9 if bit 15 == 1, this is a spawn 5658 0204 001f BEQ @@end_of_lvl ; 7/9 if it's all 0000s, end of world ; BNC @@do_rc ; if bit 15 == 0, it's rock/crater ; 967 (carried forward) ;---- ;1076 (to cue_spawn) ;1083 (to end_of_level) ;1081 (fallthru) 0x565a @@do_rc: 565a 037b 0060 CMPI #$60, R3 ; 8 \_ $60 - $7F: Exit flags 565c 0201 003a BC @@exitmarker ; 7/9 / ;---- ;1098 to exitmarker 565e 037b 0020 CMPI #$20, R3 ; 8 \_ $20 - $3B: Level marker 5660 0201 001f BC @@lvlmarker ; 7/9 / ;---- ;1115 to levelmarker 5662 037b 001c CMPI #$1C, R3 ; 8 \_ $1C - $1F: Caution lamp 5664 0201 002a BC @@caution ; 7/9 / ;---- ;1128 to caution ;1126 (fallthru) 5666 0281 0161 MVI RCPIC, R1 ; 10 5668 02f9 d314 ADDI #RCS1-1,R1 ; 8 566a 0289 MVI@ R1, R1 ; 8 566b 0011 DECR R1 ; 6 566c 0204 0002 BEQ @@notcratz ; 7/9 566e 02bb 001a MVII #RCS1.cratz - RCS1 + 1, R3 ; 8 0x5670 @@notcratz 5670 0243 0161 MVO R3, RCPIC ; 10 5672 0200 0028 B @@done_nxtrc ; 9 ;---- ;1184 (fallthru) 0x5674 @@cue_spawn: 5674 000b INCR R3 ; 6 5675 0243 011a @@c: MVO R3, CUENUM ; 10 5677 0200 0023 B @@done_nxtrc ; 9 ;---- ; 25 ;1076 ;---- ;1101 0x5679 @@end_of_lvl: 5679 0015 DECR R5 ; 6 \ 567a 0245 0338 MVO R5, RCIDX ; 10 | Just stay stuck at end. 567c 0013 DECR R3 ; 6 |- Hitting the 'Z' marker will 567d 0243 0160 MVO R3, RCCNT ; 10 | take us to next world. 567f 0200 001b B @@done_nxtrc ; 9 / ;---- ; 41 ;1083 ;---- ;1124 0x5681 @@lvlmarker 5681 000b INCR R3 ; 6 \_ Store out the level marker 5682 0243 0167 MVO R3, LMCHAR ; 10 / character 5684 02bb 00a8 MVII #168, R3 ; 8 \_ Put it off right-hand side 5686 0243 0166 MVO R3, LMCNT ; 10 / 5688 0245 0162 MVO R5, RCNXT ; 10 \ 568a 00a8 MOVR R5, R0 ; 6 |_ Remember decoding position 568b 0040 SWAP R0 ; 6 | so we can restore it on death 568c 0240 0163 MVO R0, RCNXT+1 ; 10 / 568e 0200 000c B @@done_nxtrc ; 9 ;---- ; 75 ;1115 ;---- ;1190 0x5690 @@caution: 5690 03bb 0003 ANDI #$3, R3 ; 8 2 LSBs are caution color 5692 02fb 0020 ADDI #8*4, R3 ; 8 6 MSBs are blink count 5694 0243 0136 MVO R3, CAUTFL ; 10 Start it a-blinkin' 5696 0200 0004 B @@done_nxtrc ; 9 ;---- ; 35 ;1128 ;---- ;1163 0x5698 @@exitmarker 5698 02fb 0021 ADDI #$21, R3 ; 8 \_ Exits are a special cue 569a 0243 011a MVO R3, CUENUM ; 10 / ;---- ; 18 ;1098 ;---- ;1116 0x569c @@done_nxtrc: ;1190 <-- worst case to here 569c 02bb d32e MVII #RCS2-1,R3 ; 8 \ 569e 02c3 0161 ADD RCPIC, R3 ; 10 |__ Copy over the top card from 56a0 029a MVI@ R3, R2 ; 8 | the current rock/crater 56a1 0242 02c7 MVO R2, GROW+39 ; 11 / 56a3 033b 001a SUBI #RCS2-RCS1, R3 ; 8 \ 56a5 029a MVI@ R3, R2 ; 8 |-- Copy over the bottom card 56a6 0242 02b3 MVO R2, GROW+19 ; 11 / 56a8 005a SLLC R2 ; 6 \ 56a9 002b ADCR R3 ; 6 |__ Increment our picture ptr if 56aa 033b d314 SUBI #RCS1-1,R3 ; 8 | MSB was set. 56ac 0243 0161 MVO R3, RCPIC ; 11 / ;---- ; 87 ;1190 ;---- ;1277 0x56ae @@no_bot: 0x56ae @@done_upcrd: ENDP ;__ ;;------------------------------------------------------------------;; ;; Before we update the "state of the world", check collisions. ;; ;;------------------------------------------------------------------;; ; ICALL ckbrc ;1000 Check for buggy/rock/crater collision INCLUDE "engine/ckbrc.asm" ;1000 Check for buggy/rock/crater collision ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; CKBRC Check buggy vs. rocks and craters. ;; ;;==========================================================================;; 0x56ae CKBRC PROC 56ae 0281 015d MVI TXLO, R1 ; 10 Get x position 56b0 008a MOVR R1, R2 ; 6 \ 56b1 0066 SLR R2, 2 ; 8 |__ Point R2 at card on ground to 56b2 0062 SLR R2, 1 ; 6 | check against. 56b3 0094 MOVR R2, R4 ; 6 use auto-incr pointer 56b4 0095 MOVR R2, R5 ; 6 use auto-incr pointer 56b5 02fc 02a0 ADDI #GROW, R4 ; 8 / 56b7 02fd 02b4 ADDI #GROW+20, R5 ; 8 / 56b9 03b9 0007 ANDI #7, R1 ; 8 56bb 0339 0008 SUBI #8, R1 ; 8 56bd 0280 0105 MVI PGPHAS, R0 ; 10 56bf 03b8 0007 ANDI #7, R0 ; 8 56c1 00c1 ADDR R0, R1 ; 6 56c2 0021 NEGR R1 ; 6 offset = -((buggy_x&7-8) + (gphase&7)) 56c3 02ba 0003 MVII #3, R2 ; 8 Check 3 cards ;---- ; 112 0x56c5 @@i_loop: 56c5 02a3 MVI@ R4, R3 ; 8 Get card for maybe-rock 56c6 009b TSTR R3 ; 6 MSB tells us if it's maybe a rock 56c7 0203 003e BPL @@buggy_ok ; 7/9 set == maybe a rock 56c9 03bb 01f8 ANDI #$1F8, R3 ; 8 Extract card number 56cb 020c 0004 BNEQ @@not_crater ; 7/9 If != 0, it's not a crater 56cd 02ab MVI@ R5, R3 ; 8 Get card for maybe-crater 56ce 03bb 01f8 ANDI #$1F8, R3 ; 8 Extract card number 56d0 0015 DECR R5 ; 6 0x56d1 @@not_crater ;---- ; 43 (worst case) 56d1 0067 SLR R3, 2 ; 8 \ 56d2 0063 SLR R3, 1 ; 6 | 56d3 033b 002c SUBI #RCARD, R3 ; 8 |-- if it's a rock card. Skip it 56d5 0205 0030 BLT @@buggy_ok ; 7/9 | if it's not a rock. 56d7 037b 000c CMPI #12, R3 ; 8 | 56d9 020d 002c BGE @@buggy_ok ; 7/9 / ;---- ; 44 (worst case) ; 43 (carried forward) ;---- ; 87 ; Calculate offset and do the table lookup. 56db 02fb 5c5f ADDI #MJHIDX,R3 ; 8 Get per-card index 56dd 029b MVI@ R3, R3 ; 8 Get index into MinJumpHeight table 56de 00cb ADDR R1, R3 ; 6 Add our buggy_x/gphase offset 56df 0006 CLRC ; 6 56e0 0073 RRC R3 ; 6 56e1 029b MVI@ R3, R3 ; 8 56e2 002f ADCR PC ; 7 56e3 0043 SWAP R3 ; 6 56e4 03bb 01fe ANDI #$1FE, R3 ; 8 56e6 0343 0343 CMP JHGT, R3 ; 10 56e8 0206 0009 BLE @@maybe_score ; 7/9 Buggy's ok, try to score. ;---- ; 65 (worst case) ; 87 (carried forward) ;---- ; 152 56ea 01c0 CLRR R0 ; 6 \__ Set the "We Died!" flag 56eb 0240 0135 MVO R0, MOBHIT ; 11 / 56ed 0240 013b MVO R0, DEFSCO ; 11 56ef 0240 0156 MVO R0, LANDED ; 11 56f1 0200 001f B @@leave ; 9 ; (won't bother counting "died" case) 0x56f3 @@maybe_score 56f3 0014 DECR R4 ; 6 56f4 02a3 MVI@ R4, R3 ; 8 \ 56f5 0098 MOVR R3, R0 ; 6 | 56f6 03bb 0600 ANDI #$0600, R3 ; 8 | Bits 9/10 hold score for 56f8 0204 000d BEQ @@buggy_ok ; 7/9 |- object. 1 = 500, 2 = 750 56fa 01d8 XORR R3, R0 ; 6 | 3 = 1000. Clear to 0 on 56fb 0014 DECR R4 ; 6 | scoring. 56fc 0260 MVO@ R0, R4 ; 9 / 56fd 0063 SLR R3 ; 6 \ 56fe 0043 SWAP R3 ; 6 | 56ff 000b INCR R3 ; 6 |- Score(250) * (bit[10:9] + 1) 5700 0098 MOVR R3, R0 ; 6 | 5701 004f SLL R3, 2 ; 8 / 5702 02c3 013b ADD DEFSCO, R3 ; 10 \ 5704 00c3 ADDR R0, R3 ; 6 |- Add to deferred score 5705 0243 013b MVO R3, DEFSCO ; 11 / ;---- ; 115 ; 152 (carried forward) ;---- ; 267 0x5707 @@buggy_ok: 5707 000d INCR R5 ; 6 5708 02f9 0008 ADDI #8, R1 ; 8 Move offset by 8 570a 0012 DECR R2 ; 6 570b 022c 0047 BNEQ @@i_loop ; 7/9 ;---- ; 29 ; 267 (carried forward) ;---- ; 296 per iteration ;==== x 3 iterations ; 888 ; 112 (carried forward) ;---- ;1000 570d 0280 0156 MVI LANDED, R0 570f 0048 SLL R0, 1 5710 0240 0156 MVO R0, LANDED ;; ---------------------------------------------------------------- ;; ;; Note: Above cycle analysis is very pessimistic. The full ;; ;; code "maybe_score" runs on at most 1 of the 3 iterations. ;; ;; This shaves 156 cycles. ;; ;; ---------------------------------------------------------------- ;; 0x5712 @@leave: ; JR R5 ; 7 ENDP ;__ ; ICALL uphbp ; 596 Update the horizontal bullet INCLUDE "engine/uphbp.asm" ; 596 Update the horizontal bullet ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; UPHBP Do all the horizontal-bullet related updates. ;; ;;==========================================================================;; 0x5712 UPHBP PROC ;;------------------------------------------------------------------;; ;; If we're displaying a horizontal bullet, redisplay it. ;; ;;------------------------------------------------------------------;; 5712 0281 0111 MVI HBCOL1, R1 ; 10 Get horizontal bullet column 5714 0065 SLR R1, 2 ; 8 5715 0241 0110 MVO R1, HBCOL0 ; 11 5717 0011 DECR R1 ; 6 Zero means no horizontal bullet 5718 020b 0079 BMI @@nohb ; 7/9 Skip if no bullet 571a 02f9 02a0 ADDI #GROW, R1 ; 8 Make ptr to screen 571c 0288 MVI@ R1, R0 ; 8 Get old data 571d 03b8 01f8 ANDI #$1F8, R0 ; 8 Can we display here? 571f 0204 0053 BEQ @@disphb ; 7/9 If zero, all's cool. ;---- ; 73 ;;------------------------------------------------------------------;; ;; We can't display, so we must've hit something! ;; ;;------------------------------------------------------------------;; 5721 008c MOVR R1, R4 ; 6 \ 5722 0064 SLR R0, 2 ; 8 | 5723 0060 SLR R0, 1 ; 6 | 5724 0338 002c SUBI #RCARD, R0 ; 8 |-- Did we hit a rock? 5726 0205 0040 BLT @@killhb ; 7/9 | 5728 0378 0007 CMPI #7, R0 ; 8 | 572a 020d 003c BGE @@killhb ; 7/9 / 572c 0048 SLL R0, 1 ; 6 \ 572d 00c7 ADDR R0, PC ; 7 | 572e 0200 001a B @@rk12a ; 9 | 5730 0200 0016 B @@rk12b ; | 5732 0200 0016 B @@rk12a ; |-- Yes: Dispatch to handler for 5734 0200 0012 B @@rk12b ; | specific rock we hit. 5736 0200 0005 B @@rk3a ; | 5738 0200 0001 B @@rk3b ; | ; B @@rk3c ; / ;---- ; 72 ; 73 (carried forward) ;---- ; 145 573a 0014 @@rk3c DECR R4 ; 6 573b 0014 @@rk3b DECR R4 ; 6 573c 01c9 CLRR R1 ; 6 kill hb right away 573d 02b8 0001 @@rk3a MVII #1, R0 ; 8 Rock 3, first card 573f 0260 MVO@ R0, R4 ; 9 \ 5740 02b8 9973 MVII #RCARD2x, R0 ; 8 |__ For Rock 3, demote to Rock 2 5742 0260 MVO@ R0, R4 ; 9 | starting at Rock 3's 2nd card. 5743 02f8 0408 ADDI #8+RCS1.sc750-$8000,R0 ;8 | 5745 0260 MVO@ R0, R4 ; 9 / 5746 0200 0006 B @@donerock ; 9 ;---- ; 78 ; 145 (carried fwd) ;---- ; 223 5748 0014 @@rk12b DECR R4 ; 6 5749 01c9 CLRR R1 ; 6 kill hb right away 574a 02b8 0001 @@rk12a MVII #$1, R0 ; 8 Rock 1/2, first card 574c 0260 MVO@ R0, R4 ; 9 \_ For rock 1 & 2, just nuke rock. 574d 0260 MVO@ R0, R4 ; 9 / ;---- ; 38 ; 145 (carried fwd) ;---- ; 183 0x574e @@donerock: ; CSTSCO 1000 ; ? 1000 points per rock segment 574e 0004 0168 022a CALL ADDSCORE.cst 5751 0014 DECLE (1000) / 50 ; ? 1000 points per rock segment ; MOVR R5, R0 ; 5752 0004 0168 035c CALL PLAYSFX ; 75 Yes: Play a sound effect. 5755 0005 DECLE FXLGEXP ; ; MOVR R0, R5 ; ; Decide if we're going to let the bullet animate for the rest of ; this card. 5756 0089 TSTR R1 ; 6 5757 0204 000f BEQ @@killhb ; 7/9 5759 0280 0111 MVI HBCOL1, R0 ; 10 \ 575b 0018 COMR R0 ; 6 | 575c 03b8 0003 ANDI #3, R0 ; 8 |- R0: # frames left in this card 575e 0204 0008 BEQ @@killhb ; 7/9 / 5760 0240 0112 MVO R0, HBCNT ; 11 \ Yes: Let it animate to end of 5762 02b8 0001 MVII #1, R0 ; 8 |- card, but kill it if UPCRD 5764 0240 0115 MVO R0, HBKOS ; 11 / decides it's time to scroll. 5766 0200 000c B @@disphb ; 9 ;---- ; 83 0x5768 @@killhb: 5768 01c0 CLRR R0 ; 6 \ 5769 0240 0115 MVO R0, HBKOS ; 11 | 576b 0240 010f MVO R0, HBDATA ; 11 | 576d 0240 0111 MVO R0, HBCOL1 ; 11 |-- We hit the rock, so nuke the 576f 0008 INCR R0 ; 6 | bullet too. 5770 0240 0110 MVO R0, HBCOL0 ; 11 / 5772 0200 001f B @@nohb ; 9 ; (not critical path) 0x5774 @@disphb: 5774 0288 MVI@ R1, R0 ; 8 \ 5775 03b8 8600 ANDI #$8600, R0 ; 8 |__ Display bullet, preserving 5777 03f8 08e0 XORI #HBCARDx, R0 ; 8 | any flag bits we may have set. 5779 0248 MVO@ R0, R1 ; 9 / ;---- ; 33 ; ;;------------------------------------------------------------------;; ;; Update the horizontal bullet position if in flight. ;; ;;------------------------------------------------------------------;; 577a 0280 0111 MVI HBCOL1, R0 ; 10 Get bullet column 577c 0008 INCR R0 ; 6 Move by one pixel 577d 0282 0112 MVI HBCNT, R2 ; 10 Decrement our flight counter 577f 0012 DECR R2 ; 6 5780 020b 000b BMI @@hbdie ; 7/9 Kill the bullet if it dies. 5782 0242 0112 MVO R2, HBCNT ; 11 Store updated flight counter 5784 0281 010f MVI HBDATA, R1 ; 10 \___ Bullet moves right by 2 pixels 5786 0065 SLR R1, 2 ; 8 / 5787 020c 0006 BNEQ @@hbcok ; 7/9 If bullet still in card, that's it. 5789 02b9 00c0 MVII #$C0, R1 ; 8 Put pixels at left of byte. 578b 0200 0002 B @@hbcok ; 9 ;---- ; 92 ; 33 (carried fwd) ; 75 (carried fwd) ; 83 (carried fwd) ; 223 (carried fwd) ;---- ; 506 578d 01c0 @@hbdie CLRR R0 ; No: Bullet must die. 578e 01c9 CLRR R1 ; 578f 0240 0111 @@hbcok MVO R0, HBCOL1 ; 11 Store new column 5791 0241 010f MVO R1, HBDATA ; 11 Store new pixel data. ;---- ; 22 ; 506 (carried fwd) ;---- ; 528 0x5793 @@nohb: ;;------------------------------------------------------------------;; ;; Decrement our re-fire counter. Rate-limits the buggy's firing. ;; ;;------------------------------------------------------------------;; 5793 0280 016b MVI FCNT, R0 ; 10 5795 0010 DECR R0 ; 6 5796 020b 0002 BMI @@fcntok ; 7/9 5798 0240 016b MVO R0, FCNT ; 11 0x579a @@fcntok 579a 0280 0113 MVI HBCNT2, R0 ; 10 579c 0010 DECR R0 ; 6 579d 020b 0002 BMI @@hbcnt2ok ; 7/9 579f 0240 0113 MVO R0, HBCNT2 ; 11 0x57a1 @@hbcnt2ok ;---- ; 68 ; 528 ;---- ; 596 ; Note: omits cost of CSTSCO. ; JR R5 ENDP ;__ ;---- ;6625 0x57a1 E1.skip_card: ; XXX card-update skip hack for debug screen. ;;------------------------------------------------------------------;; ;; Remainder of engine is not safely reentrant. ;; ;;------------------------------------------------------------------;; 57a1 0003 DIS ; 4 \ 57a2 02b9 0001 MVII #1, R1 ; 8 | !!Critical Section!! 57a4 0341 016c CMP EBSY, R1 ; 10 | Check our "ENGINE IS BUSY" flag, ; |-- and if we're busy, just drop a 57a6 0241 016c MVO R1, EBSY ; 11 | frame. :-( Not that I like that. 57a8 020c 0007 BNEQ E1.not_busy ; 9 / ;---- ; 48 ; 19 ;==== ; 67 57aa 02c1 0118 ADD FDROP, R1 ; \ If we drop a frame, disable all ; |__ tasks for this frame by just 57ac 0241 0118 MVO R1, FDROP ; | returning Also, increment our 57ae 0004 036d 0216 JE MISCISR.1 ; / frame-drop count. (debugging) 0x57b1 E1.not_busy: 57b1 01c9 CLRR R1 ; 6 57b2 0241 0340 MVO R1, MPTR ; 11 clear MPTR for next time. ;;------------------------------------------------------------------;; ;; Done with very-time-sensitive vertical-blanking stuff. ;; ;; Queue up ENGINE2 and chain return via MISCISR. ;; ;;------------------------------------------------------------------;; ;;@@end: 57b4 0280 0173 MVI DOENG, R0 ; 10 57b6 0008 INCR R0 ; 6 57b7 0240 0173 MVO R0, DOENG ; 11 57b9 0340 0349 CMP SDATP, R0 ; 10 57bb 0209 0001 BNC E1.muxok ; 7/9 57bd 01c0 CLRR R0 ; 6 0x57be E1.muxok 57be 0240 019c MVO R0, MUXOK ; 11 allow muxing again 57c0 0004 036d 0216 JE MISCISR.1 ; 177 (includes return from ISR cost) ;---- ; 255 ; 67 (carried forward) ;6625 ;==== ;6947 ; ENDP ;__ 57c3 01c0 57c4 0240 016c 57c6 0280 0135 57c8 0080 57c9 0204 0413 57cb 0281 0343 57cd 0089 57ce 020c 0017 57d0 0281 0171 57d2 0280 0170 57d4 0101 57d5 0204 0010 57d7 020b 0002 57d9 02f9 001f 57db 007d 57dc 007d 57dd 0079 57de 0379 fffe 57e0 020d 0002 57e2 02b9 fffe 57e4 00c8 57e5 0240 0170 57e7 0280 0170 57e9 0008 57ea 0083 57eb 02c0 033d 57ed 03b8 0fff 57ef 0240 033d 57f1 0040 57f2 0240 0105 57f4 03b8 0007 57f6 0082 57f7 02fa fa42 57f9 0292 57fa 0242 010e 57fc 0282 0140 57fe 037a 00ed 5800 0204 0009 5802 0082 5803 004a 5804 00c2 5805 004e 5806 004e 5807 02fa f700 5809 0242 0342 580b 0280 0172 580d 03f8 0080 580f 0338 0081 5811 0240 0172 5813 02c0 0343 5815 020e 000c 5817 0008 5818 02c0 0156 581a 0240 0156 581c 01c0 581d 0240 0172 581f 0240 0343 5821 0200 0006 5823 0240 0343 5825 02bc fa58 5827 0200 000d 5829 0281 0170 582b 006d 582c 02c1 0105 582e 03b9 0007 5830 0339 0008 5832 02bc fa52 5834 00e1 5835 02cc 5836 0244 0341 5838 0098 5839 0099 583a 009a 583b 006d 583c 00c8 583d 006c 583e 0068 583f 02c0 033f 5841 03b8 1fff 5843 0240 033f 5845 00da 5846 006e 5847 0093 5848 006f 5849 011a 584a 02c2 033e 584c 0283 010a 584e 0043 584f 001b 5850 019a 5851 0242 033e 5853 0040 5854 0042 5855 03b8 001f 5857 03ba 003f 5859 01db 585a 0281 010b 585c 0159 585d 0204 0004 585f 0342 0104 5861 020c 0008 5863 0340 0103 5865 020c 0025 5867 0342 0104 5869 0204 003e 586b 0242 0104 586d 0093 586e 03bb 0007 5870 0043 5871 0067 5872 0063 5873 0280 0109 5875 0040 5876 00c3 5877 01c9 5878 0341 010c 587a 0241 010b 587c 0204 0005 587e 03ba 0018 5880 004a 5881 0200 0004 5883 03ba 0038 5885 02b8 3840 5887 02b8 3840 5889 00c2 588a 0200 001b 588c 0240 0103 588e 0083 588f 0082 5890 03bb 0007 5892 0043 5893 0067 5894 0063 5895 02fb f000 5897 02b9 0002 5899 0341 010c 589b 0241 010b 589d 020c 0002 589f 02fb 0600 58a1 03ba 0018 58a3 004a 58a4 02b8 39c0 58a6 00c2 58a7 0240 0344 58a9 0243 0340 58ab 0242 033c ;;------------------------------------------------------------------;; ;; Update sound effects and music ;; ;;------------------------------------------------------------------;; 58ad 0004 016c 01fb CALL UPSND ; ? 58b0 0280 0119 MVI EMODE, R0 ; 10 \ 58b2 02bd 5969 MVII #E2.spdone, R5 ; 8 | If EMODE==0, don't display 58b4 0010 DECR R0 ; 6 |__ sprites. Return to spdone. 58b5 020b 056e BMI CLRSP ; 7/9 | If EMODE==2 do the title-screen 58b7 02bd 5bcb MVII #E2.bgdone, R5 ; 8 | specific stuff. Return to 58b9 020c 04d8 BNEQ TTLSP ; 7/9 / E2.bgdone. ;---- ; 38 (fall thru) ; 16 (carried forward) ; 943 (carried forward) ;---- ; 997 58bb 0004 015c 0165 CALL UPBSP ; 246 Update moon-buggy sprites ; ICALL upspp ;1207 Update sprite positions INCLUDE "engine/upspp.asm" ;1207 Update sprite positions ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; UPSPP Updates sprite positions based on velocities ;; ;;==========================================================================;; 0x58be UPSPP PROC ; PSHR R5 ; ;;------------------------------------------------------------------;; ;; Determine if the display scrolled horizontally by 1 pixel ;; ;;------------------------------------------------------------------;; 58be 0280 0105 MVI PGPHAS, R0 ; 10 \ 58c0 0340 0106 CMP PPGPHA, R0 ; 10 |- See if screen moved 58c2 0240 0106 MVO R0, PPGPHA ; 11 / 58c4 0204 0032 BEQ @@no_hscroll ; 7/9 ;---- ; 38 (fallthru) ;;------------------------------------------------------------------;; ;; When horiz-scrolling, update the level marker if it's active. ;; ;;------------------------------------------------------------------;; 0x58c6 @@lmscroll: 58c6 0281 0166 MVI LMCNT, R1 ; 10 Get current level marker posn 58c8 0241 02f7 MVO R1, SDAT+7 ; 11 Funky MOB 7 disable if no LMCHAR 58ca 0011 DECR R1 ; 6 Slide it left 1 58cb 020b 0029 BMI @@no_level_marker ; 7/9 \ 58cd 0241 0166 MVO R1, LMCNT ; 11 |- Store it, or leave if none. 58cf 0204 0025 BEQ @@no_level_marker ; 7/9 / ;---- ; 52 (fallthru) 58d1 02bc d106 MVII #SPATLM, R4 ; 8 point to level marker sprite attrs 58d3 02a0 MVI@ R4, R0 ; 8 get level marker X info 58d4 00c8 ADDR R1, R0 ; 6 offset for X position 58d5 0240 02f7 MVO R0, SDAT+7 ; 11 store to MOB 7's X reg. 58d7 02a0 MVI@ R4, R0 ; 8 get level marker Y info 58d8 0240 02ff MVO R0, SDAT+15 ; 11 store to MOB 7's Y reg. 58da 0280 0167 MVI LMCHAR, R0 ; 10 58dc 0048 SLL R0, 1 ; 6 58dd 004c SLL R0, 2 ; 8 ;---- ; 76 58de 0378 0200 CMPI #$200, R0 ; 8 is it a major ckpt? 58e0 0209 000c BNC @@not_major_ckpt ; 7/9 58e2 0338 0100 SUBI #$100, R0 ; 8 rewind back to uppercase 58e4 0281 0169 MVI TIMTIC, R1 ; 10 \ 58e6 03b9 0004 ANDI #4, R1 ; 8 | 58e8 020c 0004 BNEQ @@not_major_ckpt ; 7/9 |- Blink major checkpoints 58ea 03f8 1000 XORI #X_GRY, R0 ; 8 | 58ec 0200 0005 B @@skip_color ; 9 / ;---- ; 65 (fall thru -> skip_color) ; 50 (2nd br to not_major_ckpt) 0x58ee @@not_major_ckpt 58ee 0281 013a MVI COURSE, R1 ; 10 \ 58f0 02f9 5f9d ADDI #CCTBL, R1 ; 8 |- add course-specific color. 58f2 02c8 ADD@ R1, R0 ; 8 / 0x58f3 @@skip_color 58f3 03e0 XOR@ R4, R0 ; 8 get level marker other attributes 58f4 0240 0307 MVO R0, SDAT+23 ; 11 store to MOB 7's A reg. ;---- ; 45 ; 50 (carried fwd worst case) ; 76 (carried fwd) ; 52 (carried fwd) ; 38 (carried fwd) ;---- ; 261 0x58f6 @@no_level_marker: 0x58f6 @@done_level_marker: 58f6 0006 CLRC ; 4 C=0 means screen scrolled 58f7 000f INCR PC ; 7 Skip SETC below ;---- ; 272 (worst case) 0x58f8 @@no_hscroll: 58f8 0007 SETC ; 4 ;;------------------------------------------------------------------;; ;; Update the X/Y positions of all 12 possible sprites ;; ;; This includes scrolling objects one pixel left horizontally if ;; ;; the screen scrolled by one pixel. ;; ;;------------------------------------------------------------------;; 58f9 02bc 0320 MVII #SPXYP, R4 ; 8 Point to X/Y position table 58fb 02bd 0308 MVII #SPXYV, R5 ; 8 Point to X/Y velocity table 58fd 02ba 0002 MVII #2, R2 ; 8 Rewind offset 58ff 0201 0049 BC @@no_hscroll_1 ; 7/9 Alternate update if no scroll. ;---- ; 31 (fall-thru is overall worst case) ; 272 (fwd) ;---- ; 303 0x0 @@sph SET 0 REPEAT 5 5901 02a8 MVI@ R5, R0 ; 8 Get velocity 5902 02e0 ADD@ R4, R0 ; 8 Add velocity to position 5903 0028 ADCR R0 ; 6 end-around carry for 1s compl 5904 0300 0151 SUB SPHSCR+@@sph, R0 ; 10 Adjust for horizontal scroll 0x1 @@sph SET @@sph+1 5906 02a9 MVI@ R5, R1 ; 8 Get velocity 5907 02e1 ADD@ R4, R1 ; 8 Add velocity to position 5908 0029 ADCR R1 ; 6 end-around carry for 1s compl 5909 0114 SUBR R2, R4 ; 6 Rewind 590a 0260 MVO@ R0, R4 ; 9 Store new X position 590b 0261 MVO@ R1, R4 ; 9 Store new Y position ENDR ;---- ;== 1 590c 02a8 MVI@ R5, R0 ; 8 Get velocity 590d 02e0 ADD@ R4, R0 ; 8 Add velocity to position 590e 0028 ADCR R0 ; 6 end-around carry for 1s compl 590f 0300 0152 SUB SPHSCR+@@sph, R0 ; 10 Adjust for horizontal scroll 0x2 @@sph SET @@sph+1 5911 02a9 MVI@ R5, R1 ; 8 Get velocity 5912 02e1 ADD@ R4, R1 ; 8 Add velocity to position 5913 0029 ADCR R1 ; 6 end-around carry for 1s compl 5914 0114 SUBR R2, R4 ; 6 Rewind 5915 0260 MVO@ R0, R4 ; 9 Store new X position 5916 0261 MVO@ R1, R4 ; 9 Store new Y position ;== 2 5917 02a8 MVI@ R5, R0 ; 8 Get velocity 5918 02e0 ADD@ R4, R0 ; 8 Add velocity to position 5919 0028 ADCR R0 ; 6 end-around carry for 1s compl 591a 0300 0153 SUB SPHSCR+@@sph, R0 ; 10 Adjust for horizontal scroll 0x3 @@sph SET @@sph+1 591c 02a9 MVI@ R5, R1 ; 8 Get velocity 591d 02e1 ADD@ R4, R1 ; 8 Add velocity to position 591e 0029 ADCR R1 ; 6 end-around carry for 1s compl 591f 0114 SUBR R2, R4 ; 6 Rewind 5920 0260 MVO@ R0, R4 ; 9 Store new X position 5921 0261 MVO@ R1, R4 ; 9 Store new Y position ;== 3 5922 02a8 MVI@ R5, R0 ; 8 Get velocity 5923 02e0 ADD@ R4, R0 ; 8 Add velocity to position 5924 0028 ADCR R0 ; 6 end-around carry for 1s compl 5925 0300 0154 SUB SPHSCR+@@sph, R0 ; 10 Adjust for horizontal scroll 0x4 @@sph SET @@sph+1 5927 02a9 MVI@ R5, R1 ; 8 Get velocity 5928 02e1 ADD@ R4, R1 ; 8 Add velocity to position 5929 0029 ADCR R1 ; 6 end-around carry for 1s compl 592a 0114 SUBR R2, R4 ; 6 Rewind 592b 0260 MVO@ R0, R4 ; 9 Store new X position 592c 0261 MVO@ R1, R4 ; 9 Store new Y position ;== 4 592d 02a8 MVI@ R5, R0 ; 8 Get velocity 592e 02e0 ADD@ R4, R0 ; 8 Add velocity to position 592f 0028 ADCR R0 ; 6 end-around carry for 1s compl 5930 0300 0155 SUB SPHSCR+@@sph, R0 ; 10 Adjust for horizontal scroll 0x5 @@sph SET @@sph+1 5932 02a9 MVI@ R5, R1 ; 8 Get velocity 5933 02e1 ADD@ R4, R1 ; 8 Add velocity to position 5934 0029 ADCR R1 ; 6 end-around carry for 1s compl 5935 0114 SUBR R2, R4 ; 6 Rewind 5936 0260 MVO@ R0, R4 ; 9 Store new X position 5937 0261 MVO@ R1, R4 ; 9 Store new Y position ;== 5 ; 390 (5 iterations * 78) 0x5938 @@l REPEAT 2 5938 02a8 MVI@ R5, R0 ; 8 Get velocity 5939 02e0 ADD@ R4, R0 ; 8 Add velocity to position 593a 0028 ADCR R0 ; 6 end-around carry for 1s compl 593b 02a9 MVI@ R5, R1 ; 8 Get velocity 593c 02e1 ADD@ R4, R1 ; 8 Add velocity to position 593d 0029 ADCR R1 ; 6 end-around carry for 1s compl 593e 0114 SUBR R2, R4 ; 6 Rewind 593f 0260 MVO@ R0, R4 ; 9 Store new position 5940 0261 MVO@ R1, R4 ; 9 Store new position ENDR ;---- ;== 1 5941 02a8 MVI@ R5, R0 ; 8 Get velocity 5942 02e0 ADD@ R4, R0 ; 8 Add velocity to position 5943 0028 ADCR R0 ; 6 end-around carry for 1s compl 5944 02a9 MVI@ R5, R1 ; 8 Get velocity 5945 02e1 ADD@ R4, R1 ; 8 Add velocity to position 5946 0029 ADCR R1 ; 6 end-around carry for 1s compl 5947 0114 SUBR R2, R4 ; 6 Rewind 5948 0260 MVO@ R0, R4 ; 9 Store new position 5949 0261 MVO@ R1, R4 ; 9 Store new position ;== 2 ; 136 (2 iter * 68) 0x594a @@no_hscroll_1: 594a 02a8 MVI@ R5, R0 ; 8 Get velocity 594b 02e0 ADD@ R4, R0 ; 8 Add velocity to position 594c 0028 ADCR R0 ; 6 end-around carry for 1s compl 594d 02a9 MVI@ R5, R1 ; 8 Get velocity 594e 02e1 ADD@ R4, R1 ; 8 Add velocity to position 594f 0029 ADCR R1 ; 6 end-around carry for 1s compl 5950 0114 SUBR R2, R4 ; 6 Rewind 5951 0260 MVO@ R0, R4 ; 9 Store new position 5952 0261 MVO@ R1, R4 ; 9 Store new position 5953 02a9 MVI@ R5, R1 ; 8 Get velocity 5954 02e1 ADD@ R4, R1 ; 8 Add velocity to position 5955 0029 ADCR R1 ; 6 end-around carry for 1s compl 5956 0014 DECR R4 ; 6 Rewind 5957 0261 MVO@ R1, R4 ; 9 Store new position ;---- ; 105 ; 136 (from @@l to @@no_hscroll) ;---- ; 241 ; 482 (2 iters from @@l to here) 5958 037d 0320 CMPI #SPXYV+24, R5 ; 16 (8 * 2) 595a 0225 0023 BLT @@l ; 16 (9 + 7) ;---- ; 514 ; 390 (first 5 iters) ; 303 (carried forward) ;---- ;1207 ; PULR PC ENDP ;__ 595c 0004 015c 0115 CALL UPSPA ; 379 Update gp1/gp2 allocations. ;---- ;2829 0x595f E2.muxonly: 595f 01c0 CLRR R0 ; 6 5960 0340 019c CMP MUXOK, R0 ; 10 5962 0204 0005 BEQ E2.spdone ; 7/9 5964 0240 019c MVO R0, MUXOK ; 11 ;---- ; 34 5966 0004 015c 008c CALL UPMUX ;1329 Update sprite->MOB multiplexing ;2829 (carried forward) ;---- ;4158 ; 0x5969 E2.spdone: ;; ---------------------------------------------------------------- ;; ;; In order to reduce peak loading, we always do cues two pixel ;; ;; scrolls after a card boundary. This is because card boundaries ;; ;; represent a burst of activity (two calls to COPYROW aren't ;; ;; exactly cheap). ;; ;; ---------------------------------------------------------------- ;; 5969 0283 0106 MVI PPGPHA, R3 596b 03bb 0007 ANDI #$7, R3 596d 037b 0002 CMPI #$2, R3 596f 020c 0013 BNEQ @@nocue 5971 0283 011a MVI CUENUM, R3 5973 0013 DECR R3 5974 020b 000e BMI @@nocue 5976 037b 0080 CMPI #$80, R3 5978 0201 0004 BC @@doexit 597a 02bd 5981 MVII #@@donecue, R5 597c 0200 06b1 B BGSPAWN 0x597e @@doexit: 597e 0004 0160 00e9 CALL BGDOEXIT 0x5981 @@donecue: 5981 01db CLRR R3 5982 0243 011a MVO R3, CUENUM 0x5984 @@nocue: IF (DEFINED DODEAD) = 0 5984 0280 0135 MVI MOBHIT, R0 5986 0080 TSTR R0 5987 0204 0255 BEQ E2.died ENDI ;; ---------------------------------------------------------------- ;; ;; Now execute either the even or odd frame activities. On even ;; ;; frames, we update bad-guy programs 0, 2, 4. We also check for ;; ;; bad guys that have moved off-screen and update the timer clock. ;; ;; On odd frames, we update bad-guy programs 1 and 3, and also ;; ;; check the good-guy and bad guy bullets. ;; ;; ---------------------------------------------------------------- ;; 5989 0280 011b MVI BGFLAG, R0 598b 03f8 0001 XORI #1, R0 598d 0240 011b MVO R0, BGFLAG 598f 0078 SARC R0 5990 0209 01d4 BNC @@even 0x5992 @@odd ; ICALL ckggb ; Check good guys' bullets. INCLUDE "engine/ckggb.asm" ; Check good guys' bullets. ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; CKGGB Checks the good guy's bullets and sees if they hit anything. ;; ;;==========================================================================;; 0x5992 CKGGB PROC ; PSHR R5 ; 9 ;;==================================================================;; ;; Compare all bad guys and bad-guy bullets against our bullets. ;; ;; Also, disable bullets that go off the top of the screen. ;; ;;==================================================================;; 0x5992 @@checkit: 5992 02bc 0334 MVII #SPXY2+10,R4 ; 8 5994 02bd 014a MVII #SPAT2+5,R5 ; 8 5996 02bb 033a MVII #GGB1, R3 ; 8 ;;------------------------------------------------------------------;; ;; Figure out where the "good guy" bullets are, if active. ;; ;;------------------------------------------------------------------;; 5998 02b8 6060 MVII #$6060, R0 599a 0281 0111 MVI HBCOL1, R1 ; Let's look at the horizontal bullet 599c 0049 SLL R1 599d 0204 0008 BEQ @@nohb 599f 0339 0004 SUBI #$0004, R1 59a1 02b8 0044 MVII #GROW_p + 4, R0 59a3 0300 0114 SUB HBROW, R0 59a5 0040 SWAP R0 59a6 00c8 ADDR R1, R0 0x59a7 @@nohb: 59a7 0240 0339 MVO R0, GGB0 0x59a9 @@ggbinit: 59a9 02a8 MVI@ R5, R0 ; 9 Is this bullet active? 59aa 0080 TSTR R0 ; 6 59ab 0204 0015 BEQ @@ggbskip ; No? Store out a large coord for it then 59ad 0001 SDBD 59ae 02a0 MVI@ R4, R0 ; 8 Get Y/X coordinate of bullet 0 59af 0378 0500 CMPI #$0500, R0 ; 8 Is it going off top of screen? 59b1 0209 000a BNC @@ggbdie ; 7/9 Yes: Nuke the bullet 59b3 0338 0301 SUBI #$0301, R0 ; 8 R0 == Y/X Coordinate of upper left 59b5 0258 MVO@ R0, R3 ; 9 59b6 000b INCR R3 ; 6 59b7 037b 033c CMPI #GGB2+1,R3 ; 8 59b9 022c 0011 BNEQ @@ggbinit ; 9/7 59bb 0200 0017 B @@do_bullet ; 9 0x59bd @@ggbdie: 59bd 0015 DECR R5 ; 6 \ 59be 01c9 CLRR R1 ; 6 |-- disable our bullet 59bf 0269 MVO@ R1, R5 ; 9 / 59c0 033c 0002 SUBI #2, R4 ; 8 0x59c2 @@ggbskip: 59c2 02fc 0002 ADDI #2, R4 ; 8 59c4 02b8 6060 MVII #$6060, R0 ; 8 big enough that it won't hit anything 59c6 0258 MVO@ R0, R3 ; 9 59c7 000b INCR R3 ; 6 59c8 037b 033c CMPI #GGB2+1,R3 ; 8 59ca 022c 0022 BNEQ @@ggbinit ; 9/7 59cc 0340 0339 CMP GGB0, R0 ; 10 59ce 020c 0004 BNEQ @@do_bullet ; 7/9 Is bullet 0 active? Yes? Do it. 59d0 0340 033a CMP GGB1, R0 ; 10 59d2 0204 00e0 BEQ @@no_bullet ; 7/9 Is bullet 1 active? Yes? Do it. ; Otherwise, none of 3 is, so leave. ;;------------------------------------------------------------------;; ;; If we had active bullets, compare them against all the bad ;; ;; guys and all their bullets. ;; ;;------------------------------------------------------------------;; 0x59d4 @@do_bullet: 59d4 02bd 0140 MVII #SPAT, R5 ; 8 Point to MOB Attribute Table 59d6 02bc 0320 MVII #SPXYP, R4 ; 8 Point to MOB X/Y coordinates 0x59d8 @@checkmob: 59d8 02ab MVI@ R5, R3 ; 8 Get attr for next mob 59d9 0013 DECR R3 ; 6 Zero? Skip to next. 59da 020b 00d2 BMI @@skipmob ; 7/9 59dc 02fb d009 ADDI #SPATBL+3, R3 ; 8 Offset to 'size' info in MOB record 59de 0001 SDBD 59df 02a1 MVI@ R4, R1 ; 8 Get Y/X coordinate 59e0 008a MOVR R1, R2 ; 6 59e1 0301 033a SUB GGB1, R1 ; 10 Check the lower right corner 59e3 0209 000f BNC @@out1 ; 7/9 If Y went -ve, bullet's to the right 59e5 0041 SWAP R1, 1 ; 6 59e6 0041 SWAP R1, 1 ; 6 59e7 020b 000b BMI @@out1 ; 7/9 If X went -ve, bullet's below ;;------------------------------------------------------------------;; ;; At this point R1 contains our X distance to the right, ;; ;; and our Y distance to the right of the bullet's upper left ;; ;; corner vs. the lower right corner of the bad guy. So, if ;; ;; we subtract the bad buy's width and we still end up positive, ;; ;; we're to the left or above. (Note that we bias all bad-guy ;; ;; widths in our table by the width/height of the bullet.) ;; ;;------------------------------------------------------------------;; 59e9 0319 SUB@ R3, R1 ; 8 Compare to bad-guy's size. 59ea 0203 0008 BPL @@out1 ; 7/9 If Y still +ve, bullet's to the left 59ec 0045 SWAP R1, 2 ; 8 59ed 0203 0005 BPL @@out1 ; 7/9 If X still +ve, bullet's above ;;------------------------------------------------------------------;; ;; If we made it this far, it's a HIT. ;; ;; Disable bullet 1 and then process the hit. ;; ;;------------------------------------------------------------------;; 59ef 01c9 CLRR R1 ; 6 59f0 0241 014a MVO R1, SPAT2+5 ; 11 disable the good-guy bullet #1 59f2 0200 0026 B @@hit ; 9 0x59f4 @@out1: 59f4 0091 MOVR R2, R1 59f5 0302 033b SUB GGB2, R2 ; 10 Check the lower right corner 59f7 0209 000f BNC @@out2 ; 7/9 If Y went -ve, bullet's to the right 59f9 0042 SWAP R2, 1 ; 6 59fa 0042 SWAP R2, 1 ; 6 59fb 020b 000b BMI @@out2 ; 7/9 If X went -ve, bullet's below ;;------------------------------------------------------------------;; ;; At this point R2 contains our X distance to the right, ;; ;; and our Y distance to the right of the bullet's upper left ;; ;; corner vs. the lower right corner of the bad guy. So, if ;; ;; we subtract the bad buy's width and we still end up positive, ;; ;; we're to the left or above. (Note that we bias all bad-guy ;; ;; widths in our table by the width/height of the bullet.) ;; ;;------------------------------------------------------------------;; 59fd 031a SUB@ R3, R2 ; 8 Compare to bad-guy's size. 59fe 0203 0008 BPL @@out2 ; 7/9 If Y still +ve, bullet's to the left 5a00 0046 SWAP R2, 2 ; 8 5a01 0203 0005 BPL @@out2 ; 7/9 If X still +ve, bullet's above ;;------------------------------------------------------------------;; ;; If we made it this far, it's a HIT.. ;; ;; Disable bullet 2 and then process the hit. ;; ;;------------------------------------------------------------------;; 5a03 01c9 CLRR R1 ; 6 5a04 0241 014b MVO R1, SPAT2+6 ; 11 disable the good-guy bullet #2 5a06 0200 0012 B @@hit ;;------------------------------------------------------------------;; ;; Check the horizontal bullet. ;; ;;------------------------------------------------------------------;; 0x5a08 @@out2: 5a08 0301 0339 SUB GGB0, R1 ; 10 Check the lower right corner 5a0a 0209 00a4 BNC @@out3 ; 7/9 If Y went -ve, bullet's to the right 5a0c 0041 SWAP R1, 1 ; 6 5a0d 0041 SWAP R1, 1 ; 6 5a0e 020b 00a0 BMI @@out3 ; 7/9 If X went -ve, bullet's below 5a10 0319 SUB@ R3, R1 ; 8 Compare to bad-guy's size. 5a11 0203 009d BPL @@out3 ; 7/9 If Y still +ve, bullet's to the left 5a13 0045 SWAP R1, 2 ; 8 5a14 0203 009a BPL @@out3 ; 7/9 If X still +ve, bullet's above 5a16 02b9 0001 MVII #1, R1 ; 6 kill bullet indirectly by expiring it. 5a18 0241 0112 MVO R1, HBCNT ; 10 0x5a1a @@hit: ;;------------------------------------------------------------------;; ;; Now process the hit. For now, just nuke the sprite. ;; ;;------------------------------------------------------------------;; 5a1a 0015 DECR R5 ; 6 ; ick... if we're in group 2, decr the bad-guy-bullet-count 5a1b 037d 0145 CMPI #SPAT2, R5 ; 8 5a1d 0205 0006 BLT @@notbgb ; 7/9 5a1f 01c9 CLRR R1 ; 8 5a20 0269 MVO@ R1, R5 ; 9 disable the bad-guy bullet 5a21 0241 016e MVO R1, SPINB ; 10 and let a new spinner bullet out 5a23 0200 008b B @@out3 ; 9 0x5a25 @@notbgb: 5a25 02b9 00d1 MVII #SPATBL.x1,R1 ; 8 Explosion animation 5a27 02a8 MVI@ R5, R0 ; 8 get bgtype 5a28 0015 DECR R5 5a29 0269 MVO@ R1, R5 ; 9 disable the bad-guy 5a2a 033c 0002 SUBI #2, R4 ; 8 0x5a2c @@process 5a2c 0271 PSHR R1 5a2d 0274 PSHR R4 5a2e 0275 PSHR R5 ; Update the wave counter 5a2f 0378 005d CMPI #S_end, R0 5a31 020e 001e BGT @@notsauc 5a33 0281 013d MVI WAVE, R1 5a35 0011 DECR R1 5a36 0241 013d MVO R1, WAVE 5a38 0281 013e MVI WKILL, R1 5a3a 0009 INCR R1 5a3b 0241 013e MVO R1, WKILL ; If this was a saucer in a wave, score it specially. 5a3d 0339 0003 SUBI #3, R1 5a3f 020b 0010 BMI @@notsauc 5a41 0379 0003 CMPI #3, R1 5a43 0205 0002 BLT @@waveok 5a45 02b9 0002 MVII #2, R1 0x5a47 @@waveok 5a47 02f9 6aa8 ADDI #WBONUS,R1 5a49 0082 MOVR R0, R2 5a4a 0288 MVI@ R1, R0 ; REGSCO 5a4b 0004 0168 023b CALL ADDSCORE.reg 5a4e 0090 MOVR R2, R0 5a4f 0200 0033 B @@skipscore 0x5a51 @@notsauc ; Score this entity 5a51 0270 PSHR R0 5a52 0084 MOVR R0, R4 5a53 02fc d006 ADDI #SPATBL,R4 5a55 02a1 MVI@ R4, R1 ; Get offset 1 of SPATBL 5a56 02a2 MVI@ R4, R2 ; Get offset 2 of SPATBL 5a57 03b9 3000 ANDI #$3000, R1 5a59 03ba 0600 ANDI #$0600, R2 5a5b 0061 SLR R1, 1 5a5c 01ca XORR R1, R2 5a5d 0062 SLR R2, 1 5a5e 0042 SWAP R2 5a5f 037a 000c CMPI #12, R2 5a61 0201 000d BC @@randscore 5a63 007a SARC R2 5a64 03fa d000 XORI #SCORTBL, R2 ; Relies on SCORTBL being at $D000!!! 5a66 0290 MVI@ R2, R0 5a67 002f ADCR PC 5a68 0040 SWAP R0 5a69 03b8 00ff ANDI #$FF, R0 ; REGSCO 5a6b 0004 0168 023b CALL ADDSCORE.reg 5a6e 0200 0013 B @@donescore 0x5a70 @@randscore ; MVII #pack(Score(5000), Score(8000)), R0 5a70 02b8 64a0 MVII #((((((5000)/50)) AND $FF) SHL 8) OR ((((8000)/50)) AND $FF)), R0 ; MVII #pack(Score(3000), Score(6000)), R1 5a72 02b9 3c78 MVII #((((((3000)/50)) AND $FF) SHL 8) OR ((((6000)/50)) AND $FF)), R1 5a74 037a 000d CMPI #13, R2 5a76 0205 0008 BLT @@dorand ; MVII #pack(Score(9000), Score(10000)),R1 5a78 02b9 b4c8 MVII #((((((9000)/50)) AND $FF) SHL 8) OR ((((10000)/50)) AND $FF)),R1 5a7a 037a 000e CMPI #14, R2 5a7c 0205 0002 BLT @@dorand ; MVII #pack(Score(2500), Score(5000)), R0 5a7e 02b8 3264 MVII #((((((2500)/50)) AND $FF) SHL 8) OR ((((5000)/50)) AND $FF)), R0 0x5a80 @@dorand ; RNDSCO 5a80 0004 0168 022d CALL ADDSCORE.rnd 0x5a83 @@donescore 5a83 02b0 PULR R0 0x5a84 @@skipscore 5a84 0378 0071 CMPI #SPATBL.bld0a, R0 5a86 0205 000a BLT @@nobld 5a88 0378 007d CMPI #SPATBL.bld0d, R0 5a8a 020e 0006 BGT @@nobld 5a8c 0004 0168 035c CALL PLAYSFX 5a8f 0005 DECLE FXLGEXP 5a90 0200 0012 B @@kill 5a92 0378 00dd @@nobld CMPI #SPATBL.stal, R0 5a94 0205 000a BLT @@nostal 5a96 0378 00e9 CMPI #SPATBL.stalf, R0 5a98 020e 0006 BGT @@nostal 5a9a 0004 0168 035c CALL PLAYSFX 5a9d 0002 DECLE FXSMEXP 5a9e 0200 0004 B @@kill 0x5aa0 @@nostal: 5aa0 0004 0168 035c CALL PLAYSFX 5aa3 0004 DECLE FXALIEN 0x5aa4 @@kill: 5aa4 02b1 PULR R1 5aa5 0271 PSHR R1 5aa6 0339 0141 SUBI #SPAT+1,R1 5aa8 0004 0160 018e CALL BGKILL 5aab 02b5 PULR R5 5aac 02b4 PULR R4 5aad 02b1 PULR R1 0x5aae @@skipmob: 5aae 02fc 0002 ADDI #2, R4 ; 8 Go to next MOB's X/Y 0x5ab0 @@out3: 5ab0 037d 014a CMPI #SPAT2+5, R5 ; 8 5ab2 022c 00db BNEQ @@checkmob ; 9/7 0x5ab4 @@no_bullet: ; PULR PC ENDP ;__ ; ICALL ckbgb ; Check bad guys' bullets. INCLUDE "engine/ckbgb.asm" ; Check bad guys' bullets. ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; CKBGB Checks the bad guys' bullets and sees if they hit anything. ;; ;;==========================================================================;; 0x5ab4 CKBGB PROC ; PSHR R5 5ab4 0280 0135 MVI MOBHIT, R0 5ab6 0010 DECR R0 5ab7 0204 0008 BEQ @@nomobhit IF DODEAD P16_CSTK 0, 0, White, "DEAD" MVII #1, R0 MVO R0, MOBHIT ELSE 5ab9 01c0 CLRR R0 ; \ 5aba 0240 013b MVO R0, DEFSCO ; |_ Tank died; pop out of RUNENG. 5abc 0008 INCR R0 ; | and kill any deferred score 5abd 0240 0174 MVO R0, DNENG ; / 5abf 0200 00a1 B @@skipdbloop ENDI 0x5ac1 @@nomobhit 5ac1 02b8 00ff MVII #$FF, R0 5ac3 0240 0178 MVO R0, TMP ;;------------------------------------------------------------------;; ;; Step through group 2, 1st 5. ;; ;; If the Y position matches the ground, disable the bullet. ;; ;;------------------------------------------------------------------;; 5ac5 02b9 0005 MVII #5, R1 5ac7 02bc 032a MVII #SPXY2, R4 5ac9 02bd 0145 MVII #SPAT2, R5 5acb 0200 0005 B @@db1st 0x5acd @@dbskip: 5acd 02fc 0002 ADDI #2, R4 5acf 0011 DECR R1 5ad0 0204 007e BEQ @@dbdone 0x5ad2 @@dbloop: 0x5ad2 @@db1st: 5ad2 02a8 MVI@ R5, R0 ; get attr for bullet 5ad3 0010 DECR R0 ; is it 0 5ad4 022b 0008 BMI @@dbskip ; yes... skip it 5ad6 02a3 MVI@ R4, R3 ; get X position 5ad7 02a0 MVI@ R4, R0 ; get Y position 5ad8 0043 SWAP R3 5ad9 0040 SWAP R0 5ada 037b fa00 CMPI #250*256, R3 ;\ 5adc 0201 0004 BC @@xok ; |__ disable bullets that go off the 5ade 037b aa00 CMPI #170*256, R3 ; | sides of the screen. 5ae0 0201 0060 BC @@disspinX ;/ 0x5ae2 @@xok: 5ae2 0378 4900 CMPI #(GROW_p+9)*256, R0 ; 5ae4 0205 0067 BLT @@dbyok ; Is it on the ground yet? 5ae6 0280 0178 MVI TMP, R0 ; \ 5ae8 03b8 00fe ANDI #$FE, R0 ; |- Small explosion if normal bullet 5aea 0240 0178 MVO R0, TMP ; / 5aec 0015 DECR R5 ; Is it a spinner bullet? 5aed 02a8 MVI@ R5, R0 5aee 0378 00b9 CMPI #SPATBL.b1, R0 5af0 0204 0004 BEQ @@spinb 5af2 0378 00bd CMPI #SPATBL.b1b,R0 5af4 020c 0053 BNEQ @@disable 0x5af6 @@spinb 5af6 0280 010d MVI CRATCNT, R0 ; \ 5af8 0010 DECR R0 ; |-- If we did one too recently, 5af9 0203 004b BPL @@disable0 ; / don't do another yet ; If this was a spinner bullet, decide whether to make a crater. 5afb 033c 0002 SUBI #2, R4 ; 5afd 02a3 MVI@ R4, R3 ; Get the X coord 5afe 000c INCR R4 ; 5aff 03bb 00ff ANDI #$FF, R3 ; \ 5b01 0280 0105 MVI PGPHAS, R0 ; | 5b03 03b8 0007 ANDI #7, R0 ; | 5b05 0103 SUBR R0, R3 ; | Calculate card address of potential 5b06 0067 SLR R3, 2 ; | crater location. Account for phase. 5b07 0063 SLR R3, 1 ; |-- Disable stuff too far to right 5b08 037b 0012 CMPI #18, R3 ; | or too far to the left. 5b0a 020d 003a BGE @@disable1 ; | 5b0c 037b 0009 CMPI #9, R3 ; | 5b0e 0205 0036 BLT @@disable2 ; | 5b10 02fb 02a0 ADDI #GROW, R3 ; / 5b12 01c0 CLRR R0 5b13 0358 CMP@ R3, R0 ; \ 5b14 020e 0030 BGT @@disable3 ; | 5b16 000b INCR R3 ; | Check a four-card range around 5b17 0358 CMP@ R3, R0 ; | the potential crash site. We 5b18 020e 002c BGT @@disable4 ; |__ check the following pattern (X's): 5b1a 02fb 0012 ADDI #18, R3 ; | .XX. This ensures that we 5b1c 0358 CMP@ R3, R0 ; | X..X allow landing areas near 5b1d 020e 0027 BGT @@disable5 ; | craters we make, keeping it fair. 5b1f 02fb 0003 ADDI #3, R3 ; | 5b21 0358 CMP@ R3, R0 ; | 5b22 020e 0022 BGT @@disable6 ; / ; If we get here, make the crater! 5b24 033b 02b7 SUBI #GROW+20+3, R3 5b26 0243 010d MVO R3, CRATCNT ; Set up the "no new craters" counter. 5b28 02fb 02a2 ADDI #GROW-1+3, R3 5b2a 0280 0178 MVI TMP, R0 ; \ 5b2c 03b8 00fd ANDI #$FD, R0 ; |- Large explosion if we make a crater 5b2e 0240 0178 MVO R0, TMP ; / 5b30 02b8 8800 MVII #$0800 + RCS1.nosc, R0 5b32 0258 MVO@ R0, R3 5b33 0013 DECR R3 5b34 02b8 8a00 MVII #$0800 + RCS1.sc500, R0 5b36 0258 MVO@ R0, R3 5b37 02fb 0014 ADDI #20, R3 5b39 02b8 999a MVII #$8800 + X_ORG + (RCARD + 7)*8, R0 5b3b 0258 MVO@ R0, R3 5b3c 000b INCR R3 5b3d 02f8 0008 ADDI #8, R0 5b3f 0258 MVO@ R0, R3 5b40 0200 0004 B @@disspin 0x5b42 @@disspinX: 5b42 037b f000 CMPI #240*256, R3 ; 5b44 0201 0003 BC @@disable ; Ignore bullets going off left. 0x5b46 @@disable0: 0x5b46 @@disable1: 0x5b46 @@disable2: 0x5b46 @@disable3: 0x5b46 @@disable4: 0x5b46 @@disable5: 0x5b46 @@disable6: 0x5b46 @@disspin: 5b46 01c0 CLRR R0 ; 5b47 0240 016e MVO R0, SPINB ; Allow a new spinner bullet 0x5b49 @@disable: 5b49 01c0 CLRR R0 ; \ 5b4a 0015 DECR R5 ; |-- Disable the sprite. 5b4b 0268 MVO@ R0, R5 ; / 5b4c 0012 DECR R2 0x5b4d @@dbyok: 5b4d 0011 DECR R1 5b4e 022c 007d BNEQ @@dbloop 0x5b50 @@dbdone: 5b50 0282 0178 MVI TMP, R2 5b52 0072 RRC R2 5b53 0201 0004 BC @@nosmexp 5b55 0004 0168 035c CALL PLAYSFX 5b58 0002 DECLE FXSMEXP 0x5b59 @@nosmexp: 5b59 0072 RRC R2 5b5a 0201 0006 BC @@nolgexp 5b5c 02b9 0005 MVII #FXLGEXP, R1 5b5e 02bd 5b62 MVII #@@nolgexp, R5 5b60 0200 1004 B DOPLAYSFX 0x5b62 @@nolgexp: 0x5b62 @@skipdbloop ; PULR PC ENDP ;__ 5b62 02bd 5bcb MVII #E2.bgdone, R5 5b64 0200 05a3 B UPBGM.1 ; update odd bad-guys' motion programs 0x5b66 @@even 5b66 0004 015c 02fd CALL TICTSK ; ICALL upani ; update animations (moved here from eng 2) INCLUDE "engine/upani.asm" ; update animations (moved here from eng 2) ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; UPANI -- Update animation ;; ;;==========================================================================;; 0x5b69 UPANI PROC ;; ------------------------------------------------------------ ;; ;; Step through SPAT1 looking at the SPATBL entries. ;; ;; SPENTs have 11 extra bits distributed around their 4 words: ;; ;; ;; ;; Word 0: Bits 15..11 -- Next SPAT bits 7:3 ;; ;; Word 1: Bits 15..12 -- Next SPAT bits 2:0. ;; ;; Word 2: Bits 15..14 -- Animation rate: 60/30/15/0 ;; ;; ------------------------------------------------------------ ;; 5b69 02bc 0140 MVII #SPAT, R4 0x5b6b @@loop: 5b6b 02a1 MVI@ R4, R1 ; Read SPATBL index 5b6c 0011 DECR R1 ;\_ Skip if zero 5b6d 020b 0022 BMI @@next ;/ 5b6f 02f9 d008 ADDI #SPATBL+2, R1 ; R1 = &spatbl[idx*4 + 2] 5b71 0288 MVI@ R1, R0 ; \ 5b72 03b8 c000 ANDI #$C000, R0 ; | Get animation rate from 5b74 0204 001b BEQ @@next ; |- 2 MSBs of Word #2. 00 5b76 005c SLLC R0, 2 ; | means no animation. 5b77 0054 RLC R0, 2 ; / 5b78 0338 0002 SUBI #2, R0 ; \_ Map 1, 2, 3 5b7a 03b8 0003 ANDI #3, R0 ; / to 3, 0, 1 5b7c 0282 0102 MVI TICK, R2 ; \ 5b7e 0062 SLR R2, 1 ; | Skip if 0, 1, or 2 LSBs 5b7f 01e2 XORR R4, R2 ; |- of TICK XOR SPATIDX != 0 5b80 0190 ANDR R2, R0 ; | 5b81 020c 000e BNEQ @@next ; / 5b83 0011 DECR R1 ; \ 5b84 028a MVI@ R1, R2 ; | 5b85 005a SLLC R2, 1 ; |_ Get bits 2, 0 from 5b86 0054 RLC R0, 2 ; | bits 15:14. Bit 1 is 5b87 005a SLLC R2, 1 ; | always 0. 5b88 0050 RLC R0, 1 ; / 5b89 0011 DECR R1 ; \ 5b8a 028a MVI@ R1, R2 ; |_ Get bits 7:3 from 5b8b 0042 SWAP R2 ; | bits 15:11 5b8c 03ba 00f8 ANDI #$F8, R2 ; / 5b8e 01d0 XORR R2, R0 ; Merge 5b8f 0014 DECR R4 ; \_ Store merged result to 5b90 0260 MVO@ R0, R4 ; / SPAT. 5b91 037c 014a @@next: CMPI #SPAT+10, R4 ; Iterate over active objects 5b93 0225 0029 BLT @@loop ; JR R5 ENDP ;__ 5b95 0004 0160 0103 CALL UPBGM.0 ; update even bad-guys' motion programs ; ICALL ckbgp ; cull bad guys that have left the screen INCLUDE "engine/ckbgp.asm" ; cull bad guys that have left the screen ;; ======================================================================== ;; ;; CKBGP Check Bad Guy Position. ;; ;; ======================================================================== ;; 0x5b98 CKBGP PROC 5b98 01c0 CLRR R0 5b99 02bb 0140 MVII #SPAT1, R3 5b9b 0358 @@cklp: CMP@ R3, R0 ; Is this one open? 5b9c 0204 0028 BEQ @@next ; Yes: skip it 5b9e 0099 MOVR R3, R1 ; Use R1 for indexing other structures 5b9f 0049 SLL R1, 1 5ba0 02f9 00a0 ADDI #SPXYP-2*SPAT1, R1 ; Index into SPXYP 5ba2 028a MVI@ R1, R2 ; \_ Put integer in upper half 5ba3 0042 SWAP R2 ; / 5ba4 037a be00 CMPI #190*256, R2 ; Check if offsides on right 5ba6 0209 001e BNC @@next 5ba8 037a fe00 CMPI #254*256, R2 ; Check if offsides on left 5baa 0201 001a BC @@next 5bac 009a MOVR R3, R2 5bad 02fa fff0 ADDI #BGEXIT-SPAT1, R2 ; Index into BGEXIT 5baf 0250 MVO@ R0, R2 ; clear BGEXIT 5bb0 0049 SLL R1, 1 ; \ 5bb1 008c MOVR R1, R4 ; |- Index into BGMPTBL 5bb2 02fc fadc ADDI #BGMPTBL-2*SPXYP,R4 ; / 5bb4 0260 MVO@ R0, R4 ; program ptr 5bb5 0260 MVO@ R0, R4 ; delay 5bb6 0260 MVO@ R0, R4 ; loopa 5bb7 02fa 0021 ADDI #SPHSCR-BGEXIT, R2 ; Index into SPHSCR 5bb9 0260 MVO@ R0, R4 ; loopb 5bba 0299 MVI@ R3, R1 ; \ 5bbb 0379 005d CMPI #S_end, R1 ; | 5bbd 020e 0005 BGT @@notsauc ; |_ if this was a saucer decr the 5bbf 0281 013d MVI WAVE, R1 ; | wave counter. 5bc1 0011 DECR R1 ; | 5bc2 0241 013d MVO R1, WAVE ; / 0x5bc4 @@notsauc 5bc4 0258 MVO@ R0, R3 ; attr 5bc5 0250 MVO@ R0, R2 ; clear horiz scrolling 5bc6 000b @@next: INCR R3 5bc7 037b 0145 CMPI #SPAT+5,R3 5bc9 022c 002f BNEQ @@cklp ; JR R5 ENDP ;__ 0x5bcb E2.bgdone: ;;------------------------------------------------------------------;; ;; Twinkle, twinkle little star, how I wonder what you are... ;; ;;------------------------------------------------------------------;; 5bcb 0280 0173 MVI DOENG, R0 5bcd 0080 TSTR R0 5bce 020c 02a8 BNEQ ENGINE2_RET ; get outta here extra fast ; MVI EMODE, R0 ; TSTR R0 ; BEQ E2.notwinkle 5bd0 0280 010c MVI INCITY, R0 5bd2 0378 0002 CMPI #2, R0 5bd4 020d 0004 BGE E2.notwinkle 5bd6 02bd 5e78 MVII #ENGINE2_RET, R5 5bd8 0200 025e B TWINKLE 0x5bda E2.notwinkle 5bda 02bd 5e78 MVII #ENGINE2_RET, R5 5bdc 0200 1252 B RAND 0x5bde E2.died 5bde 02b8 0001 MVII #1, R0 5be0 0240 0174 MVO R0, DNENG 5be2 0200 0294 B ENGINE2_RET ; ENDP ;;==========================================================================;; ;; RSGGB Reset Good Guy's bullets. ;; ;;==========================================================================;; 0x5be4 RSGGB PROC 5be4 0270 PSHR R0 5be5 01c0 CLRR R0 ; \ 5be6 0240 014a MVO R0, SPAT2+5 ; |- Disable Sprites for GGBs 1 & 2 5be8 0240 014b MVO R0, SPAT2+6 ; / 5bea 0240 010f MVO R0, HBDATA ; 5bec 0240 0111 MVO R0, HBCOL1 ; \ 5bee 0008 INCR R0 ; |_ Disable horizontal bullet 5bef 0240 0112 MVO R0, HBCNT ; | 5bf1 0240 0113 MVO R0, HBCNT2 ; / 5bf3 02b8 6060 MVII #$6060, R0 ; \ 5bf5 0240 0339 MVO R0, GGB0 ; |_ Move GGBs off screen. 5bf7 0240 033a MVO R0, GGB1 ; | 5bf9 0240 033b MVO R0, GGB2 ; / 5bfb 02b0 PULR R0 5bfc 00af JR R5 ENDP MACRO jhp(a, b) (((%a% SHL 8) AND $FE00) OR (%b% AND $1FE) OR (%a% SHR 8)) ENDM MACRO jhr(a, b, c, d, e, f, g, h) jhp(%a%, %b%), jhp(%c%, %d%), jhp(%e%, %f%), jhp(%g%, %h%) ENDM ;;==========================================================================;; ;; MJHTBL Minimum Jump Height Table. ;; ;;==========================================================================;; 0x5bfd MJHTBL PROC ;; Rock #1 ; DECLE jhp( 0, 0) ; Padding 5bfd 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; Padding ; DECLE jhr( 0, 0, 0, 0, 0, 0, 0, 0) ; Padding 5bfe 0000 0000 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; Padding 5c01 0000 ; DECLE jhr( 0, 32, 64, 96, 128, 128, 160, 192) ; -8 thru -1 5c02 0020 4060 8080 DECLE (((0 SHL 8) AND $FE00) OR (32 AND $1FE) OR (0 SHR 8)), (((64 SHL 8) AND $FE00) OR (96 AND $1FE) OR (64 SHR 8)), (((128 SHL 8) AND $FE00) OR (128 AND $1FE) OR (128 SHR 8)), (((160 SHL 8) AND $FE00) OR (192 AND $1FE) OR (160 SHR 8)) ; -8 thru -1 5c05 a0c0 ;@@rock1 DECLE jhr(192, 160, 160, 192, 192, 160, 160, 192) ; 0 thru 7 5c06 c0a0 a0c0 c0a0 @@rock1 DECLE (((192 SHL 8) AND $FE00) OR (160 AND $1FE) OR (192 SHR 8)), (((160 SHL 8) AND $FE00) OR (192 AND $1FE) OR (160 SHR 8)), (((192 SHL 8) AND $FE00) OR (160 AND $1FE) OR (192 SHR 8)), (((160 SHL 8) AND $FE00) OR (192 AND $1FE) OR (160 SHR 8)) ; 0 thru 7 5c09 a0c0 ; DECLE jhr(192, 160, 128, 128, 96, 96, 96, 64) ; 8 thru 15 5c0a c0a0 8080 6060 DECLE (((192 SHL 8) AND $FE00) OR (160 AND $1FE) OR (192 SHR 8)), (((128 SHL 8) AND $FE00) OR (128 AND $1FE) OR (128 SHR 8)), (((96 SHL 8) AND $FE00) OR (96 AND $1FE) OR (96 SHR 8)), (((96 SHL 8) AND $FE00) OR (64 AND $1FE) OR (96 SHR 8)) ; 8 thru 15 5c0d 6040 ; DECLE jhr( 0, 0, 0, 0, 0, 0, 0, 0) ; 16 thru 19 5c0e 0000 0000 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; 16 thru 19 5c11 0000 ;; Rock #2 ; DECLE jhp( 0, 0) ; Padding 5c12 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; Padding ; DECLE jhr( 0, 32, 96, 160, 192, 192, 224, 256) ; -8 thru -1 5c13 0020 60a0 c0c0 DECLE (((0 SHL 8) AND $FE00) OR (32 AND $1FE) OR (0 SHR 8)), (((96 SHL 8) AND $FE00) OR (160 AND $1FE) OR (96 SHR 8)), (((192 SHL 8) AND $FE00) OR (192 AND $1FE) OR (192 SHR 8)), (((224 SHL 8) AND $FE00) OR (256 AND $1FE) OR (224 SHR 8)) ; -8 thru -1 5c16 e100 ;@@rock2 DECLE jhr(256, 224, 224, 256, 256, 224, 224, 256) ; 0 thru 7 5c17 00e1 e100 00e1 @@rock2 DECLE (((256 SHL 8) AND $FE00) OR (224 AND $1FE) OR (256 SHR 8)), (((224 SHL 8) AND $FE00) OR (256 AND $1FE) OR (224 SHR 8)), (((256 SHL 8) AND $FE00) OR (224 AND $1FE) OR (256 SHR 8)), (((224 SHL 8) AND $FE00) OR (256 AND $1FE) OR (224 SHR 8)) ; 0 thru 7 5c1a e100 ; DECLE jhr(256, 224, 192, 192, 160, 160, 160, 128) ; 8 thru 15 5c1b 00e1 c0c0 a0a0 DECLE (((256 SHL 8) AND $FE00) OR (224 AND $1FE) OR (256 SHR 8)), (((192 SHL 8) AND $FE00) OR (192 AND $1FE) OR (192 SHR 8)), (((160 SHL 8) AND $FE00) OR (160 AND $1FE) OR (160 SHR 8)), (((160 SHL 8) AND $FE00) OR (128 AND $1FE) OR (160 SHR 8)) ; 8 thru 15 5c1e a080 ; DECLE jhr( 96, 32, 0, 0, 0, 0, 0, 0) ; 16 thru 19 5c1f 6020 0000 0000 DECLE (((96 SHL 8) AND $FE00) OR (32 AND $1FE) OR (96 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; 16 thru 19 5c22 0000 ;; Rock #3 ; DECLE jhp( 0, 0) ; Padding 5c23 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; Padding ; DECLE jhr( 0, 32, 96, 160, 192, 192, 224, 256) ; -16 thru -9 5c24 0020 60a0 c0c0 DECLE (((0 SHL 8) AND $FE00) OR (32 AND $1FE) OR (0 SHR 8)), (((96 SHL 8) AND $FE00) OR (160 AND $1FE) OR (96 SHR 8)), (((192 SHL 8) AND $FE00) OR (192 AND $1FE) OR (192 SHR 8)), (((224 SHL 8) AND $FE00) OR (256 AND $1FE) OR (224 SHR 8)) ; -16 thru -9 5c27 e100 ; DECLE jhr(256, 224, 224, 256, 256, 224, 224, 256) ; -8 thru -1 5c28 00e1 e100 00e1 DECLE (((256 SHL 8) AND $FE00) OR (224 AND $1FE) OR (256 SHR 8)), (((224 SHL 8) AND $FE00) OR (256 AND $1FE) OR (224 SHR 8)), (((256 SHL 8) AND $FE00) OR (224 AND $1FE) OR (256 SHR 8)), (((224 SHL 8) AND $FE00) OR (256 AND $1FE) OR (224 SHR 8)) ; -8 thru -1 5c2b e100 ;@@rock3 DECLE jhr(256, 224, 192, 192, 192, 160, 160, 192) ; 0 thru 7 5c2c 00e1 c0c0 c0a0 @@rock3 DECLE (((256 SHL 8) AND $FE00) OR (224 AND $1FE) OR (256 SHR 8)), (((192 SHL 8) AND $FE00) OR (192 AND $1FE) OR (192 SHR 8)), (((192 SHL 8) AND $FE00) OR (160 AND $1FE) OR (192 SHR 8)), (((160 SHL 8) AND $FE00) OR (192 AND $1FE) OR (160 SHR 8)) ; 0 thru 7 5c2f a0c0 ; DECLE jhr(192, 160, 128, 128, 96, 96, 96, 64) ; 8 thru 15 5c30 c0a0 8080 6060 DECLE (((192 SHL 8) AND $FE00) OR (160 AND $1FE) OR (192 SHR 8)), (((128 SHL 8) AND $FE00) OR (128 AND $1FE) OR (128 SHR 8)), (((96 SHL 8) AND $FE00) OR (96 AND $1FE) OR (96 SHR 8)), (((96 SHL 8) AND $FE00) OR (64 AND $1FE) OR (96 SHR 8)) ; 8 thru 15 5c33 6040 ; DECLE jhr( 0, 0, 0, 0, 0, 0, 0, 0) ; 16 thru 19 5c34 0000 0000 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; 16 thru 19 5c37 0000 ;; Crat #1 ; DECLE jhp( 0, 0) ; Padding 5c38 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; Padding ; DECLE jhr( 0, 0, 0, 0, 4, 4, 4, 4) ; -8 thru -1 5c39 0000 0000 0404 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)) ; -8 thru -1 5c3c 0404 ;@@crat1 DECLE jhr( 4, 4, 4, 4, 4, 4, 4, 4) ; 0 thru 7 5c3d 0404 0404 0404 @@crat1 DECLE (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)) ; 0 thru 7 5c40 0404 ; DECLE jhr( 4, 4, 4, 4, 4, 0, 0, 0) ; 8 thru 15 5c41 0404 0404 0400 DECLE (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (0 AND $1FE) OR (4 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; 8 thru 15 5c44 0000 ; DECLE jhr( 0, 0, 0, 0, 0, 0, 0, 0) ; 16 thru 19 5c45 0000 0000 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; 16 thru 19 5c48 0000 ;; Crat #2 ; DECLE jhp( 0, 0) ; Padding 5c49 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; Padding ; DECLE jhr( 0, 0, 0, 0, 4, 4, 4, 4) ; -16 thru -9 5c4a 0000 0000 0404 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)) ; -16 thru -9 5c4d 0404 ; DECLE jhr( 4, 4, 4, 4, 4, 4, 4, 4) ; -8 thru -1 5c4e 0404 0404 0404 DECLE (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)) ; -8 thru -1 5c51 0404 ;@@crat2 DECLE jhr( 4, 4, 4, 4, 4, 4, 4, 4) ; 0 thru 7 5c52 0404 0404 0404 @@crat2 DECLE (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)) ; 0 thru 7 5c55 0404 ; DECLE jhr( 4, 4, 4, 4, 4, 0, 0, 0) ; 8 thru 15 5c56 0404 0404 0400 DECLE (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (4 AND $1FE) OR (4 SHR 8)), (((4 SHL 8) AND $FE00) OR (0 AND $1FE) OR (4 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; 8 thru 15 5c59 0000 ; DECLE jhr( 0, 0, 0, 0, 0, 0, 0, 0) ; 16 thru 19 5c5a 0000 0000 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)), (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; 16 thru 19 5c5d 0000 ; DECLE jhp( 0, 0) ; Padding 5c5e 0000 DECLE (((0 SHL 8) AND $FE00) OR (0 AND $1FE) OR (0 SHR 8)) ; Padding ENDP 0x5c5f MJHIDX PROC 5c5f b80c b804 DECLE 2*MJHTBL.rock1, 2*MJHTBL.rock1 - 8 5c61 b82e b826 DECLE 2*MJHTBL.rock2, 2*MJHTBL.rock2 - 8 5c63 b858 b850 b848 DECLE 2*MJHTBL.rock3, 2*MJHTBL.rock3 - 8, 2*MJHTBL.rock3 - 16 5c66 b87a b872 DECLE 2*MJHTBL.crat1, 2*MJHTBL.crat1 - 8 5c68 b8a4 b89c b894 DECLE 2*MJHTBL.crat2, 2*MJHTBL.crat2 - 8, 2*MJHTBL.crat2 - 16 ENDP ;;==========================================================================;; ;; HALTENGINE -- Utility function to shut things down. ;; ;;==========================================================================;; 0x5c6b HALTENGINE PROC ;; ------------------------------------------------------------ ;; ;; Halt all the MOBs. ;; ;; ------------------------------------------------------------ ;; 5c6b 02b8 0003 MVII #3, R0 ;\__ Halt all updates in engine2 5c6d 0240 0119 MVO R0, EMODE ;/ except sprite->MOB muxing. ; B SPINIT ENDP ;; ======================================================================== ;; ;; SPINIT -- Initialize the MOB data structures so things don't blow up. ;; ;; ======================================================================== ;; 0x5c6f SPINIT PROC 5c6f 00aa MOVR R5, R2 5c70 02bc 0140 MVII #.SPSTART8, R4 5c72 02b9 001d MVII #.SPSTOP8 - .SPSTART8, R1 5c74 0004 016c 02f8 CALL FILLZERO 5c77 02bc 02f0 MVII #.SPSTART16, R4 5c79 02b9 0048 MVII #.SPSTOP16 - .SPSTART16, R1 5c7b 0095 MOVR R2, R5 5c7c 0200 127a B FILLZERO ENDP ;; ======================================================================== ;; ;; ENGDONE ;; ;; ;; ;; Cleanup "engine" ISR which disables all the MOBs and then switches to ;; ;; the miscellaneous ISR as the main ISR afterwards. This is called to ;; ;; clean up after the main game engine ISR. ;; ;; ;; ;; ======================================================================== ;; 0x5c7e ENGDONE PROC 5c7e 0240 0020 MVO R0, $20 5c80 0004 015c 0228 CALL CLRSP.1 5c83 0004 015c 0225 CALL CLRSP ; SETISR MISCISR 5c86 0004 016c 0244 CALL _SETISR 5c89 6e14 DECLE MISCISR 5c8a 0200 118a B MISCISR.1 ENDP ; INCLUDE "engine/ckbgb.asm" ; Check bad-guy bullets ; INCLUDE "engine/ckggb.asm" ; Check good-guy bullets ; INCLUDE "engine/ckbrc.asm" ; Check buggy-rock collision ; INCLUDE "engine/ckbgp.asm" ; Check bad-guy position (culling) ; INCLUDE "engine/upcrd.asm" ; Update cards INCLUDE "engine/upmux.asm" ; Update MOB muxing ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; UPMUX Update sprite multiplexing. ;; ;;==========================================================================;; 0x5c8c UPMUX PROC 5c8c 0275 PSHR R5 ; 9 5c8d 01c0 CLRR R0 ; 6 5c8e 0240 0349 MVO R0, SDATP ; 11 ;---- ; 26 ;;------------------------------------------------------------------;; ;; Now that we know what sprites go in what groups, mux them into ;; ;; our object groups. We keep a counter for each group that tells ;; ;; us where we left off last frame when displaying sprites for ;; ;; that group. We merely pick up at that point and start again. ;; ;; ;; ;; The variables GP1CNT, GP2CNT tell us our starting point. ;; ;; ;; ;; The object table consists of two arrays, the SPXYP array that ;; ;; holds our X/Y position as an 8.8 number. The SPAT array holds ;; ;; object attributes, stored as an index into the SPATBL plus 1. ;; ;; Inactive objects have their SPAT value set to 0. This allows ;; ;; gaps in the object table, simplifying bookkeeping elsewhere. ;; ;;------------------------------------------------------------------;; 5c90 0281 0159 MVI GP1CNT, R1 ; 10 5c92 02bc 0320 MVII #SPXY1, R4 ; 8 Point to Group 1's X/Y pos base 5c94 02ba 013f MVII #SPAT1 - 1, R2 ; 8 Point to Group 1's attr base 5c96 00ca ADDR R1, R2 ; 6 Offset to current counter offset 5c97 0049 SLL R1, 1 ; 6 Offset to current counter offset 5c98 00cc ADDR R1, R4 ; 6 Offset to current counter offset 5c99 02bb 02f2 MVII #SDAT+2,R3 ; 8 Point to MOB #2. 5c9b 0281 0157 MVI GP1MOB, R1 ; 10 5c9d 0200 0023 B @@gp1mobf ; 9 ;---- ; 71 ; 26 (caried forward) ;---- ; 97 0x5c9f @@gp1skip: 5c9f 02fc 0002 ADDI #2, R4 ; 8 Move to next X/Y pair 0x5ca1 @@gp1mobl: 5ca1 037a 0144 CMPI #SPAT1+MAXGP1-1,R2 ; 8 Count >= 5? (5 slots in group 1) 5ca3 0205 0004 BLT @@1cntok ; 7/9 If no, skip CLRR R2 5ca5 02bc 0320 MVII #SPXY1, R4 ; 8 Point to Group 1's X/Y pos base 5ca7 02ba 013f MVII #SPAT1 - 1, R2 ; 8 Point to Group 1's attr base 0x5ca9 @@1cntok: 5ca9 000a INCR R2 ; 6 Go to next attr entry 5caa 0295 MVI@ R2, R5 ; 8 Get attribute # 5cab 0015 DECR R5 ; 6 Inactive object? 5cac 022b 000e BMI @@gp1skip ; 7/9 Yes: Skip it. ;---- ; Assuming BMI not taken: ; 66 gp1skip to here, 1cntok not taken ; 58 gp1mobl to here, 1cntok not taken ; 52 gp1skip to here, 1cntok taken ; 44 gp1mobl to here, 1cntok taken 5cae 02fd d006 ADDI #SPATBL,R5 ; 8 Index into global attribute table 5cb0 02a0 MVI@ R4, R0 ; 8 Get x position 5cb1 03b8 00ff ANDI #$FF, R0 ; 8 5cb3 02e8 ADD@ R5, R0 ; 8 Merge w/ x-pos attr template 5cb4 0258 MVO@ R0, R3 ; 9 Store to MOB X position 5cb5 02fb 0008 ADDI #8, R3 ; 8 Move to MOB Y register 5cb7 02a0 MVI@ R4, R0 ; 8 Get y position 5cb8 03b8 00ff ANDI #$FF, R0 ; 8 5cba 02e8 ADD@ R5, R0 ; 8 Merge w/ y-pos attr template 5cbb 0258 MVO@ R0, R3 ; 9 Store to MOB Y position 5cbc 02fb 0008 ADDI #8, R3 ; 8 Move to MOB A register 5cbe 02a8 MVI@ R5, R0 ; 8 Get attr register 5cbf 0258 MVO@ R0, R3 ; 9 Store to MOB A register 5cc0 033b 000f SUBI #15, R3 ; 8 Go to next MOB X register 0x5cc2 @@gp1mobf 5cc2 0011 DECR R1 ; 6 Any more MOBs to do? 5cc3 0223 0023 BPL @@gp1mobl ; 9/7 ;---- ; 130 loop body ; 44 baseline for initial part ;---- ; 174 baseline loop iter. ; 130 loop body ; 58 gp1mobl, 1cntok not taken (1/mux) ;---- ; 188 once-per-mux iter. ; Worst case: 3 active + 1 wrap ; 348 (174 * 2) ; 188 (wrap iteration) ; -2 (last iter) ; 97 (carried fwd) ;---- ; 631 5cc5 033a 013f SUBI #SPAT1-1, R2 ; 8 5cc7 0242 0159 MVO R2, GP1CNT ; 10 Save group 1's mux counter 5cc9 0281 015a MVI GP2MOB, R1 ; 10 Get # of MOBs in group 2 5ccb 0280 015c MVI GP2CNT, R0 ; 10 Get group 2's mux counter 5ccd 02bc 032a MVII #SPXY2, R4 ; 8 Point to Group 2's X/Y pos base 5ccf 02ba 0144 MVII #SPAT2 - 1, R2 ; 8 Point to Group 2's attr base 5cd1 00c2 ADDR R0, R2 ; 6 Offset to current counter offset 5cd2 0048 SLL R0, 1 ; 6 Offset to current counter offset 5cd3 00c4 ADDR R0, R4 ; 6 Offset to current counter offset 5cd4 0200 0023 B @@gp2mobf ; 9 ;---- ; 81 ; 631 (carried fwd) ;---- ; 712 0x5cd6 @@gp2skip: 5cd6 02fc 0002 ADDI #2, R4 ; 8 Move to next X/Y pair 0x5cd8 @@gp2mobl: 5cd8 037a 014b CMPI #SPAT2+MAXGP2-1,R2 ; 10 Count >= 7? (7 slots in group 2) 5cda 0205 0004 BLT @@2cntok ; 7/9 If no, skip CLRR R2 5cdc 02bc 032a MVII #SPXY2, R4 ; 8 Point to Group 2's X/Y pos base 5cde 02ba 0144 MVII #SPAT2 - 1, R2 ; 8 Point to Group 2's attr base 0x5ce0 @@2cntok: 5ce0 000a INCR R2 ; 6 Go to next attr entry 5ce1 0295 MVI@ R2, R5 ; 8 Get attribute # 5ce2 0015 DECR R5 ; 6 Inactive object? 5ce3 022b 000e BMI @@gp2skip ; 7/9 Yes: Skip it. ;---- ; Assuming BMI not taken: ; 66 gp1skip to here, 1cntok not taken ; 58 gp1mobl to here, 1cntok not taken ; 52 gp1skip to here, 1cntok taken ; 44 gp1mobl to here, 1cntok taken 5ce5 02fd d006 ADDI #SPATBL,R5 ; 8 Index into global attribute table 5ce7 02a0 MVI@ R4, R0 ; 8 Get x position 5ce8 03b8 00ff ANDI #$FF, R0 ; 8 5cea 02e8 ADD@ R5, R0 ; 8 Merge w/ x-pos attr template 5ceb 0258 MVO@ R0, R3 ; 9 Store to MOB X position 5cec 02fb 0008 ADDI #8, R3 ; 8 Move to MOB Y register 5cee 02a0 MVI@ R4, R0 ; 8 Get y position 5cef 03b8 00ff ANDI #$FF, R0 ; 8 5cf1 02e8 ADD@ R5, R0 ; 8 Merge w/ y-pos attr template 5cf2 0258 MVO@ R0, R3 ; 9 Store to MOB Y position 5cf3 02fb 0008 ADDI #8, R3 ; 8 Move to MOB A register 5cf5 02a8 MVI@ R5, R0 ; 8 Get attr register 5cf6 0258 MVO@ R0, R3 ; 9 Store to MOB A register 5cf7 033b 000f SUBI #15, R3 ; 8 Go to next MOB X register 0x5cf9 @@gp2mobf 5cf9 0011 DECR R1 ; 6 Any more MOBs to do? 5cfa 0223 0023 BPL @@gp2mobl ; 9/7 ;---- ; 130 loop body ; 44 baseline for initial part ;---- ; 174 baseline loop iter. ; 130 loop body ; 58 gp1mobl, 1cntok not taken (1/mux) ;---- ; 188 once-per-mux iter. ; Worst case: 3 active + 1 wrap ; 348 (174 * 2) ; 188 (wrap iteration) ; -2 (last iter) ;---- ; 534 5cfc 033a 0144 SUBI #SPAT2-1, R2 ; 8 5cfe 0242 015c MVO R2, GP2CNT ; 10 Save group 2's mux counter ;---- ; 18 ; 534 (carried fwd) ; 712 (carried fwd) ;---- ;1264 (worst case) ; ;;------------------------------------------------------------------;; ;; Clear out the unallocated MOBs. Note that we never clear MOB ;; ;; #7. That MOB may be allocated to the level-marker character. ;; ;; Rather, the LMCHAR code will clear that ahead of this function. ;; ;;------------------------------------------------------------------;; 5d00 009c MOVR R3, R4 ; 6 5d01 033b 02f7 SUBI #SDAT+7,R3 ; 8 5d03 0203 000b BPL @@done ; 9/7 ;---- ; 23 ;1264 (carried fwd) ;---- ;1287 (worst case) ; Note in worst case, none of MVO@ fire 5d05 01c0 CLRR R0 ; 6 5d06 0260 MVO@ R0, R4 ; 9 5d07 02fb 5d0f ADDI #@@d1, R3 ; 8 5d09 009f MOVR R3, PC ; 7 5d0a 0260 MVO@ R0, R4 ; 9 5d0b 0260 MVO@ R0, R4 ; 9 5d0c 0260 MVO@ R0, R4 ; 9 5d0d 0260 MVO@ R0, R4 ; 9 5d0e 0034 NOP ; 6 5d0f 0034 @@d1: NOP 5d10 02b8 02f0 @@done: MVII #SDAT, R0 ; 8 5d12 0240 0349 MVO R0, SDATP ; 11 5d14 02b7 PULR PC ; 11 ;---- ; 30 ;1287 ; 12 CALL overhead ;==== ;1329 ENDP ;__ INCLUDE "engine/upspa.asm" ; Update sprite allocations ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; UPSPA Updates sprite allocations within each MOB group. ;; ;;==========================================================================;; 0x5d15 UPSPA PROC ;;------------------------------------------------------------------;; ;; Recalc GP1ACT, GP2ACT. ;; ;;------------------------------------------------------------------;; 5d15 02bc 0140 MVII #SPAT, R4 ; 8 Point to sprite attribute table 5d17 02bb 0003 MVII #3, R3 ; 8 We reuse this 4 times. ;---- ; 16 ; totally abuse the fact bit 1 is always 0 5d19 02a0 MVI@ R4, R0 ; 8 5d1a 02e0 ADD@ R4, R0 ; 8 5d1b 02e0 ADD@ R4, R0 ; 8 5d1c 02a1 MVI@ R4, R1 ; 8 5d1d 02e1 ADD@ R4, R1 ; 8 5d1e 0198 ANDR R3, R0 ; 6 5d1f 0199 ANDR R3, R1 ; 6 5d20 00c1 ADDR R0, R1 ; 6 5d21 0241 0158 MVO R1, GP1ACT ; 11 ;---- ; 69 5d23 02a0 MVI@ R4, R0 ; 8 5d24 02e0 ADD@ R4, R0 ; 8 5d25 02e0 ADD@ R4, R0 ; 8 5d26 02a1 MVI@ R4, R1 ; 8 5d27 02e1 ADD@ R4, R1 ; 8 5d28 02e1 ADD@ R4, R1 ; 8 5d29 0198 ANDR R3, R0 ; 6 5d2a 0199 ANDR R3, R1 ; 6 5d2b 00c1 ADDR R0, R1 ; 6 5d2c 03a3 AND@ R4, R3 ; 8 5d2d 00d9 ADDR R3, R1 ; 6 5d2e 0241 015b MVO R1, GP2ACT ; 11 ;---- ; 91 ; 16 (carried forward) ; 69 (carried forward) ;---- ; 176 ;;------------------------------------------------------------------;; ;; Allocate active objects to actual MOBs. ;; ;; ;; ;; Objects are divided into two groups. Group 1 objects are the ;; ;; "bad guy" objects, and Group 2 objects are the bullets. Each ;; ;; group gets 3 MOBs by default. If one of the groups has fewer ;; ;; than 3 active sprites, then the other group may use the left- ;; ;; over MOBs. ;; ;; ;; ;; The reason we divide up the objects into two groups like this ;; ;; is that we typically have between 1 and 3 creeps (but as many ;; ;; as 5 in rare circumstances). In contrast, we typically have ;; ;; around 3 to 5 bullets in the air, with up to 7 being in flight. ;; ;; The creeps are more susceptible to multiplexing artifacts than ;; ;; the bullets, so we want to give them preference when muxing ;; ;; MOBs. This arrangement ends up working out pretty well. ;; ;; ;; ;; Addendum: If the level marker is onscreen, it steals from ;; ;; Group 2. The level marker always gets a MOB. ;; ;;------------------------------------------------------------------;; 0x5d30 @@spa: 5d30 02b8 0003 MVII #3, R0 ; 8 R0 is Group 1's MOB allocation 5d32 01db CLRR R3 ; 6 Used for resetting MUX counter 5d33 01c9 CLRR R1 ; 6 5d34 0341 0166 CMP LMCNT, R1 ; 10 Is level marker active? 5d36 0204 0001 BEQ @@no_level_marker ; 9/7 5d38 0011 DECR R1 ; 6 ;---- ; 43 ; 176 ;---- ; 219 0x5d39 @@no_level_marker: 5d39 00c1 ADDR R0, R1 ; 6 R1 is Group 2's MOB allocation ; (2 if level marker active, 3 ; otherwise.) 5d3a 0082 MOVR R0, R2 ; 6 5d3b 0302 0158 SUB GP1ACT, R2 ; 10 3 or more active in Group 1? 5d3d 020b 000f BMI @@gp1full ; 7/9 Yes -- go straight to Group 2 5d3f 00d1 ADDR R2, R1 ; 6 No -- add extra to Group 2's MOBs 5d40 0280 0158 MVI GP1ACT, R0 ; 10 Clamp Group 1 to actual # of active 5d42 0243 0159 MVO R3, GP1CNT ; 10 Reset MUX counter. 5d44 0282 015b MVI GP2ACT, R2 ; 10 Get # of active in Group 2 5d46 0151 CMPR R2, R1 ; 6 Fewer MOBs than active? 5d47 0205 0017 BLT @@spadone ; 7/9 Yes -- done allocating 5d49 0091 MOVR R2, R1 ; 6 No -- Clamp to number of active 5d4a 0243 015c MVO R3, GP2CNT ; 10 Reset MUX counter. 5d4c 0200 0012 B @@spadone ; 9 Done allocating ;---- ; 103 (only last branch taken) ; 31 (if jumping to gp1full) 0x5d4e @@gp1full: 5d4e 008a MOVR R1, R2 ; 6 5d4f 0302 015b SUB GP2ACT, R2 ; 10 More sprites than MOBs in group 2? 5d51 020b 000d BMI @@spadone ; 7/9 Yes -- done allocating 5d53 00d0 ADDR R2, R0 ; 6 No -- add extra to Group 1's MOBs 5d54 0281 015b MVI GP2ACT, R1 ; 10 Clamp Group 2 to actual # of active 5d56 0243 015c MVO R3, GP2CNT ; 10 Reset MUX counter. 5d58 0282 0158 MVI GP1ACT, R2 ; 10 Get # of active in Group 1 5d5a 0150 CMPR R2, R0 ; 6 Fewer MOBs than active? 5d5b 0205 0003 BLT @@spadone ; 7/9 Yes -- done allocating 5d5d 0090 MOVR R2, R0 ; 6 No -- Clamp to number of active 5d5e 0243 0159 MVO R3, GP1CNT ; 10 Reset MUX counter. ; B @@spadone ;.... Done allocating ;---- ; 88 (fall thru) ; 31 (carried forward) ;---- ; 119 0x5d60 @@spadone: 5d60 0240 0157 MVO R0, GP1MOB ; 11 5d62 0241 015a MVO R1, GP2MOB ; 11 5d64 00af JR R5 ; 7 ;---- ; 29 ; 219 (carried forward) ; 119 (carried forward) ; 12 (call overhead) ;---- ; 379 ENDP ;__ ; INCLUDE "engine/upspp.asm" ; Update sprite positions INCLUDE "engine/upbsp.asm" ; Update buggy sprite ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; UPBSP Update Moon Buggy sprites ;; ;;==========================================================================;; 0x5d65 UPBSP PROC ;;------------------------------------------------------------------;; ;; Do buggy sprites manually -- they always get MOBs 0 and 1. ;; ;;------------------------------------------------------------------;; 5d65 0280 0170 MVI GRATE, R0 ; 10 Get buggy's current rate 5d67 006c SAR R0, 2 ; 8 \___ X coord == (rate/4) - 4 5d68 0338 0004 SUBI #$4, R0 ; 8 / 5d6a 03b8 00ff ANDI #$FF, R0 ; 8 Mask to 8-bit range 5d6c 0081 MOVR R0, R1 ; 6 copy X coord 5d6d 03f8 0700 XORI #_X.xsiz+_X.visb+_X.intr,R0 ; 8 Merge in XSIZE, VISB, INTR bits 5d6f 0240 02f1 MVO R0, $01 + SDAT ; 11 Set position of buggy 5d71 02f8 0003 ADDI #$3, R0 ; 8 Wheels/guns are 3 pixels to right 5d73 0240 02f0 MVO R0, $00 + SDAT ; 11 Set position of wheels/guns 5d75 0339 0008 SUBI #8, R1 ; 8 \__ back end of moon buggy 5d77 0241 015d MVO R1, TXLO ; 11 / ;---- ; 97 0x5d79 @@1: 5d79 0281 0343 MVI JHGT, R1 ; 10 \ 5d7b 02f9 000f ADDI #15, R1 ; 8 | Load in the jump height. It's 5d7d 006d SAR R1, 2 ; 8 |-- a Q5 number. Round it up as 5d7e 006d SAR R1, 2 ; 8 | we truncate it. 5d7f 0069 SAR R1, 1 ; 6 / 5d80 02b8 0147 MVII #$100+GROW_p+7, R0 ; 8 \___ Y = $47 - jump_height 5d82 0108 SUBR R1, R0 ; 6 / Set 2x-height flag 5d83 0240 02f9 MVO R0, $09 + SDAT ; 11 Store Y coord for buggy. 5d85 02b8 01c7 MVII #$180+GROW_p+7, R0 ; 8 \___ Y = $47 - jump_height 5d87 0108 SUBR R1, R0 ; 6 / Set 2x-height, 16-rows flags 5d88 0240 02f8 MVO R0, $08 + SDAT ; 11 Store Y coord for wheels/guns ;---- ; 90 5d8a 02b8 193f MVII #$1807+BCARD*8, R0 ; 8 Buggy is maroon, uses GRAM card 5d8c 0240 0301 MVO R0, $11 + SDAT ; 11 Set attributes for buggy 5d8e 02b8 0940 MVII #$0800+WCARD*8, R0 ; 8 Wheels/guns are black, use GRAM 5d90 0240 0300 MVO R0, $10 + SDAT ; 11 Set attributes for wheels/guns ;---- ; 38 ; 12 (fxn call) ; 97 ; 90 ; 38 5d92 00af JR R5 ; 7 ;---- ; 246 ENDP ;__ ; INCLUDE "engine/upbgp.asm" ; Update buggy/ground position ; INCLUDE "engine/uphbp.asm" ; Update horiz bullet position ; INCLUDE "engine/upani.asm" ; Update animation INCLUDE "engine/ttlsp.asm" ; Title sprite updates ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; TTLSP Display sprites for title screen. ;; ;;==========================================================================;; 0x5d93 TTLSP PROC 5d93 0275 PSHR R5 ;;------------------------------------------------------------------;; ;; Arrange for the title screen graphic to display. ;; ;;------------------------------------------------------------------;; 5d94 02b8 f981 MVII #LMPTITLE, R0 ; \___ Abuse the rock/crat copyover 5d96 0240 0342 MVO R0, RPTR ; / to pull in title graphic. :-) 5d98 02bc f9b2 MVII #TITLESP, R4 ; \ 5d9a 02bd 02f2 MVII #SDAT + 2, R5 ; |-- Copy over the fixed title 5d9c 02b9 0003 MVII #3, R1 ; / 5-MOB pattern. 0x5d9e @@tsplp 5d9e 02a0 MVI@ R4, R0 ; \ 5d9f 0268 MVO@ R0, R5 ; | 5da0 02a0 MVI@ R4, R0 ; | 5da1 0268 MVO@ R0, R5 ; | 5da2 02a0 MVI@ R4, R0 ; | 5da3 0268 MVO@ R0, R5 ; |__ Copy over 5 MOB per iter 5da4 02a0 MVI@ R4, R0 ; | for each of the three regs. 5da5 0268 MVO@ R0, R5 ; | 5da6 02a0 MVI@ R4, R0 ; | 5da7 0268 MVO@ R0, R5 ; | 5da8 02fd 0003 ADDI #3, R5 ; | 5daa 0011 DECR R1 ; | 5dab 022c 000e BNEQ @@tsplp ; / ;;------------------------------------------------------------------;; ;; Now do the little message fader. We use MOB #7 for the 'comb' ;; ;; that fades messages in and out. ;; ;;------------------------------------------------------------------;; 5dad 0281 02f7 MVI SDAT + 7, R1 ; \ 5daf 02f9 0002 ADDI #2, R1 ; |-- Move the "comb" right 2 pixels 5db1 03b9 00ff ANDI #$FF, R1 ; / 5db3 008c MOVR R1, R4 ; Copy the X position 5db4 037c 00a0 CMPI #160, R4 ; Are we at the right of the screen? 5db6 020c 0005 BNEQ @@same_msg ; No: Don't increment message number 5db8 0285 0117 MVI TMADDR, R5 ; \ 5dba 000d INCR R5 ; |-- Otherwise, advance to the next 5dbb 0245 0117 MVO R5, TMADDR ; / message in our message ring. 0x5dbd @@same_msg 5dbd 02fc 0600 ADDI #_X.visb+_X.xsiz,R4 ; \___ Store updated X register for 5dbf 0244 02f7 MVO R4, SDAT + 7 ; / "comb" graphic. ; MVI SDAT + 15, R4 ; ANDI #_Y.ymir, R4 ; XORI #56 + _Y.yres + _Y.ymir, R4 5dc1 02bc 08b8 MVII #56 + _Y.yres + _Y.ymir, R4 ; \ Store values for Y and A 5dc3 0244 02ff MVO R4, SDAT + 15 ; |-- registers for "comb" graphic 5dc5 0284 013a MVI COURSE, R4 5dc7 03bc 000e ANDI #$E, R4 5dc9 02fc 674f ADDI #CSTKCLR-8, R4 5dcb 02a2 MVI@ R4, R2 5dcc 0066 SLR R2, 2 5dcd 0066 SLR R2, 2 5dce 03ba 000f ANDI #$F, R2 5dd0 02fa 0ff8 ADDI #$FF8, R2 5dd2 03ba 1007 ANDI #$1007, R2 5dd4 02fa 09b0 ADDI #LMPCARDx + 10*8 - X_TITL, R2 5dd6 0242 0307 MVO R2, SDAT + 23 ; / 5dd8 0379 00a0 CMPI #160, R1 ; Are we off right side? 5dda 020d 002c BGE @@offright ; Yes: Do nothing for now. 5ddc 008c MOVR R1, R4 ; \ 5ddd 03bc 0007 ANDI #$7, R4 ; |-- If we're not at a card 5ddf 037c 0006 CMPI #6, R4 5de1 020c 0022 BNEQ @@done ; / boundary, then that's it! 5de3 0065 SLR R1, 2 ; \__ Convert X coord to card # 5de4 0061 SLR R1, 1 ; / within row. 5de5 0284 0117 MVI TMADDR, R4 ; Get our message number 5de7 02fc f9c1 ADDI #TMTBL, R4 ; Index into the message table 5de9 02a5 MVI@ R4, R5 ; Get the message pointer 5dea 00ad TSTR R5 ; If it's null, time to reset pointer. 5deb 020c 0004 BNEQ @@tmok ; Otherwise, go to the message update. 5ded 0245 0117 MVO R5, TMADDR ; Reset the message pointer 5def 0285 f9c1 MVI TMTBL, R5 ; Get first message's message address 0x5df1 @@tmok 5df1 0088 MOVR R1, R0 5df2 0078 SARC R0 ; 5df3 00c5 ADDR R0, R5 ; Index into the message. 5df4 02f9 0278 ADDI #$200+6*20, R1 ; Point to appropriate place onscreen 5df6 02a8 MVI@ R5, R0 ; Get a character from the message 5df7 008a MOVR R1, R2 ; \ 5df8 007a SARC R2 ; |_ Pick odd/even half 5df9 0209 0001 BNC @@nos ; | 5dfb 0040 SWAP R0 ; / 5dfc 03b8 07f8 @@nos ANDI #$7F8, R0 ; \ 5dfe 03c0 0116 XOR TMCLR, R0 ; | 5e00 028a MVI@ R1, R2 ; |_ Display it onscreen 5e01 03ba 2000 ANDI #$2000, R2 ; | 5e03 01d0 XORR R2, R0 ; | 5e04 0248 MVO@ R0, R1 ; / 5e05 02b5 @@done PULR R5 ; 5e06 0220 00a2 B UPBSP ; Update moon-buggy sprites 0x5e08 @@offright: 5e08 0379 00fe CMPI #$FE, R1 5e0a 022c 0006 BNEQ @@done 5e0c 02bc 019d MVII #SCORE, R4 5e0e 02a0 MVI@ R4, R0 5e0f 02e0 ADD@ R4, R0 5e10 02e0 ADD@ R4, R0 5e11 02e0 ADD@ R4, R0 5e12 0224 000e BEQ @@done 5e14 0280 0117 MVI TMADDR, R0 5e16 0078 SARC R0 5e17 0209 0006 BNC @@final 5e19 0004 0168 02b1 CALL DISPPEAK ; DECLE disp_ptr(11,0) 5e1c 02dc DECLE ($200 + 11*20 + 0) 5e1d 0220 0019 B @@done 0x5e1f @@final 5e1f 0004 0168 02ab CALL DISPFINAL ; DECLE disp_ptr(11,0) 5e22 02dc DECLE ($200 + 11*20 + 0) 5e23 0220 001f B @@done ENDP ;__ INCLUDE "engine/clrsp.asm" ; Clear sprites and update ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; CLRSP Clear all the sprites. ;; ;;==========================================================================;; 0x5e25 CLRSP PROC 5e25 02bc 02f0 MVII #SDAT, R4 ; Just clear out the SDAT shadow regs 5e27 000f INCR PC 5e28 01e4 @@1: CLRR R4 ; Alt: Clear out the actual MOB regs 5e29 01c0 CLRR R0 ; 5e2a 02b9 0003 MVII #$18/8, R1 ; 0x5e2c @@lp1: 5e2c 0260 MVO@ R0, R4 ; \ 5e2d 0260 MVO@ R0, R4 ; | 5e2e 0260 MVO@ R0, R4 ; | 5e2f 0260 MVO@ R0, R4 ; | 5e30 0011 DECR R1 ; |-- Just pump the MOBs full of 5e31 0260 MVO@ R0, R4 ; | zeros. 5e32 0260 MVO@ R0, R4 ; | 5e33 0260 MVO@ R0, R4 ; | 5e34 0260 MVO@ R0, R4 ; / 5e35 022c 000a BNEQ @@lp1 ; 5e37 00af JR R5 ENDP ;__ INCLUDE "engine/twinkle.asm"; Twinkle stars in the sky ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; TWINKLE -- Twinkles the stars in the sky. ;; ;;==========================================================================;; 0x5e38 TWINKLE PROC 5e38 0275 PSHR R5 5e39 0004 016c 0230 CALL RAND 5e3c 0083 MOVR R0, R3 5e3d 03b8 00ff ANDI #$FF, R0 5e3f 0378 003c CMPI #60, R0 5e41 020d 001a BGE @@done 5e43 02ba 0200 MVII #$200, R2 5e45 00c2 ADDR R0, R2 5e46 03bb 0700 ANDI #$700, R3 5e48 0204 0003 BEQ @@toggle 5e4a 01c9 CLRR R1 5e4b 0200 000f B @@clear 0x5e4d @@toggle: 5e4d 0280 035f MVI RSEED, R0 5e4f 03b8 0003 ANDI #3, R0 5e51 02b9 5e5e MVII #@@tbl, R1 5e53 00c1 ADDR R0, R1 5e54 0289 MVI@ R1, R1 5e55 03d1 XOR@ R2, R1 5e56 008b MOVR R1, R3 5e57 03bb 07f8 ANDI #$FF*8, R3 5e59 020c 0001 BNEQ @@ok 5e5b 03d1 XOR@ R2, R1 0x5e5c @@ok: 0x5e5c @@clear: 5e5c 0251 MVO@ R1, R2 5e5d 02b7 @@done: PULR PC 5e5e 095b @@tbl: DECLE $2B*8 + X_TAN + $800 5e5f 1959 DECLE $2B*8 + X_CYN + $800 5e60 195e DECLE $2B*8 + X_YGR + $800 5e61 1958 DECLE $2B*8 + X_GRY + $800 ENDP ;__ ;__ INCLUDE "engine/runeng.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;; ======================================================================== ;; ;; RUNENG Run the main game engine. ;; ;; ;; ;; This function has two purposes: Glue ENGINE1 to ENGINE2, and scan ;; ;; for controller inputs. The hand controller scanner is very simplified ;; ;; and focused only on doing what's needed for the game. ;; ;; ======================================================================== ;; 0x5e62 RUNENG PROC 5e62 0004 01d6 038e JSRD R5, INITMEM.0 ; INIT DOENG, 0 5e65 8173 DECLE _init_const OR DOENG ; INIT DNENG, 0 5e66 8174 DECLE _init_const OR DNENG ; INIT EBSY, 0 5e67 816c DECLE _init_const OR EBSY ; INIT SFXQ, 0 5e68 8199 DECLE _init_const OR SFXQ ; INIT MOBHIT, 1 5e69 8535 DECLE _init_const OR MOBHIT ; INIT SDATP, SDAT 5e6a 4349 DECLE _init_const OR SDATP ; INIT_DONE 5e6b 0000 DECLE 0 IF (DEFINED SEEKKEYS) <> 0 B @@loop @@waitnokey CALL WAITNOKEY ENDI ;; ------------------------------------------------------------ ;; ;; Main event loop: Look for ENGINE2 requests and scan ctrls ;; ;; ------------------------------------------------------------ ;; 0x5e6c @@loop: 5e6c 0003 DIS ; !!critical section!! 5e6d 0280 0173 MVI DOENG, R0 ; \ 5e6f 0010 DECR R0 ; |- See if ENGINE1 ran 5e70 020b 0006 BMI @@idle ; / 5e72 0002 EIS 5e73 0240 0173 MVO R0, DOENG ; \__ Yes: Do engine 2. 5e75 0004 0355 03c3 JE ENGINE2 ; / 0x5e78 ENGINE2_RET ; ENGINE2 returns here. 5e78 0002 @@idle: EIS 5e79 0282 0174 MVI DNENG, R2 5e7b 0012 DECR R2 5e7c 0203 0050 BPL @@done 0x5e7e @@not_done 5e7e 0004 0168 0271 CALL DEFSCORE ; update deferred score IF 0 CLRR R1 CMP MPTR, R1 ; \_ do top-score upd. only if no BNEQ @@skiptss ; / mountain updates this frame CALL UPTSS @@skiptss: ENDI 5e81 0004 016c 033d CALL DBHC ; Read debounced hand ctrlrs ; R0 = stable value ; R1 = delta bits ; R2 = suppressed bits 5e84 0283 0119 MVI EMODE, R3 5e86 0013 DECR R3 5e87 0204 000d BEQ @@game_hand ; BMI @@what_hand ;; ------------------------------------------------------------ ;; ;; Title screen: Just wait for anything. ;; ;; ------------------------------------------------------------ ;; 0x5e89 @@title_hand: ; \ 5e89 0080 TSTR R0 ; | 5e8a 020c 0004 BNEQ @@maybe_done ; |- Wait for keyup -> keydown 5e8c 0240 0178 MVO R0, TMP ; | 5e8e 0220 0023 B @@loop ; / 0x5e90 @@maybe_done 5e90 03c2 0178 XOR TMP, R2 5e92 0204 003a BEQ @@done 5e94 0220 0029 B @@loop 0x5e96 @@game_hand: ;; ------------------------------------------------------------ ;; ;; Look for a pause request. ;; ;; ------------------------------------------------------------ ;; 5e96 0378 00a5 CMPI #$A5, R0 5e98 0204 003b BEQ @@pausing IF (DEFINED SEEKKEYS) <> 0 ;; ------------------------------------------------------------ ;; ;; Just during development ;; ;; ------------------------------------------------------------ ;; ; CMPR R0, R1 ; BNEQ @@nodigit MVII #@@waitnokey, R5 CMPI #$84, R0 BEQ PRVLVL CMPI #$44, R0 BEQ RSTLVL CMPI #$24, R0 BEQ NXTLVL CMPI #$48, R0 BNEQ @@nodigit MVII #2, R2 B @@done @@nodigit: ENDI ;; ------------------------------------------------------------ ;; ;; Game DISC decoding ;; ;; ------------------------------------------------------------ ;; 5e9a 0083 MOVR R0, R3 ; \ 5e9b 03bb 0002 ANDI #2, R3 ; |- Pushing right? 5e9d 020c 000d BNEQ @@go_fast ; / 5e9f 0083 MOVR R0, R3 ; \ 5ea0 03bb 0008 ANDI #8, R3 ; |- Pushing left? 5ea2 020c 0004 BNEQ @@go_slow ; / 5ea4 02bb 00bf MVII #VMED, R3 ; \ 5ea6 0200 0006 B @@set_vel ; | 5ea8 02bb 006f @@go_slow MVII #VSLOW, R3 ; |- Set buggy velocity 5eaa 0200 0002 B @@set_vel ; | 5eac 02bb 00ff @@go_fast MVII #VFAST, R3 ; / 5eae 0243 0171 @@set_vel MVO R3, WANTVL ;; ------------------------------------------------------------ ;; ;; Game ACTION decoding. This is somewhat tricky due to ;; ;; the challenges of noisy controllers, and the aliasing that ;; ;; occurs between the three buttons. ACTTBL contains the ;; ;; state machine that determines when we will issue jump and ;; ;; fire events, based on various transitions we might see. ;; ;; ;; ;; R0 contains the current stablized controller input. ;; ;; R2 contains the bits that changed since the last stable ;; ;; sample. ;; ;; ------------------------------------------------------------ ;; 5eb0 03b8 00e0 ANDI #$E0, R0 ; \ 5eb2 03ba 00e0 ANDI #$E0, R2 ; |_ Look for edges. 5eb4 0142 CMPR R0, R2 ; | 5eb5 0224 004a BEQ @@loop ; / Don't decode if not an edge. 5eb7 02bd 5e6c MVII #@@loop, R5 5eb9 0064 SLR R0, 2 5eba 0064 SLR R0, 2 5ebb 0060 SLR R0, 1 5ebc 02f8 5ef1 ADDI #ACTTBL, R0 ; Index into ACTTBL based on new 5ebe 0066 SLR R2, 2 5ebf 0066 SLR R2, 2 5ec0 02fa 6f2d ADDI #SHLTBL, R2 ; Index into field based on prev 5ec2 0081 MOVR R0, R1 ; Can't read @R0, so do @R1 5ec3 0288 MVI@ R1, R0 ; Get ACTTBL entry 5ec4 0081 MOVR R0, R1 ; and duplicate it. 5ec5 0390 AND@ R2, R0 ; Non-zero means fire 5ec6 020c 00f4 BNEQ DOFIRE 5ec8 000a INCR R2 5ec9 0391 AND@ R2, R1 ; Non-zero means jump. 5eca 020c 00d9 BNEQ DOJUMP 5ecc 0220 0061 B @@loop ;; ------------------------------------------------------------ ;; ;; Exit out and let the top-level code have a stab. ;; ;; ------------------------------------------------------------ ;; 5ece 0280 0119 @@done: MVI EMODE, R0 5ed0 0010 DECR R0 5ed1 020c 070f BNEQ RUNENG_RET_TITLE 5ed3 0200 07da B RUNENG_RET_NORMAL ;; ------------------------------------------------------------ ;; ;; Handle pausing. ;; ;; ------------------------------------------------------------ ;; 0x5ed5 @@pausing 5ed5 0003 DIS ; SETISR JRR5 5ed6 0004 016c 0244 CALL _SETISR 5ed9 6b65 DECLE JRR5 5eda 0281 01f8 MVI $1F8, R1 ; \ 5edc 0283 00f8 MVI $0F8, R3 ; | 5ede 02b8 003f MVII #$3F, R0 ; |- Mute the music & sfx 5ee0 0240 01f8 MVO R0, $1F8 ; | 5ee2 0240 00f8 MVO R0, $0F8 ; / 5ee4 0004 016d 024b JSRE R5, WAITKEY 5ee7 0241 01f8 MVO R1, $1F8 ; \__ Unmute music, sfx. 5ee9 0243 00f8 MVO R3, $0F8 ; / ; SETISR ENGINE1 5eeb 0004 016c 0244 CALL _SETISR 5eee 537c DECLE ENGINE1 5eef 0220 0084 B @@loop ; Resume game. ENDP MACRO act(a,b,c,d,e,f,g,h) DECLE (ACTTBL.%a% SHL 14) + (ACTTBL.%b% SHL 12) + (ACTTBL.%c% SHL 10) + (ACTTBL.%d% SHL 8) + (ACTTBL.%e% SHL 6) + (ACTTBL.%f% SHL 4) + (ACTTBL.%g% SHL 2) + (ACTTBL.%h% SHL 0) ENDM 0x5ef1 ACTTBL PROC 0x0 @@___ EQU 0 0x1 @@__f EQU 1 0x2 @@j__ EQU 2 0x3 @@j_f EQU 3 ;;New Prv 111 110 101 100 011 010 001 000 ;@@000 act(___,___,___,___,___,___,___,___) 5ef1 0000 @@000 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.___ SHL 12) + (ACTTBL.___ SHL 10) + (ACTTBL.___ SHL 8) + (ACTTBL.___ SHL 6) + (ACTTBL.___ SHL 4) + (ACTTBL.___ SHL 2) + (ACTTBL.___ SHL 0) ;@@001 act(___,___,___,___,___,___,___,___) 5ef2 0000 @@001 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.___ SHL 12) + (ACTTBL.___ SHL 10) + (ACTTBL.___ SHL 8) + (ACTTBL.___ SHL 6) + (ACTTBL.___ SHL 4) + (ACTTBL.___ SHL 2) + (ACTTBL.___ SHL 0) ;@@010 act(___,___,___,___,___,___,___,___) 5ef3 0000 @@010 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.___ SHL 12) + (ACTTBL.___ SHL 10) + (ACTTBL.___ SHL 8) + (ACTTBL.___ SHL 6) + (ACTTBL.___ SHL 4) + (ACTTBL.___ SHL 2) + (ACTTBL.___ SHL 0) ;@@011 act(___,___,j__,___,___,j__,j__,j__) 5ef4 082a @@011 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.___ SHL 12) + (ACTTBL.j__ SHL 10) + (ACTTBL.___ SHL 8) + (ACTTBL.___ SHL 6) + (ACTTBL.j__ SHL 4) + (ACTTBL.j__ SHL 2) + (ACTTBL.j__ SHL 0) ;@@100 act(___,___,___,___,___,___,___,___) 5ef5 0000 @@100 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.___ SHL 12) + (ACTTBL.___ SHL 10) + (ACTTBL.___ SHL 8) + (ACTTBL.___ SHL 6) + (ACTTBL.___ SHL 4) + (ACTTBL.___ SHL 2) + (ACTTBL.___ SHL 0) ;@@101 act(___,__f,___,__f,___,___,__f,__f) 5ef6 1105 @@101 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.__f SHL 12) + (ACTTBL.___ SHL 10) + (ACTTBL.__f SHL 8) + (ACTTBL.___ SHL 6) + (ACTTBL.___ SHL 4) + (ACTTBL.__f SHL 2) + (ACTTBL.__f SHL 0) ;@@110 act(___,___,j__,___,___,j__,j__,j__) 5ef7 082a @@110 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.___ SHL 12) + (ACTTBL.j__ SHL 10) + (ACTTBL.___ SHL 8) + (ACTTBL.___ SHL 6) + (ACTTBL.j__ SHL 4) + (ACTTBL.j__ SHL 2) + (ACTTBL.j__ SHL 0) ;@@111 act(___,__f,j__,j_f,__f,j_f,j_f,j_f) 5ef8 1b7f @@111 DECLE (ACTTBL.___ SHL 14) + (ACTTBL.__f SHL 12) + (ACTTBL.j__ SHL 10) + (ACTTBL.j_f SHL 8) + (ACTTBL.__f SHL 6) + (ACTTBL.j_f SHL 4) + (ACTTBL.j_f SHL 2) + (ACTTBL.j_f SHL 0) ENDP ;__ INCLUDE "engine/tictsk.asm" ;; ======================================================================== ;; ;; TICTSK ;; ;; ;; ;; This is a sort of generic catch-all function called 30 times/sec ;; ;; ;; ;; -- Update the game clock ;; ;; -- Update the score display ;; ;; -- Update the lives display ;; ;; -- Update the checkpoint display ;; ;; -- Check for crossing checkpoints ;; ;; -- Blink the caution lamp ;; ;; ;; ;; TIC1ST is an alternate entry point used at the start of the game. ;; ;; It forces everything to refresh. ;; ;; ======================================================================== ;; 5ef9 0245 035e TIC1ST MVO R5, BGTTMP 5efb 0200 000d B TICTSK.show_initial_time ; Skip time increment 0x5efd TICTSK PROC 5efd 0245 035e MVO R5, BGTTMP 0x5eff @@normal_update: ;; ---------------------------------------------------------------- ;; ;; Update the game clock. TIMTIC counts 31 - 1. When it expires ;; ;; we update TIMSEC, being careful to not let it run over 255. ;; ;; ---------------------------------------------------------------- ;; 5eff 0280 0169 MVI TIMTIC, R0 5f01 0010 DECR R0 5f02 020c 0013 BNEQ @@tic_ok 5f04 0280 0168 MVI TIMSEC, R0 5f06 0378 00ff CMPI #$FF, R0 5f08 002f ADCR PC ; don't increment if 255 already 5f09 0008 INCR R0 0x5f0a @@show_initial_time: 5f0a 0240 0168 MVO R0, TIMSEC ;; ---------------------------------------------------------------- ;; ;; Update the displayed time. ;; ;; ---------------------------------------------------------------- ;; 5f0c 02ba 0003 MVII #3, R2 ; MVII #gen_cstk_card(0, GRAM, Blue, NoAdvance), R3 5f0e 02bb 0801 MVII #((0)*8 + __CSTK.GRAM_Blue + __CSTK.NoAdvance), R3 ; MVII #disp_ptr(11, 16), R4 5f10 02bc 02ec MVII #($200 + 11*20 + 16), R4 5f12 0004 016c 02b5 CALL PRNUM16.z ;; ---------------------------------------------------------------- ;; ;; Reset the TIMTIC countdown. ;; ;; ---------------------------------------------------------------- ;; 5f15 02b8 001f MVII #31, R0 0x5f17 @@tic_ok: 5f17 0240 0169 MVO R0, TIMTIC ;; ---------------------------------------------------------------- ;; ;; Check to see if we've passed a level marker. If we have: ;; ;; -- Record the new checkpoint letter ;; ;; -- Alert the player with a DING ;; ;; -- Remember where we are in the world so we can restart here ;; ;; (Copy RCNXT to RCLVL for restart code.) ;; ;; ---------------------------------------------------------------- ;; 5f19 0280 0166 MVI LMCNT, R0 ; LMCNT holds column of level-marker 5f1b 0080 TSTR R0 5f1c 0206 0028 BLE @@no_level_marker ; Skip this code if none is active 5f1e 0338 000f SUBI #15, R0 ; \ 5f20 0340 015d CMP TXLO, R0 ; |- Is nose of tank past it? 5f22 020d 0022 BGE @@no_level_marker ; / No: Leave 5f24 0280 0167 MVI LMCHAR, R0 ; \ 5f26 004c SLL R0, 2 ; |_ Merge ckpt char w/ current 5f27 0048 SLL R0, 1 ; | course # to see if this is new 5f28 03c0 013a XOR COURSE, R0 ; / 5f2a 03f8 0100 XORI #$100, R0 ; bit 8 set on normal ckpts. Flip. 5f2c 0340 0139 CMP POINT, R0 ; \__ Only recognize it if it's new 5f2e 0204 0016 BEQ @@no_level_marker ; / 5f30 0004 0168 035c CALL PLAYSFX ; \__ Ding the bell! 5f33 0006 DECLE FXDING ; / 5f34 02bc 0162 MVII #RCNXT, R4 5f36 02a1 MVI@ R4, R1 ; RCNXT + 0 (LSBs) 5f37 02a2 MVI@ R4, R2 ; RCNXT + 1 (MSBs) 5f38 0261 MVO@ R1, R4 ; RCLVL + 0 (MSBs) 5f39 0262 MVO@ R2, R4 ; RCLVL + 1 (MSBs) 5f3a 0240 0139 MVO R0, POINT ; encode current course # into POINT 5f3c 03b8 0100 ANDI #$100, R0 ; \_ If bit 8's set, this is a 5f3e 0204 0006 BEQ @@no_level_marker ; / summary checkpoint. 5f40 0240 0166 MVO R0, LMCNT ; Disable level-marker character 5f42 02ba 0002 MVII #2, R2 ; \_ Tell RUNENG we need to exit 5f44 0242 0174 MVO R2, DNENG ; / 0x5f46 @@no_level_marker ;; ---------------------------------------------------------------- ;; ;; Show either CAUTION lamp or # of lives. Only do this every ;; ;; 8 ticks (just shy of 4 Hz). ;; ;; ---------------------------------------------------------------- ;; 5f46 02b8 0007 MVII #7, R0 5f48 0380 0169 AND TIMTIC, R0 5f4a 0378 0007 CMPI #7, R0 ; \_ TIMTIC held at 31 during init, ; / so this forces life disp at init 5f4c 020c 0025 BNEQ @@done_caut_life ; MVII #disp_ptr(11,11), R4 ; Point to where caution/lives lives 5f4e 02bc 02e7 MVII #($200 + 11*20 + 11), R4 ; Point to where caution/lives lives 5f50 0281 0136 MVI CAUTFL, R1 ; \ 5f52 0339 0004 SUBI #4, R1 ; |_ Count down caution blink count 5f54 020b 0012 BMI @@show_lives ; | and display lives if negative 5f56 0241 0136 MVO R1, CAUTFL ; / 5f58 03b9 0007 ANDI #7, R1 ; \ 5f5a 02f9 5f95 ADDI #@@cauttbl, R1 ; |- Look up the caution flag color 5f5c 0289 MVI@ R1, R1 ; / ; ADDI #gen_cstk_card(5, GRAM, Black, NoAdvance), R1 5f5d 02f9 0828 ADDI #((5)*8 + __CSTK.GRAM_Black + __CSTK.NoAdvance), R1 5f5f 0261 MVO@ R1, R4 ; \ 5f60 02f9 0008 ADDI #8, R1 ; |- Card #1-3 of caution 5f62 0261 MVO@ R1, R4 ; | 5f63 02f9 0008 ADDI #8, R1 ; | 5f65 0261 MVO@ R1, R4 ; / 5f66 0200 000b B @@done_caut_life 0x5f68 @@show_lives: 5f68 0260 MVO@ R0, R4 ; First square is blank ; MVII #gen_cstk_card($27, GRAM, Purple, NoAdvance), R0 5f69 02b8 193f MVII #(($27)*8 + __CSTK.GRAM_Purple + __CSTK.NoAdvance), R0 5f6b 0260 MVO@ R0, R4 ; Show miniature tank graphic 5f6c 0280 0138 MVI LIVES, R0 ; \ 5f6e 004c SLL R0, 2 ; |- Single digit for lives 5f6f 0048 SLL R0, 1 ; / ; ADDI #gen_cstk_card($10, GRAM, Blue, NoAdvance), R0 5f70 02f8 0881 ADDI #(($10)*8 + __CSTK.GRAM_Blue + __CSTK.NoAdvance), R0 5f72 0260 MVO@ R0, R4 ; Show lives 0x5f73 @@done_caut_life ;; ---------------------------------------------------------------- ;; ;; Display the current checkpoint letter. ;; ;; ---------------------------------------------------------------- ;; 5f73 0280 0139 MVI POINT, R0 ; Get current checkpoint 5f75 0081 MOVR R0, R1 ; ... and save a copy 5f76 0204 0008 BEQ @@no_pt ; If it was NUL, display blank 5f78 03b9 0007 ANDI #7, R1 ; 3 LSBs give course number 5f7a 0108 SUBR R1, R0 ; Upper 5 bits are ckpt letter 5f7b 02f9 5f9d ADDI #CCTBL, R1 ; \_ Look up color based on course 5f7d 02c8 ADD@ R1, R0 ; / number 5f7e 02f8 0100 ADDI #$100, R0 ; Offset into alphabet 0x5f80 @@no_pt: ; MVO R0, disp_ptr(11, 9) ; Checkpoint letter 5f80 0240 02e5 MVO R0, ($200 + 11*20 + 9) ; Checkpoint letter ; MVII #gen_cstk_card(13, GROM, DarkGreen, NoAdvance), R0 5f82 02b8 006c MVII #((13)*8 + __CSTK.GROM_DarkGreen + __CSTK.NoAdvance), R0 ; MVO R0, disp_ptr(11, 8) ; Green bar to left of letter 5f84 0240 02e4 MVO R0, ($200 + 11*20 + 8) ; Green bar to left of letter ;; ---------------------------------------------------------------- ;; ;; Display the current score, but only if: ;; ;; -- DOSCO is set (meaning it's changed or we're just starting) ;; ;; -- There was no mountain update this frame. ;; ;; ---------------------------------------------------------------- ;; 5f86 0280 013f MVI DOSCO, R0 ; \ 5f88 0010 DECR R0 ; |_ Do update only if DOSCO == 1 5f89 0340 0340 CMP MPTR, R0 ; | and MPTR == 0 5f8b 020c 0006 BNEQ @@done ; / 5f8d 0240 013f MVO R0, DOSCO 5f8f 0004 0168 02c8 CALL DISPSCORE ; DECLE disp_ptr(11,1) 5f92 02dd DECLE ($200 + 11*20 + 1) 0x5f93 @@done: 5f93 0287 035e MVI BGTTMP, PC 0x5f95 @@cauttbl: 5f95 0002 0005 1004 DECLE X_RED, X_GRN, X_PNK, X_BLU, 0,0,0,0 5f98 0001 0000 0000 0000 0000 ENDP 0x5f9d CCTBL PROC ; Course Color Table ; Beginner Champion 5f9d 0000 0002 DECLE X_BLK, X_RED ; Moon 5f9f 0005 0004 DECLE X_GRN, X_DGR ; Mars 5fa1 0001 0003 DECLE X_BLU, X_TAN ; Pluto 5fa3 0006 0007 DECLE X_YEL, X_WHT ; Mercury ENDP ;__ INCLUDE "engine/tank.asm" ;; ======================================================================== ;; ;; Miscellaneous tank-related stuff. ;; ;; ======================================================================== ;; ;;==========================================================================;; ;; DOJUMP -- Event handler for jump key. ;; ;;==========================================================================;; 0x5fa5 DOJUMP PROC 5fa5 0275 PSHR R5 5fa6 0280 0343 MVI JHGT, R0 5fa8 0080 TSTR R0 5fa9 020c 0010 BNEQ @@nojump 5fab 02b8 001b MVII #VJUMP, R0 5fad 0240 0172 MVO R0, JVEL 5faf 02b9 0002 MVII #2, R1 5fb1 02b9 0003 MVII #FXJUMP2,R1 5fb3 0004 0168 0366 CALL DOPLAYSFX 5fb6 02b9 0007 MVII #FXJUMP,R1 5fb8 02b5 PULR R5 5fb9 0200 0bab B DOPLAYSFX 5fbb 02b7 @@nojump: PULR PC ENDP ;;==========================================================================;; ;; DOFIRE -- Event handler for fire button. ;; ;;==========================================================================;; 0x5fbc DOFIRE PROC 5fbc 0275 PSHR R5 ; Don't let user fire too often 5fbd 0280 016b MVI FCNT, R0 5fbf 0080 TSTR R0 5fc0 020c 0032 BNEQ @@noupb 5fc2 02b8 000a MVII #10, R0 5fc4 0240 016b MVO R0, FCNT ; See if we have a bullet we can fire. We get 2. 5fc6 01c0 CLRR R0 5fc7 01c9 CLRR R1 5fc8 02bd 014a MVII #SPAT2 + 5, R5 5fca 0368 CMP@ R5, R0 ; Check first bullet slot. 5fcb 0204 0005 BEQ @@do_fire_up ; if attr==0, bullet is available 5fcd 0368 CMP@ R5, R0 ; Check second bullet slot. 5fce 020c 0024 BNEQ @@noupb ; if second bullet not available, leave 5fd0 02b9 0002 MVII #2, R1 0x5fd2 @@do_fire_up: ; Fire the bullet! 5fd2 008c MOVR R1, R4 5fd3 02fc 0334 ADDI #SPXY2 + 5*2, R4 ; R4 points to XY position 5fd5 02f9 031c ADDI #SPXYV + 10*2, R1 ; R1 points to XY velocity 5fd7 01db CLRR R3 5fd8 024b MVO@ R3, R1 ; set X velocity to 0 5fd9 0009 INCR R1 5fda 02bb 00fe MVII #$00FE, R3 5fdc 024b MVO@ R3, R1 ; set Y velocity to -$80 5fdd 0283 02f0 MVI SDAT, R3 ; get buggy's X position 5fdf 033b 0006 SUBI #6, R3 ; Offset slightly 5fe1 03bb 00ff ANDI #$FF, R3 ; mask to 8 bits 5fe3 0263 MVO@ R3, R4 ; MSB derived from tank position 5fe4 0283 02f8 MVI SDAT+8, R3 ; get buggy's Y position 5fe6 033b 0004 SUBI #4, R3 ; Offset slightly 5fe8 03bb 007f ANDI #$7F, R3 ; mask to 7 bits 5fea 0263 MVO@ R3, R4 ; MSB derived from tank position 5feb 0015 DECR R5 ; 5fec 02bb 00c5 MVII #SPATBL.b3, R3 ; Get the buggy's bullet 5fee 026b MVO@ R3, R5 ; Activate the bullet 5fef 02b9 0001 MVII #FXBFIRE,R1 5ff1 0004 0168 0366 CALL DOPLAYSFX ; Make a bip... 0x5ff4 @@noupb: ;; Can we fire a horizontal bullet? 5ff4 0280 0113 MVI HBCNT2, R0 5ff6 0080 TSTR R0 5ff7 020c 0031 BNEQ @@leave 5ff9 0280 0110 MVI HBCOL0, R0 ; Get current displayed horiz bullet column 5ffb 0010 DECR R0 ; If zero, we can fire. 5ffc 0203 002c BPL @@leave ; Non-zero, don't fire. 5ffe 0282 0343 MVI JHGT, R2 ; Are we jumping? 6000 037a 0080 CMPI #32*4, R2 ; 6002 020d 0026 BGE @@leave ; Yes: Don't fire. 6004 0283 02f0 MVI SDAT, R3 ; get buggy's X position 6006 02fb 0010 ADDI #16, R3 ; Offset slightly 6008 03bb 00ff ANDI #$FF, R3 ; keep 8 bits 600a 0063 SLR R3, 1 ; \ 600b 009c MOVR R3, R4 ; |__ Pick an initial bullet graphic. 600c 03bc 0003 ANDI #3, R4 ; | 600e 02fc 602b ADDI #@@tbl, R4 ; / 6010 0066 SLR R2, 2 ; \ 6011 0066 SLR R2, 2 ; |-- Calculate horizontal bullet row 6012 0062 SLR R2, 1 ; / 6013 02b9 0014 MVII #20, R1 ; End 5.5 cards away 6015 02a0 MVI@ R4, R0 ; Starting position in pattern depends on ; buggy position 6016 0240 010f MVO R0, HBDATA ; \ 6018 0241 0112 MVO R1, HBCNT ; |__ "Ensign, fire at Will!" 601a 0242 0114 MVO R2, HBROW ; | 601c 0243 0111 MVO R3, HBCOL1 ; / 601e 02b9 001c MVII #28, R1 6020 0241 0113 MVO R1, HBCNT2 ; 6022 01c0 CLRR R0 6023 0240 0115 MVO R0, HBKOS 6025 02b9 0001 MVII #FXBFIRE,R1 6027 0004 0168 0366 CALL DOPLAYSFX ; Make a bip... 602a 02b7 @@leave: PULR PC 602b 00c0 0030 000c @@tbl: DATA $C0, $30, $0C, $03 602e 0003 ENDP ;__ 0x86c _ENG2.size EQU $ - _ENG2 0x602f _BGENG EQU $ INCLUDE "bg/bgengine.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;; ======================================================================== ;; ;; Bad guy related code ;; ;; ;; ;; -- Update bad-guy movement programs. ;; ;; -- Spawn/kill bad guys. ;; ;; ;; ;; "Love among puppets / And one day I'll pull all the strings" ;; ;; -- Gary Numan ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; BGSPAWN -- Spawns a set of bad guys. Set to spawn is in R3. ;; ;; ======================================================================== ;; 0x602f BGSPAWN PROC 602f 0275 PSHR R5 ; PSHR R3 ; SLL R3, 1 ; SLL R3, 2 ; ADDI #$87, R3 ; MVO R3, $200 ; PULR R3 6030 02bc d11d MVII #SPAWNTBL,R4 ;\ 6032 004f SLL R3, 2 ; |-- R5 = 4*R3 + SPAWNTBL 6033 00dc ADDR R3, R4 ;/ 6034 0200 0005 B @@first 0x6036 @@sploop: 6036 0004 0160 0042 CALL BGMAKE 6039 002f ADCR PC ;\_ if carry set, we maybe have room for more 603a 02b7 PULR PC ;/ 0x603b @@first: 603b 02a2 MVI@ R4, R2 ; movement program 603c 0092 TSTR R2 ; if bit 15 set, this is last spawn in list 603d 0223 0008 BPL @@sploop 603f 03ba 7fff ANDI #$7FFF, R2 ;\ ; B BGMAKE.1 ; |- chain return via BGMAKE 6041 000f INCR PC ;/ ENDP ;; ======================================================================== ;; ;; BGMAKE Make a given bad-guy in first-available slot (if any) ;; ;; R2 -- Movement program ;; ;; R4 -- Pointer to rest of spawn record. ;; ;; ======================================================================== ;; 0x6042 BGMAKE PROC 6042 0275 PSHR R5 0x6043 @@1: ;; ---------------------------------------------------------------- ;; ;; Find first slot in group 1 of the MOBs. ;; ;; ---------------------------------------------------------------- ;; 6043 02bd 0140 MVII #SPAT1, R5 6045 02b9 0005 MVII #5, R1 6047 01c0 CLRR R0 0x6048 @@find: 6048 0368 CMP@ R5, R0 6049 0204 0005 BEQ @@found 604b 0011 DECR R1 604c 022c 0005 BNEQ @@find 604e 0006 CLRC 604f 02b7 PULR PC ;; Didn't find one, so leave. ;; ---------------------------------------------------------------- ;; ;; Slot is open so copy over the attribute for the new bad-guy. ;; ;; ---------------------------------------------------------------- ;; 0x6050 @@found: 6050 00a9 MOVR R5, R1 6051 0090 MOVR R2, R0 6052 0040 SWAP R0 6053 03b8 007f ANDI #$7F, R0 6055 0378 0008 CMPI #BGI.plant0, R0 6057 020c 0006 BNEQ @@not_plant 6059 0004 0168 035c CALL PLAYSFX 605c 0008 DECLE FXPLANT 605d 0200 0012 B @@cont 0x605f @@not_plant: 605f 0378 000c CMPI #BGI.sauc_lr,R0 6061 020c 000e BNEQ @@cont 6063 0280 013d MVI WAVE, R0 ; \ 6065 0008 INCR R0 ; |- Increment active saucer count 6066 0240 013d MVO R0, WAVE ; / 6068 0010 DECR R0 ; \ 6069 020c 0006 BNEQ @@cont ; | Play saucer sound effect at start of 606b 0240 013e MVO R0, WKILL ; |- a new wave, and zero out the kill count 606d 0004 0168 035c CALL PLAYSFX ; | 6070 0009 DECLE FXSAUC ; / 0x6071 @@cont: 6071 008d MOVR R1, R5 6072 0015 DECR R5 ; rewind R5 back to slot in SPAT 6073 0283 013a MVI COURSE, R3 ; \ 6075 03bb 0006 ANDI #6, R3 ; | 6077 004f SLL R3, 2 ; |- Index into BGS table based on 6078 004b SLL R3, 1 ; | current course 6079 02fb c192 ADDI #BGSTBL*2,R3 ; / 607b 02e3 ADD@ R4, R3 ; get bad-guy type 607c 0073 RRC R3 607d 0298 MVI@ R3, R0 ; look up bad guy attributes. 607e 002f ADCR PC ; \ 607f 0040 SWAP R0 ; |- unpack 6080 0083 MOVR R0, R3 ; | (R3 holds jump-over score detail) 6081 03b8 00fc ANDI #$FC, R0 ; / 6083 0008 INCR R0 6084 0378 00dd CMPI #SPATBL.stal, R0 6086 020c 0008 BNEQ @@notstal ; \ 6088 0280 010c MVI INCITY, R0 ; | 608a 0378 0002 CMPI #2, R0 ; |- Only spawn stalactites underground 608c 020c 0039 BNEQ @@nospawn ; | 608e 02b8 00dd MVII #SPATBL.stal, R0 ; / 0x6090 @@notstal: 6090 0268 MVO@ R0, R5 ; Store attrs to SPAT. 6091 02fd 000b ADDI #JMPSCO-SPAT1-1, R5 ; \ 6093 03bb 0003 ANDI #3, R3 ; |- Store the jump-over score info 6095 026b MVO@ R3, R5 ; / 6096 0014 DECR R4 6097 02a3 MVI@ R4, R3 6098 02fd 0004 ADDI #SPHSCR-JMPSCO-1, R5 ; Index into SPHSCR table 609a 01c9 CLRR R1 ; \ 609b 037b 0008 CMPI #8, R3 ; |_ Clear SPHSCR for spawns 0-7 609d 0029 ADCR R1 ; | Set SPHSCR for spawns 8-15 609e 0269 MVO@ R1, R5 ; / 609f 02fd ffde ADDI #BGEXIT-SPHSCR-1, R5 ; Point into Bad-Guy exit table 60a1 026a MVO@ R2, R5 ; Store out "exit programming" 60a2 0042 SWAP R2 ; 60a3 033d 0131 SUBI #BGEXIT+1, R5 ; convert R5 back to slot # 60a5 00ed ADDR R5, R5 60a6 00ab MOVR R5, R3 ; R3 = 2*slot 60a7 00ed ADDR R5, R5 ; R5 points into BGMPTBL + 4*slot 60a8 02fd 011c ADDI #BGMPTBL, R5 ; Now index into program counter tbl 60aa 026a MVO@ R2, R5 ; Store motion program indirection 60ab 02b9 0001 MVII #1, R1 ; Zero out rest of program state. 60ad 0269 MVO@ R1, R5 ; delay counter -- wait a tick, balance load 60ae 02a1 MVI@ R4, R1 60af 0269 MVO@ R1, R5 ; stat byte 1 60b0 0041 SWAP R1 60b1 0269 MVO@ R1, R5 ; stat byte 2 60b2 02bd 0308 MVII #SPXYV, R5 ; \__ Now point to this slot's X/Y velocity 60b4 00dd ADDR R3, R5 ; / 60b5 01d2 CLRR R2 ; \ 60b6 026a MVO@ R2, R5 ; |-- Set X, Y velocity to 0. 60b7 026a MVO@ R2, R5 ; / 60b8 02fd 0016 ADDI #SPXYP-SPXYV-2, R5 ; Index back into position table. 60ba 02a3 MVI@ R4, R3 ; Get X/Y coordinates 60bb 009a MOVR R3, R2 ; \ 60bc 03bb 00ff ANDI #$00FF, R3 ; | 60be 020c 0003 BNEQ @@notf ; |\ 60c0 0283 015e MVI FXLO, R3 ; | |- Pick up follower X posn for the 60c2 01da XORR R3, R2 ; |/ mine-layer 60c3 026b @@notf: MVO@ R3, R5 ; |__ Initialize the position for this 60c4 01da XORR R3, R2 ; | bad guy. 60c5 0042 SWAP R2 ; | 60c6 026a MVO@ R2, R5 ; / 0x60c7 @@nospawn: 60c7 0007 SETC 60c8 02b7 PULR PC ENDP MACRO BGSENT a,W,b,X,c,Y,d,Z DECLE (((SPATBL.%a% AND $FC) OR %W%) SHL 8) + ((SPATBL.%b% AND $FC) OR %X%) DECLE (((SPATBL.%c% AND $FC) OR %Y%) SHL 8) + ((SPATBL.%d% AND $FC) OR %Z%) ENDM 0x60c9 BGSTBL PROC ; Moon ; BGSENT pnk0, 0, blu0, 0, wht0, 0, fol0a, 0 60c9 1014 DECLE (((SPATBL.pnk0 AND $FC) OR 0) SHL 8) + ((SPATBL.blu0 AND $FC) OR 0) 60ca 0080 DECLE (((SPATBL.wht0 AND $FC) OR 0) SHL 8) + ((SPATBL.fol0a AND $FC) OR 0) ; BGSENT fol0b, 0, pnk0, 0, blu0, 0, wht0, 0 60cb 9010 DECLE (((SPATBL.fol0b AND $FC) OR 0) SHL 8) + ((SPATBL.pnk0 AND $FC) OR 0) 60cc 1400 DECLE (((SPATBL.blu0 AND $FC) OR 0) SHL 8) + ((SPATBL.wht0 AND $FC) OR 0) ; BGSENT tur0, 2, bld0a, 2, lmna, 1, plta, 2 60cd 6272 DECLE (((SPATBL.tur0 AND $FC) OR 2) SHL 8) + ((SPATBL.bld0a AND $FC) OR 2) 60ce a1aa DECLE (((SPATBL.lmna AND $FC) OR 1) SHL 8) + ((SPATBL.plta AND $FC) OR 2) ; BGSENT pltc, 3, 0, 0, 0, 0, 0, 0 60cf b300 DECLE (((SPATBL.pltc AND $FC) OR 3) SHL 8) + ((SPATBL.0 AND $FC) OR 0) 60d0 0000 DECLE (((SPATBL.0 AND $FC) OR 0) SHL 8) + ((SPATBL.0 AND $FC) OR 0) ; Mars ; BGSENT pnk1, 0, blu1, 0, wht1, 0, fol1a, 0 60d1 1828 DECLE (((SPATBL.pnk1 AND $FC) OR 0) SHL 8) + ((SPATBL.blu1 AND $FC) OR 0) 60d2 0484 DECLE (((SPATBL.wht1 AND $FC) OR 0) SHL 8) + ((SPATBL.fol1a AND $FC) OR 0) ; BGSENT fol1b, 0, pnk1, 0, blu1a, 0, wht1, 0 60d3 9418 DECLE (((SPATBL.fol1b AND $FC) OR 0) SHL 8) + ((SPATBL.pnk1 AND $FC) OR 0) 60d4 2c04 DECLE (((SPATBL.blu1a AND $FC) OR 0) SHL 8) + ((SPATBL.wht1 AND $FC) OR 0) ; BGSENT tur1, 2, bld0a, 2, lmna, 1, plta, 2 60d5 6672 DECLE (((SPATBL.tur1 AND $FC) OR 2) SHL 8) + ((SPATBL.bld0a AND $FC) OR 2) 60d6 a1aa DECLE (((SPATBL.lmna AND $FC) OR 1) SHL 8) + ((SPATBL.plta AND $FC) OR 2) ; BGSENT pltc, 3, 0, 0, 0, 0, 0, 0 60d7 b300 DECLE (((SPATBL.pltc AND $FC) OR 3) SHL 8) + ((SPATBL.0 AND $FC) OR 0) 60d8 0000 DECLE (((SPATBL.0 AND $FC) OR 0) SHL 8) + ((SPATBL.0 AND $FC) OR 0) ; Pluto ; BGSENT pnk2, 0, blu2, 0, wht2, 0, fol2a, 0 60d9 3038 DECLE (((SPATBL.pnk2 AND $FC) OR 0) SHL 8) + ((SPATBL.blu2 AND $FC) OR 0) 60da 0888 DECLE (((SPATBL.wht2 AND $FC) OR 0) SHL 8) + ((SPATBL.fol2a AND $FC) OR 0) ; BGSENT fol2b, 0, pnk2, 0, blu2, 0, wht2, 0 60db 9830 DECLE (((SPATBL.fol2b AND $FC) OR 0) SHL 8) + ((SPATBL.pnk2 AND $FC) OR 0) 60dc 3808 DECLE (((SPATBL.blu2 AND $FC) OR 0) SHL 8) + ((SPATBL.wht2 AND $FC) OR 0) ; BGSENT tur2, 2, bld0a, 2, lmna, 1, plta, 2 60dd 6a72 DECLE (((SPATBL.tur2 AND $FC) OR 2) SHL 8) + ((SPATBL.bld0a AND $FC) OR 2) 60de a1aa DECLE (((SPATBL.lmna AND $FC) OR 1) SHL 8) + ((SPATBL.plta AND $FC) OR 2) ; BGSENT pltc, 3, crat6, 2, 0, 0, 0, 0 60df b3fe DECLE (((SPATBL.pltc AND $FC) OR 3) SHL 8) + ((SPATBL.crat6 AND $FC) OR 2) 60e0 0000 DECLE (((SPATBL.0 AND $FC) OR 0) SHL 8) + ((SPATBL.0 AND $FC) OR 0) ; Mercury ; BGSENT pnk3, 0, blu3, 0, wht3, 0, fol3a, 0 60e1 4858 DECLE (((SPATBL.pnk3 AND $FC) OR 0) SHL 8) + ((SPATBL.blu3 AND $FC) OR 0) 60e2 0c8c DECLE (((SPATBL.wht3 AND $FC) OR 0) SHL 8) + ((SPATBL.fol3a AND $FC) OR 0) ; BGSENT fol3b, 0, pnk3c, 0, blu3c, 0, wht3, 0 60e3 9c50 DECLE (((SPATBL.fol3b AND $FC) OR 0) SHL 8) + ((SPATBL.pnk3c AND $FC) OR 0) 60e4 5c0c DECLE (((SPATBL.blu3c AND $FC) OR 0) SHL 8) + ((SPATBL.wht3 AND $FC) OR 0) ; BGSENT tur3, 2, bld0a, 2, lmna, 1, plta, 2 60e5 6e72 DECLE (((SPATBL.tur3 AND $FC) OR 2) SHL 8) + ((SPATBL.bld0a AND $FC) OR 2) 60e6 a1aa DECLE (((SPATBL.lmna AND $FC) OR 1) SHL 8) + ((SPATBL.plta AND $FC) OR 2) ; BGSENT pltc, 3, stal, 0, 0, 0, 0, 0 60e7 b3dc DECLE (((SPATBL.pltc AND $FC) OR 3) SHL 8) + ((SPATBL.stal AND $FC) OR 0) 60e8 0000 DECLE (((SPATBL.0 AND $FC) OR 0) SHL 8) + ((SPATBL.0 AND $FC) OR 0) ENDP ;; ======================================================================== ;; ;; BGDOEXIT -- Make a set of bad guys exit. ;; ;; ======================================================================== ;; 0x60e9 BGDOEXIT PROC 60e9 004f SLL R3, 2 ; \___ Shift our exit cue # to align w/ 60ea 004b SLL R3, 1 ; / exit programming in BGEXIT table 60eb 03bb 00f8 ANDI #$F8, R3 ; cull extra bits 60ed 02bc 0130 MVII #BGEXIT, R4 ; point R4 into Bad Guy Exit Program table 60ef 02ba 011c MVII #BGMPTBL, R2 ; point R2 into Bad Guy Motion Program table 60f1 02b8 0005 MVII #5, R0 ; loop over all five bad guys 60f3 0291 @@loop: MVI@ R2, R1 ; \ 60f4 0089 TSTR R1 ; |- Skip dead bad guys 60f5 02a1 MVI@ R4, R1 60f6 0204 0005 BEQ @@nope ; / 60f8 01d9 XORR R3, R1 ; lets see if tag is equal 60f9 0379 0008 CMPI #8, R1 ; if remainder < 8, it is. ; BC @@nope 60fb 002f ADCR PC ; ADCR is a tad cheaper than the branch 60fc 0251 MVO@ R1, R2 ; force this bad guy into his exit state 60fd 02fa 0004 @@nope: ADDI #4, R2 ; advance to next BGMP record 60ff 0010 DECR R0 6100 022c 000e BNEQ @@loop ; loop over all 5 bad guys 6102 00af JR R5 ENDP IF (DEFINED BUILD_DEMO) ;; ======================================================================== ;; ;; UPDMO Update demo program ;; ;; ======================================================================== ;; UPDMO PROC PSHR R5 MVI DIG_CNT,R0 DECR R0 BPL @@cmd_delaying MVI DIG_PTR,R5 B @@cmd_loop @@next_cmd: PULR R1 PULR R5 @@cmd_loop: MVI@ R5, R0 ; Read in command MVO R5, DIG_PTR ;; Commands: ;; <0 Delay (< 0) ;; 0 End demo ;; 2 Jump ;; 4 Fire ;; 6 Set velocity ;; 8 Spawn bad-guy grouping COMR R0 BEQ @@cmd_loop BPL @@cmd_delaying COMR R0 MOVR R0, R1 SLR R1, 2 SLR R1, 2 PSHR R5 PSHR R1 ANDI #$E, R0 ADDR R0, PC B @@cmd_demo_over B @@cmd_jump B @@cmd_fire B @@cmd_setvel B @@cmd_spawn B @@cmd_demo_over B @@cmd_demo_over B @@cmd_demo_over @@cmd_jump: CALL DOJUMP B @@next_cmd @@cmd_fire: CALL DOFIRE B @@next_cmd @@setvel_tbl: DECLE VSLOW, VMED, VFAST @@cmd_setvel: ADDI #@@setvel_tbl, R1 MVI@ R1, R1 MVO R1, WANTVL B @@next_cmd @@cmd_spawn: CALL BGSPAWN B @@next_cmd @@cmd_delaying: MVO R0, DIG_CNT PULR PC @@cmd_demo_over: SUBI #2, R6 ; discard top two items on stack PULR R5 B SCHEDEXIT ENDP INCLUDE "demo_ingame.asm" ENDI ;; ======================================================================== ;; ;; Interpreter for Bad Guy Motion Programs ;; ;; ;; ;; ARCHITECTURE ;; ;; ;; ;; Each bad guy has the following 5 bytes of state: ;; ;; ;; ;; -- One program indirect pointer (1 byte) ;; ;; -- One delay counter (1 byte) ;; ;; -- Two status bytes (2 bytes) ;; ;; ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; UPBGM -- Update Bad Guy Motion. Called on a 30Hz tick. ;; ;; ======================================================================== ;; 0x6103 UPBGM PROC 6103 0275 @@0: PSHR R5 6104 02bc 011c MVII #BGMPTBL, R4 6106 01c9 CLRR R1 6107 0200 000d B @@first_bgmp ; skip first INCR R1 6109 0275 @@1: PSHR R5 610a 02bc 0120 MVII #BGMPTBL + 4, R4 610c 02b9 0001 MVII #1, R1 610e 0200 0006 B @@first_bgmp ;; ---------------------------------------------------------------- ;; ;; Iterate through the motion programs. ;; ;; R0 -- scratch ;; ;; R1 -- Slot # for MOB (within group 1) ;; ;; R2 -- Program counter for current record. ;; ;; R3 -- scratch ;; ;; R4 -- Pointer to BGMP state tables ;; ;; R5 -- scratch ;; ;; ---------------------------------------------------------------- ;; 0x6110 @@next_bgmp: 6110 02f9 0002 ADDI #2, R1 ; next slot # 6112 0379 0005 CMPI #5, R1 ; Is this the end? 6114 020d 000a BGE @@done_bgmp ; Yes, done. 0x6116 @@first_bgmp: 6116 02a2 MVI@ R4, R2 ; Get program counter 6117 0092 TSTR R2 ; If it's zero, motion program is inactive 6118 020c 0007 BNEQ @@active_bgmp ; Non-zero, it's active. 611a 02fc 0007 ADDI #3 + 4, R4 ; Skip rest of record. 611c 037c 0130 CMPI #BGMPTBL+20, R4 ; Is this the end? 611e 0225 000f BLT @@next_bgmp ; No, do the next one. ; B @@done_bgmp ; Yes, done. 0x6120 @@done_bgmp: 6120 02b7 PULR PC 0x6121 @@active_bgmp: 6121 00a3 MOVR R4, R3 6122 02a0 MVI@ R4, R0 ; Get delay counter for this motion program 6123 02fc 0006 ADDI #2 + 4, R4 ; point to next record 6125 0010 DECR R0 ; Count down the delay counter. 6126 0258 MVO@ R0, R3 ; Store the updated delay counter 6127 0223 0018 BPL @@next_bgmp ; If not expired, go to the next program. 0x6129 @@expired: 6129 000b INCR R3 ; Point R3 to first 'status byte' in record 612a 0274 PSHR R4 ; MVII #@@dnR4,R5 ; \ Call the motion program via indirect 612b 02fa d108 ADDI #BGMPIND-1,R2 ; |-- table. R1=slot #, R3 and R4=state tbl 612d 0297 MVI@ R2, PC ; / R2, R5 are scratch. 0x612e BGT_RET: 612e 02b4 @@dnR4: PULR R4 612f 0013 @@done: DECR R3 ; Point R3 back to delay counter 6130 0258 MVO@ R0, R3 ; Put R0 (return value) into delay counter. 6131 0220 0022 B @@next_bgmp ; Do processing for next motion program ENDP ;; ======================================================================== ;; ;; BGFIRE. Make bad-guy number in R1 fire a bullet. ;; ;; R0 == Velocity table index in MSB, attr in LSB. ;; ;; ======================================================================== ;; 0x6133 BGFIRE PROC ;@@d: MVII #pack(@@cc-@@tbl, SPATBL.b5), R0 ; fire left 6133 02b8 00cd @@d: MVII #((((@@cc-@@tbl) AND $FF) SHL 8) OR ((SPATBL.b5) AND $FF)), R0 ; fire left 6135 0200 000a B @@doit ;@@c: MVII #pack(@@cc-@@tbl, SPATBL.b4), R0 ; fire left 6137 02b8 00c9 @@c: MVII #((((@@cc-@@tbl) AND $FF) SHL 8) OR ((SPATBL.b4) AND $FF)), R0 ; fire left 6139 0200 0006 B @@doit ;@@b: MVII #pack(@@bb-@@tbl, SPATBL.b1), R0 ; drop crater maker 613b 02b8 02b9 @@b: MVII #((((@@bb-@@tbl) AND $FF) SHL 8) OR ((SPATBL.b1) AND $FF)), R0 ; drop crater maker 613d 0200 0002 B @@doit ;@@a: MVII #pack(@@aa-@@tbl, SPATBL.b2), R0 ; drop the bomb 613f 02b8 04c1 @@a: MVII #((((@@aa-@@tbl) AND $FF) SHL 8) OR ((SPATBL.b2) AND $FF)), R0 ; drop the bomb 0x6141 @@doit: 6141 0275 PSHR R5 6142 0274 PSHR R4 6143 02bc 0178 MVII #TMP, R4 6145 0260 MVO@ R0, R4 6146 0040 SWAP R0 6147 0260 MVO@ R0, R4 6148 0262 MVO@ R2, R4 6149 0042 SWAP R2 614a 0262 MVO@ R2, R4 614b 01d2 CLRR R2 ; interruptible 614c 0263 MVO@ R3, R4 614d 01db CLRR R3 ; interruptible ; here, R1 == bad guy #. Now we need to copy the bad-guy's ; coordinates to the bullet, set up the bullet velocity, ; and bullet type. ; find a slot for the bullet 614e 02bd 0145 MVII #SPAT2, R5 0x6150 @@slotlp: 6150 000a INCR R2 6151 036b CMP@ R5, R3 6152 022c 0003 BNEQ @@slotlp 6154 0012 DECR R2 6155 037d 014a CMPI #SPAT2+5,R5 6157 0201 0024 BC @@nobgfire ; Can't fire -- all slots taken ; set up position 6159 008c MOVR R1, R4 ; R1 == bad guy number 615a 0095 MOVR R2, R5 ; R2 == bullet slot number 615b 00cc ADDR R1, R4 ; R4 == offset to bad guy 615c 00d5 ADDR R2, R5 ; R5 == offset to bullet slot 615d 02fc 0320 ADDI #SPXY1, R4 ; Point to XY of badguy 615f 02fd 032a ADDI #SPXY2, R5 ; Point to XY of bullet 6161 02b8 00ff MVII #$00FF, R0 ; 6163 02a3 MVI@ R4, R3 ; \ 6164 033b 0003 SUBI #$003, R3 ; | 6166 0183 ANDR R0, R3 ; |__ Copy over MSB of X and Y. 6167 026b MVO@ R3, R5 ; | Offset X left by 3 pixels. 6168 03a0 AND@ R4, R0 ; | 6169 0268 MVO@ R0, R5 ; / ; now, set up velocity & type. These are passed in via R0 and R3. 616a 02bd 0312 MVII #SPXYV+5*2, R5 ; \ 616c 00d5 ADDR R2, R5 ; |-- Point to xy vel of bullet 616d 00d5 ADDR R2, R5 ; / 616e 02fa 0145 ADDI #SPAT2, R2 ; Point to attr of bullet 6170 0284 0179 MVI TMP+1, R4 ; \__ get ptr to horiz/vert velocity 6172 02fc 6188 ADDI #@@tbl, R4 ; / 6174 02a0 MVI@ R4, R0 6175 0268 MVO@ R0, R5 ; set horiz velocity of bullet 6176 02a0 MVI@ R4, R0 6177 0268 MVO@ R0, R5 ; set vert velocity of bullet 6178 0283 0178 MVI TMP, R3 ; Get attribute. 617a 0253 MVO@ R3, R2 ; Store out attribute 617b 0200 0000 B @@done 0x617d @@nobgfire: 0x617d @@done: 617d 0283 017c MVI TMP+4, R3 617f 03fb 0100 XORI #$100, R3 6181 0282 017b MVI TMP+3, R2 6183 0042 SWAP R2 6184 0282 017a MVI TMP+2, R2 6186 02b4 PULR R4 6187 02b7 PULR PC 0x6188 @@tbl: 6188 44fe 0000 @@cc: DECLE $44FE, $0000 618a 4001 4001 @@bb: DECLE $4001, $4001 618c 0000 0001 @@aa: DECLE $0000, $0001 ENDP ;; ======================================================================== ;; ;; BGKILL Remove a bad guy in a given slot. ;; ;; R1 -- Slot number ;; ;; ======================================================================== ;; 0x618e BGKILL PROC 618e 0275 PSHR R5 618f 02f9 0130 ADDI #BGEXIT,R1 ; \ 6191 01c0 CLRR R0 ; |- Cancel BGEXIT tie-in 6192 0248 MVO@ R0, R1 ; / 6193 02f9 0021 ADDI #SPHSCR-BGEXIT,R1 ; \_ Cancel any horiz scrolling this 6195 0248 MVO@ R0, R1 ; / bad guy may have requested. 6196 004d SLL R1, 2 6197 02bd fbd8 MVII #(BGMPTBL - 4*(SPHSCR)) AND $FFFF, R5 6199 00cd ADDR R1, R5 ;; Kill the movement program connected with this slot 619a 0268 MVO@ R0, R5 ; zero out the motion program pointer. 619b 0268 MVO@ R0, R5 ; zero out the motion program counter. 619c 0268 MVO@ R0, R5 ; zero out loopa 619d 0268 MVO@ R0, R5 ; zero out loopb 619e 02b7 PULR PC ENDP ;__ 0x170 _BGENG.size EQU $ - _BGENG 0x619f _GAME EQU $ INCLUDE "game/names.asm" ;; ======================================================================== ;; ;; Course sub-names ;; ;; ======================================================================== ;; ;BEGINNER S16 " BEGINNER " 0x619f BEGINNER 619f 0048 DECLE _s16p 61a0 2911 DECLE _s16p 61a1 4939 DECLE _s16p 61a2 7171 DECLE _s16p 61a3 9129 DECLE _s16p 61a4 0000 DECLE _s16p ;CHAMPION S16 " CHAMPION " 0x61a5 CHAMPION 61a5 0048 DECLE _s16p 61a6 4119 DECLE _s16p 61a7 6909 DECLE _s16p 61a8 4981 DECLE _s16p 61a9 7179 DECLE _s16p 61aa 0000 DECLE _s16p ;; ======================================================================== ;; ;; CNAME Course names, as well as where to print them. ;; ;; ======================================================================== ;; 0x61ab CNAME PROC ; DECLE @@moon, pack(packn(C_BLU, 4), disp_ofs(3, 13)) 61ab 61b3 1449 DECLE @@moon, ((((((((C_BLU) AND $F) SHL 4) OR ((4) AND $F))) AND $FF) SHL 8) OR (((3*20 + 13)) AND $FF)) ; DECLE @@mars, pack(packn(C_RED, 4), disp_ofs(3, 13)) 61ad 61b6 2449 DECLE @@mars, ((((((((C_RED) AND $F) SHL 4) OR ((4) AND $F))) AND $FF) SHL 8) OR (((3*20 + 13)) AND $FF)) ; DECLE @@plut, pack(packn(C_GRN, 3), disp_ofs(3, 12)) 61af 61b9 5348 DECLE @@plut, ((((((((C_GRN) AND $F) SHL 4) OR ((3) AND $F))) AND $FF) SHL 8) OR (((3*20 + 12)) AND $FF)) ; DECLE @@merc, pack(packn(C_TAN, 2), disp_ofs(3, 11)) 61b1 61bc 3247 DECLE @@merc, ((((((((C_TAN) AND $F) SHL 4) OR ((2) AND $F))) AND $FF) SHL 8) OR (((3*20 + 11)) AND $FF)) ;@@moon S16 "MOON" 0x61b3 @@moon 61b3 6819 DECLE _s16p 61b4 7979 DECLE _s16p 61b5 0170 DECLE _s16p ;@@mars S16 "MARS" 0x61b6 @@mars 61b6 6819 DECLE _s16p 61b7 9109 DECLE _s16p 61b8 0198 DECLE _s16p ;@@plut S16 "PLUTO" 0x61b9 @@plut 61b9 8021 DECLE _s16p 61ba a961 DECLE _s16p 61bb 79a1 DECLE _s16p ;@@merc S16 "MERCURY" 0x61bc @@merc 61bc 6831 DECLE _s16p 61bd 9129 DECLE _s16p 61be a919 DECLE _s16p 61bf c991 DECLE _s16p ENDP INCLUDE "game/mission.asm" ;; ======================================================================== ;; ;; Mission Menu ;; ;; ======================================================================== ;; ;FMTSEL EQU gen_fgbg_card(0, GROM, Yellow, Blue) 0x206 FMTSEL EQU ((0)*8 + __FGBG.GROM + __FGBG.f_Yellow + __FGBG.b_Blue) ;FMTUNS EQU gen_fgbg_card(0, GROM, Tan, Black) 0x3 FMTUNS EQU ((0)*8 + __FGBG.GROM + __FGBG.f_Tan + __FGBG.b_Black) 0x61c0 WORLDMENU PROC ; SETISR CKPTISR 61c0 0004 016c 0244 CALL _SETISR 61c3 6546 DECLE CKPTISR 61c4 0240 0178 MVO R0, TMP 61c6 0004 015c 006b CALL HALTENGINE 61c9 0004 0168 0324 CALL SFXINIT 61cc 0282 013a MVI COURSE, R2 61ce 03ba 0007 @@again: ANDI #7, R2 61d0 0242 013a MVO R2, COURSE ;@@world: SETISR JRR5 61d2 0004 016c 0244 @@world: CALL _SETISR 61d5 6b65 DECLE JRR5 61d6 0004 016c 02f4 CALL CLRSCR ; P16_FGBG 0, 3, White, Black, "SELECT MISSION" 61d9 0004 016c 0270 CALL P16.FLS 61dc 0007 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_White + __FGBG.b_Black) 61dd 0203 DECLE ($200 + 0*20 + 3) 61de 9869 DECLE _s16p 61df 6129 DECLE _s16p 61e0 1929 DECLE _s16p 61e1 01a0 DECLE _s16p 61e2 4969 DECLE _s16p 61e3 9999 DECLE _s16p 61e4 7949 DECLE _s16p 61e5 0170 DECLE _s16p ;; ------------------------------------------------------------ ;; ;; Print currently selected course name. ;; ;; ------------------------------------------------------------ ;; 61e6 0285 013a MVI COURSE, R5 61e8 03bd 0006 ANDI #$6, R5 61ea 037d 0006 CMPI #6, R5 61ec 02fd 61ab ADDI #CNAME, R5 61ee 02a8 MVI@ R5, R0 ; Get name of course 61ef 02a9 MVI@ R5, R1 ; Get position to print it 61f0 008c MOVR R1, R4 ; \ 61f1 0041 SWAP R1 ; |_ Unpack color from upper nibble 61f2 0065 SLR R1, 2 ; | 61f3 0065 SLR R1, 2 ; | 61f4 03b9 000f ANDI #$F, R1 ; / 61f6 03bc 00ff ANDI #$FF, R4 ; \_ unpack position from lower byte 61f8 02fc 0200 ADDI #$200, R4 ; / 61fa 0004 016c 0277 CALL P16.R ;; ------------------------------------------------------------ ;; ;; Load up graphics associated with selected world. ;; ;; ------------------------------------------------------------ ;; 61fd 0004 0164 015d CALL LOADCRP ; Load creeps associated with world 6200 02b9 0001 MVII #1, R1 ; \ 6202 0282 013a MVI COURSE, R2 ; | Force to "INCITY", taking 6204 037a 0006 CMPI #6, R2 ; |- into account that Mercury 6206 0029 ADCR R1 ; | needs INCITY = 2. 6207 0241 010c MVO R1, INCITY ; / 6209 0004 0168 008d CALL SETGFX ; Load background GFX for this world ; SETISR FIXGFX ; Invert either top or middle GFX 620c 0004 016c 0244 CALL _SETISR 620f 630e DECLE FIXGFX ; Invert either top or middle GFX ; because we are using FGBG mode. ;; ------------------------------------------------------------ ;; ;; Draw a small sample of the selected world. This lives in ;; ;; an 8 x 8 box on the left side of the display. ;; ;; ------------------------------------------------------------ ;; 6210 0281 013a MVI COURSE, R1 6212 0379 0006 CMPI #6, R1 6214 0201 002e BC @@draw_merc 6216 0061 SLR R1, 1 6217 02f9 636c ADDI #CITYMNU, R1 6219 028a MVI@ R1, R2 ; \_ R2 has card to draw in city ; ADDI #gen_fgbg_card(CCARD + 7, GRAM, Black, Black), R2 621a 02fa 0878 ADDI #((CCARD + 7)*8 + __FGBG.GRAM + __FGBG.f_Black + __FGBG.b_Black), R2 ; MVII #disp_ptr(6,1), R4 ; \ 621c 02bc 0279 MVII #($200 + 6*20 + 1), R4 ; \ ; MVII #disp_ptr(7,1), R5 ; |_ Reuse DRAWGAME's code to 621e 02bd 028d MVII #($200 + 7*20 + 1), R5 ; |_ Reuse DRAWGAME's code to 6220 02b8 0002 MVII #2, R0 ; | draw the city 6222 02bb 6226 MVII #@@draw_mntn, R3 ; / 6224 0200 05ac B DRAWGAME.city_fill1 0x6226 @@draw_mntn ; MVII #gen_fgbg_card(TCARD + 7, GRAM, Black, Black), R2 6226 02ba 09f8 MVII #((TCARD + 7)*8 + __FGBG.GRAM + __FGBG.f_Black + __FGBG.b_Black), R2 6228 0281 013a MVI COURSE, R1 622a 0061 SLR R1, 1 622b 02f9 6369 ADDI #MNTNMNU, R1 622d 02ca ADD@ R1, R2 622e 0091 MOVR R2, R1 ; MVII #disp_ptr(3,1), R4 622f 02bc 023d MVII #($200 + 3*20 + 1), R4 ; MVII #disp_ptr(4,1), R5 6231 02bd 0251 MVII #($200 + 4*20 + 1), R5 6233 02b8 0002 MVII #2, R0 6235 02bb 6239 MVII #@@finish_mntn, R3 6237 0200 0599 B DRAWGAME.city_fill1 0x6239 @@finish_mntn: 6239 0339 0020 SUBI #4*8, R1 623b 008a MOVR R1, R2 623c 02b8 0002 MVII #2, R0 ; MVII #disp_ptr(5,1), R4 623e 02bc 0265 MVII #($200 + 5*20 + 1), R4 6240 02bd 6277 MVII #@@done_draw, R5 6242 0200 05c5 B DRAWGAME.mntn_loop 0x6244 @@draw_merc 6244 0004 0160 0271 CALL @@mntn_loop ; ; DECLE gen_fgbg_card(CCARD+2, GRAM, Green, YellowGreen) 6247 3c55 DECLE ((CCARD+2)*8 + __FGBG.GRAM + __FGBG.f_Green + __FGBG.b_YellowGreen) ; DECLE disp_ptr(3,1) 6248 023d DECLE ($200 + 3*20 + 1) 6249 0004 0160 0271 CALL @@mntn_loop ; ; DECLE gen_fgbg_card(CCARD+3, GRAM, Green, YellowGreen) 624c 3c5d DECLE ((CCARD+3)*8 + __FGBG.GRAM + __FGBG.f_Green + __FGBG.b_YellowGreen) ; DECLE disp_ptr(9,1) 624d 02b5 DECLE ($200 + 9*20 + 1) ; MVII #gen_fgbg_card(TCARD+7, GRAM, Green, DarkGreen), R2 624e 02ba 29fd MVII #((TCARD+7)*8 + __FGBG.GRAM + __FGBG.f_Green + __FGBG.b_DarkGreen), R2 ; MVII #disp_ptr(5,1), R4 ; first 2 rows 6250 02bc 0265 MVII #($200 + 5*20 + 1), R4 ; first 2 rows ; MVII #disp_ptr(6,1), R5 ; first 2 rows 6252 02bd 0279 MVII #($200 + 6*20 + 1), R5 ; first 2 rows 6254 02bb 625a MVII #@@a, R3 ; 6256 02b8 0002 MVII #2, R0 6258 0200 0578 B DRAWGAME.city_fill1 ; fill 2 rows of background rocks 0x625a @@a 625a 0004 0160 0271 CALL @@mntn_loop ; fill 1 row of background cards ; DECLE gen_fgbg_card(TCARD+2, GRAM, Green, DarkGreen) 625d 29d5 DECLE ((TCARD+2)*8 + __FGBG.GRAM + __FGBG.f_Green + __FGBG.b_DarkGreen) ; DECLE disp_ptr(7,1) ; 3rd row 625e 028d DECLE ($200 + 7*20 + 1) ; 3rd row 625f 0004 0160 0271 CALL @@mntn_loop ; fill 1 row of background cards ; DECLE gen_fgbg_card(TCARD+3, GRAM, Green, DarkGreen) 6262 29dd DECLE ((TCARD+3)*8 + __FGBG.GRAM + __FGBG.f_Green + __FGBG.b_DarkGreen) ; DECLE disp_ptr(8,1) ; 4th row 6263 02a1 DECLE ($200 + 8*20 + 1) ; 4th row 6264 0004 0160 0271 CALL @@mntn_loop ; fill 1 row of background cards ; DECLE gen_fgbg_card(TCARD+3, GRAM, Green, DarkGreen) 6267 29dd DECLE ((TCARD+3)*8 + __FGBG.GRAM + __FGBG.f_Green + __FGBG.b_DarkGreen) ; DECLE disp_ptr(4,1) ; 0th row 6268 0251 DECLE ($200 + 4*20 + 1) ; 0th row 6269 0004 016c 02ef CALL FILLMEM.vlp ; DECLE gen_fgbg_card(0, GROM, Black, YellowGreen) 626c 3400 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Black + __FGBG.b_YellowGreen) 626d 0008 DECLE 8 ; DECLE disp_ptr(10,1) 626e 02c9 DECLE ($200 + 10*20 + 1) 626f 0200 0020 B @@skip_ground 6271 02aa @@mntn_loop MVI@ R5, R2 6272 02ac MVI@ R5, R4 6273 02b8 0002 MVII #2, R0 6275 0200 0592 B DRAWGAME.mntn_loop 0x6277 @@done_draw: ;; ------------------------------------------------------------ ;; ;; Draw the fixed portion of the scene that includes ground ;; ;; and the crater row. ;; ;; ------------------------------------------------------------ ;; 6277 0285 013a MVI COURSE, R5 6279 03bd 0006 ANDI #$6, R5 627b 02fd 636f ADDI #GROWMNU, R5 627d 02a8 MVI@ R5, R0 627e 02a9 MVI@ R5, R1 627f 0271 PSHR R1 6280 0004 016c 02f0 CALL FILLMEM.lp 6283 0008 DECLE 8 ; DECLE disp_ptr(8,1) 6284 02a1 DECLE ($200 + 8*20 + 1) 6285 02b0 PULR R0 ; MVII #8, R1 ; MVII #disp_ptr(9,1), R4 6286 0004 016c 02f0 CALL FILLMEM.lp 6289 0008 DECLE 8 ; DECLE disp_ptr(9,1) 628a 02b5 DECLE ($200 + 9*20 + 1) 628b 0004 016c 02ef CALL FILLMEM.vlp ; DECLE gen_fgbg_card(0, GROM, Black, Orange) 628e 1400 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Black + __FGBG.b_Orange) 628f 0008 DECLE 8 ; DECLE disp_ptr(10,1) 6290 02c9 DECLE ($200 + 10*20 + 1) 0x6291 @@skip_ground: ;; ------------------------------------------------------------ ;; ;; Now set up a little activity scene to give it some life. ;; ;; ------------------------------------------------------------ ;; 6291 0004 016c 0224 CALL WAIT1 6294 0280 013a MVI COURSE, R0 ; \ 6296 03b8 0006 ANDI #6, R0 ; | 6298 0081 MOVR R0, R1 ; | 6299 004d SLL R1, 2 ; |- Pick MOB set as 18 * planet # 629a 0049 SLL R1, 1 ; | 629b 00c8 ADDR R1, R0 ; | 629c 02f8 638c ADDI #VIGMOB, R0 ; / 629e 0240 02f0 MVO R0, SDAT ; SETISR FIXMOB 62a0 0004 016c 0244 CALL _SETISR 62a3 6375 DECLE FIXMOB ;; ------------------------------------------------------------ ;; ;; Display the top scores for this world. ;; ;; ------------------------------------------------------------ ;; 62a4 0284 013a MVI COURSE, R4 62a6 03bc 0006 ANDI #6, R4 62a8 00e4 ADDR R4, R4 62a9 02fc 01a1 ADDI #TOPSCO, R4 62ab 0001 SDBD 62ac 02a0 MVI@ R4, R0 62ad 0274 PSHR R4 62ae 0004 0168 02c2 CALL DISPSCORE2 ; DECLE disp_ptr(7, 12) 62b1 0298 DECLE ($200 + 7*20 + 12) 62b2 02b4 PULR R4 62b3 0001 SDBD 62b4 02a0 MVI@ R4, R0 62b5 0004 0168 02c2 CALL DISPSCORE2 ; DECLE disp_ptr(10, 12) 62b8 02d4 DECLE ($200 + 10*20 + 12) ;; ------------------------------------------------------------ ;; ;; Display and highlight Beginner or Champion. ;; ;; ------------------------------------------------------------ ;; 0x62b9 @@skill: 62b9 02b9 0206 MVII #FMTSEL, R1 62bb 02ba 0003 MVII #FMTUNS, R2 62bd 0280 013a MVI COURSE, R0 62bf 0078 SARC R0 62c0 0209 0003 BNC @@beginner ; MVII #FMTSEL, R2 ; MVII #FMTUNS, R1 62c2 01ca XORR R1, R2 62c3 01d1 XORR R2, R1 62c4 01ca XORR R1, R2 0x62c5 @@beginner 62c5 0272 PSHR R2 62c6 0004 016c 0275 CALL P16.LP ; DECLE disp_ptr(6, 10), BEGINNER 62c9 0282 619f DECLE ($200 + 6*20 + 10), BEGINNER 62cb 02b1 PULR R1 62cc 0004 016c 0275 CALL P16.LP ; DECLE disp_ptr(9, 10), CHAMPION 62cf 02be 61a5 DECLE ($200 + 9*20 + 10), CHAMPION ;; ------------------------------------------------------------ ;; ;; Ok, with that all set up, now wait for user input. ;; ;; Tap left/right to select world, up/down for beg/champ, ;; ;; action button or enter to accept. ;; ;; ------------------------------------------------------------ ;; ; SETISR MENUISR ; MVI TMP, R0 ; TSTR R0 ; BNEQ @@notink 62d1 0004 0160 03d4 CALL TINK 62d4 01c0 @@notink: CLRR R0 62d5 0240 0178 MVO R0, TMP 62d7 0240 0179 MVO R0, TMP+1 62d9 0004 016c 02fe CALL MENUINP 62dc 0203 0023 BPL @@leave 62de 0282 013a MVI COURSE, R2 62e0 0093 MOVR R2, R3 62e1 007c SARC R0, 2 62e2 0201 000f BC @@down 62e4 0202 0009 BOV @@right 62e6 007c SARC R0, 2 62e7 0201 000f BC @@up 62e9 022a 0016 BNOV @@notink 62eb 033a 0002 @@left: SUBI #2, R2 62ed 0220 0120 B @@again 62ef 02fa 0002 @@right: ADDI #2, R2 62f1 0220 0124 B @@again 62f3 03ba 0006 @@down: ANDI #$6, R2 62f5 000a INCR R2 62f6 0200 0002 B @@maybe 62f8 03ba 0006 @@up: ANDI #$6, R2 62fa 0153 @@maybe CMPR R2, R3 62fb 0224 0028 BEQ @@notink 62fd 0242 013a MVO R2, COURSE 62ff 0220 0047 B @@skill 6301 01c0 @@leave: CLRR R0 6302 0240 010c MVO R0, INCITY ; SETISR SETCSG 6304 0004 016c 0244 CALL _SETISR 6307 68dc DECLE SETCSG 6308 0004 016c 0227 CALL WAIT 630b 0001 DECLE 1 630c 0200 02da B WORLDMENU_RET ENDP ;; ======================================================================== ;; ;; FIXGFX Invert either top or middle GFX based on course. ;; ;; ======================================================================== ;; 0x630e FIXGFX PROC 630e 0003 DIS 630f 0280 013a MVI COURSE, R0 6311 03b8 0002 ANDI #2, R0 6313 02bc 39c0 MVII #TOPGR, R4 6315 0204 0002 BEQ @@inv_mntn 6317 02bc 3840 MVII #MIDGR, R4 6319 00a5 @@inv_mntn: MOVR R4, R5 631a 02b9 0040 MVII #64, R1 631c 02a0 @@loop MVI@ R4, R0 631d 0018 COMR R0 631e 0268 MVO@ R0, R5 631f 0011 DECR R1 6320 022c 0005 BNEQ @@loop 6322 0280 013a MVI COURSE, R0 6324 0378 0006 CMPI #6, R0 6326 0205 001e BLT @@not_merc 6328 02bc 3848 MVII #MIDGR+8, R4 632a 00a5 MOVR R4, R5 632b 02b9 0020 MVII #32, R1 632d 02ba 0008 MVII #8, R2 632f 02a0 @@loopm: MVI@ R4, R0 6330 0018 COMR R0 6331 0268 MVO@ R0, R5 6332 0012 DECR R2 6333 020c 0004 BNEQ @@n 6335 02ba 0008 MVII #8, R2 6337 00d4 ADDR R2, R4 6338 00d5 ADDR R2, R5 6339 0011 @@n DECR R1 633a 022c 000c BNEQ @@loopm 633c 02bc 3490 MVII #$3000 + $92*8, R4 633e 02bd 3800 MVII #$3800, R5 6340 02a0 @@copy MVI@ R4, R0 6341 0268 MVO@ R0, R5 6342 037d 3808 CMPI #$3808, R5 6344 022c 0005 BNEQ @@copy 0x6346 @@not_merc 6346 02bc 38d8 MVII #GGRAM, R4 6348 00a5 MOVR R4, R5 6349 02b9 0008 MVII #8, R1 634b 02a0 @@loop2 MVI@ R4, R0 634c 0018 COMR R0 634d 0268 MVO@ R0, R5 634e 0011 DECR R1 634f 022c 0005 BNEQ @@loop2 6351 02b9 0020 MVII #32, R1 6353 02bc 3978 MVII #$3978, R4 6355 02bd fa2a MVII #HUT+12, R5 6357 02a8 @@hloop: MVI@ R5, R0 6358 0260 MVO@ R0, R4 6359 0040 SWAP R0 635a 0260 MVO@ R0, R4 635b 0011 DECR R1 635c 022c 0006 BNEQ @@hloop 635e 0002 EIS ; SETISR MISCISR.1 635f 0004 016c 0244 CALL _SETISR 6362 6e16 DECLE MISCISR.1 6363 0200 0ab1 B MISCISR.wtimer ENDP ;; ======================================================================== ;; ;; MENUISR Really simple ISR once we arrive at menu. ;; ;; ======================================================================== ;; 0x6365 MENUISR PROC 6365 0240 0021 MVO R0, $21 6367 0200 0aab B MISCISR ENDP ;; ======================================================================== ;; ;; xxxxMNU Color schemes for mountain, city and ground row while in menu ;; ;; ======================================================================== ;; 0x6369 MNTNMNU PROC ; DECLE gen_fgbg_card(0, GROM, Black, Cyan) ; Invert mntn 6369 1200 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Black + __FGBG.b_Cyan) ; Invert mntn ; DECLE gen_fgbg_card(0, GROM, Red, Black) 636a 0002 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Red + __FGBG.b_Black) ; DECLE gen_fgbg_card(0, GROM, Black, YellowGreen) ; Invert mntn 636b 3400 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Black + __FGBG.b_YellowGreen) ; Invert mntn ENDP 0x636c CITYMNU PROC ; DECLE gen_fgbg_card(0, GROM, Yellow, Cyan) 636c 1206 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Yellow + __FGBG.b_Cyan) ; DECLE gen_fgbg_card(0, GROM, Red, Tan) ; Invert city 636d 0602 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Red + __FGBG.b_Tan) ; Invert city ; DECLE gen_fgbg_card(0, GROM, Yellow, YellowGreen) 636e 3406 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Yellow + __FGBG.b_YellowGreen) ENDP 0x636f GROWMNU PROC ; DECLE gen_fgbg_card(0, GROM, Black, Yellow) 636f 2400 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Black + __FGBG.b_Yellow) ; DECLE gen_fgbg_card(GCARD, GRAM, Yellow, Orange) 6370 1cde DECLE ((GCARD)*8 + __FGBG.GRAM + __FGBG.f_Yellow + __FGBG.b_Orange) ; DECLE gen_fgbg_card(0, GROM, Black, Tan ) 6371 0600 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Black + __FGBG.b_Tan) ; DECLE gen_fgbg_card(GCARD, GRAM, Tan, Orange) 6372 1cdb DECLE ((GCARD)*8 + __FGBG.GRAM + __FGBG.f_Tan + __FGBG.b_Orange) ; DECLE gen_fgbg_card(0, GROM, Black, Yellow) 6373 2400 DECLE ((0)*8 + __FGBG.GROM + __FGBG.f_Black + __FGBG.b_Yellow) ; DECLE gen_fgbg_card(GCARD, GRAM, Yellow, Orange) 6374 1cde DECLE ((GCARD)*8 + __FGBG.GRAM + __FGBG.f_Yellow + __FGBG.b_Orange) ENDP ;; ======================================================================== ;; ;; FIXMOB Copy over a slate of MOBs for the menu ;; ;; ======================================================================== ;; 0x6375 FIXMOB PROC 6375 0284 02f0 MVI SDAT, R4 6377 01ed CLRR R5 6378 02ba 0003 MVII #3, R2 0x637a @@oloop 637a 02b9 0006 MVII #6, R1 637c 02a0 @@loop MVI@ R4, R0 637d 0268 MVO@ R0, R5 637e 0011 DECR R1 637f 022c 0004 BNEQ @@loop 6381 02fd 0002 ADDI #2, R5 6383 0012 DECR R2 6384 022c 000b BNEQ @@oloop ; SETISR MENUISR 6386 0004 016c 0244 CALL _SETISR 6389 6365 DECLE MENUISR 638a 0220 0026 B MENUISR ENDP ;; ======================================================================== ;; ;; SPREC: Modified SPENT (see gfx/mobattr.asm) used for setting up the ;; ;; vignettes that adorn the mission control screen ;; ;; ======================================================================== ;; MACRO SPREC lbl,xsiz,xofs,yres,ysiz,xmir,ymir,yofs,color,card @@%lbl%0: SET _X.visb + _X.%xsiz% + (%xofs%) @@%lbl%1: SET _Y.%yres% + _Y.%ysiz% + _Y.%ymir% + _Y.%xmir% + (%yofs%) @@%lbl%2: SET %color% + 8*%card% ENDM MACRO SPEMIT a,b,c,d,e,f DECLE @@%a%0, @@%b%0, @@%c%0, @@%d%0, @@%e%0, @@%f%0 DECLE @@%a%1, @@%b%1, @@%c%1, @@%d%1, @@%e%1, @@%f%1 DECLE @@%a%2, @@%b%2, @@%c%2, @@%d%2, @@%e%2, @@%f%2 ENDM ;; ======================================================================== ;; ;; VIGMOB MOB programming for the vignettes ;; ;; ======================================================================== ;; 0x638c VIGMOB PROC 0x638c @@moon: ;SPREC a, xsiz,20, na ,siz2,na ,na ,48, X_PNK, $121 ; pink 0x614 @@a0: SET _X.visb + _X.xsiz + (20) 0x130 @@a1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (48) 0x190c @@a2: SET X_PNK + 8*$121 ; pink ;SPREC b, xsiz,40, na ,siz1,na ,na ,33, X_BLU, $122 ; blue 0x628 @@b0: SET _X.visb + _X.xsiz + (40) 0x21 @@b1: SET _Y.na + _Y.siz1 + _Y.na + _Y.na + (33) 0x911 @@b2: SET X_BLU + 8*$122 ; blue ;SPREC c, xsiz,50, na ,siz2,na ,na ,43, X_PNK, $121 ; blue 0x632 @@c0: SET _X.visb + _X.xsiz + (50) 0x12b @@c1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (43) 0x190c @@c2: SET X_PNK + 8*$121 ; blue ;SPREC d, na ,20, na ,siz2,na ,na ,58, X_WHT, $126 ; bullet 0x214 @@d0: SET _X.visb + _X.na + (20) 0x13a @@d1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (58) 0x937 @@d2: SET X_WHT + 8*$126 ; bullet ;SPREC e, na ,45, na ,siz2,na ,na ,63, X_WHT, $126 ; bullet 0x22d @@e0: SET _X.visb + _X.na + (45) 0x13f @@e1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (63) 0x937 @@e2: SET X_WHT + 8*$126 ; bullet ;SPREC f, na ,55, na ,siz2,na ,na ,48, X_WHT, $126 ; bullet 0x237 @@f0: SET _X.visb + _X.na + (55) 0x130 @@f1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (48) 0x937 @@f2: SET X_WHT + 8*$126 ; bullet ;SPEMIT a,b,c,d,e,f 638c 0614 0628 0632 DECLE @@a0, @@b0, @@c0, @@d0, @@e0, @@f0 638f 0214 022d 0237 6392 0130 0021 012b DECLE @@a1, @@b1, @@c1, @@d1, @@e1, @@f1 6395 013a 013f 0130 6398 190c 0911 190c DECLE @@a2, @@b2, @@c2, @@d2, @@e2, @@f2 639b 0937 0937 0937 0x639e @@mars: ;SPREC a, xsiz,40, na ,siz2,na ,na ,29, X_GRY, $123 ; spinner 0x628 @@a0: SET _X.visb + _X.xsiz + (40) 0x11d @@a1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (29) 0x1918 @@a2: SET X_GRY + 8*$123 ; spinner ;SPREC b, na ,65, na ,siz2,na ,na ,73, X_GRN, $120 ; turret 0x241 @@b0: SET _X.visb + _X.na + (65) 0x149 @@b1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (73) 0x905 @@b2: SET X_GRN + 8*$120 ; turret ;SPREC c, na ,55, na ,siz2,na ,na ,43, X_WHT, $124 ; spinner bullet 0x237 @@c0: SET _X.visb + _X.na + (55) 0x12b @@c1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (43) 0x927 @@c2: SET X_WHT + 8*$124 ; spinner bullet ;SPREC d, na ,47, na ,na ,na ,na ,74, X_BLK, $00D ; turret bullet 0x22f @@d0: SET _X.visb + _X.na + (47) 0x4a @@d1: SET _Y.na + _Y.na + _Y.na + _Y.na + (74) 0x68 @@d2: SET X_BLK + 8*$00D ; turret bullet ;SPREC e, xsiz,20, na ,siz1,na ,na ,43, X_YGR, $11A ; saucer 0x614 @@e0: SET _X.visb + _X.xsiz + (20) 0x2b @@e1: SET _Y.na + _Y.siz1 + _Y.na + _Y.na + (43) 0x18d6 @@e2: SET X_YGR + 8*$11A ; saucer ;SPREC f, na ,23, na ,siz2,na ,na ,70, X_WHT, $126 ; saucer bullet 0x217 @@f0: SET _X.visb + _X.na + (23) 0x146 @@f1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (70) 0x937 @@f2: SET X_WHT + 8*$126 ; saucer bullet ;SPEMIT a,b,c,d,e,f 639e 0628 0241 0237 DECLE @@a0, @@b0, @@c0, @@d0, @@e0, @@f0 63a1 022f 0614 0217 63a4 011d 0149 012b DECLE @@a1, @@b1, @@c1, @@d1, @@e1, @@f1 63a7 004a 002b 0146 63aa 1918 0905 0927 DECLE @@a2, @@b2, @@c2, @@d2, @@e2, @@f2 63ad 0068 18d6 0937 0x63b0 @@pluto: ;SPREC a, na ,22, na ,siz1,na ,na ,30, X_PUR, $121 ; 0x216 @@a0: SET _X.visb + _X.na + (22) 0x1e @@a1: SET _Y.na + _Y.siz1 + _Y.na + _Y.na + (30) 0x190f @@a2: SET X_PUR + 8*$121 ; ;SPREC b, na ,63, na ,siz1,xmir,na ,48, X_RED, $11A ; 0x23f @@b0: SET _X.visb + _X.na + (63) 0x430 @@b1: SET _Y.na + _Y.siz1 + _Y.na + _Y.xmir + (48) 0x8d2 @@b2: SET X_RED + 8*$11A ; ;SPREC c, xsiz,33, na ,siz2,na ,na ,75, X_WHT, $00E ; mine 0x621 @@c0: SET _X.visb + _X.xsiz + (33) 0x14b @@c1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (75) 0x77 @@c2: SET X_WHT + 8*$00E ; mine ;SPREC d, xsiz,49, na ,siz2,na ,na ,74, X_RED, $00E ; mine 0x631 @@d0: SET _X.visb + _X.xsiz + (49) 0x14a @@d1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (74) 0x72 @@d2: SET X_RED + 8*$00E ; mine ;SPREC e, na ,20, na ,siz2,na ,na ,48, X_WHT, $126 ; saucer bullet 0x214 @@e0: SET _X.visb + _X.na + (20) 0x130 @@e1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (48) 0x937 @@e2: SET X_WHT + 8*$126 ; saucer bullet ;SPREC f, na ,60, na ,siz2,na ,na ,60, X_WHT, $126 ; saucer bullet 0x23c @@f0: SET _X.visb + _X.na + (60) 0x13c @@f1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (60) 0x937 @@f2: SET X_WHT + 8*$126 ; saucer bullet ;SPEMIT a,b,c,d,e,f 63b0 0216 023f 0621 DECLE @@a0, @@b0, @@c0, @@d0, @@e0, @@f0 63b3 0631 0214 023c 63b6 001e 0430 014b DECLE @@a1, @@b1, @@c1, @@d1, @@e1, @@f1 63b9 014a 0130 013c 63bc 190f 08d2 0077 DECLE @@a2, @@b2, @@c2, @@d2, @@e2, @@f2 63bf 0072 0937 0937 0x63c2 @@mercury: ;SPREC a, na ,50, na ,siz1,na ,na ,48, X_CYN, $123 0x232 @@a0: SET _X.visb + _X.na + (50) 0x30 @@a1: SET _Y.na + _Y.siz1 + _Y.na + _Y.na + (48) 0x1919 @@a2: SET X_CYN + 8*$123 ;SPREC b, na ,25, na ,siz1,na ,na ,38, X_ORG, $121 0x219 @@b0: SET _X.visb + _X.na + (25) 0x26 @@b1: SET _Y.na + _Y.siz1 + _Y.na + _Y.na + (38) 0x190a @@b2: SET X_ORG + 8*$121 ;SPREC c, na ,65, na ,siz2,na ,na ,63, X_WHT, $124 ; spinner bullet 0x241 @@c0: SET _X.visb + _X.na + (65) 0x13f @@c1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (63) 0x927 @@c2: SET X_WHT + 8*$124 ; spinner bullet ;SPREC d, na ,34, na ,siz2,na ,na ,53, X_DGR, $100 0x222 @@d0: SET _X.visb + _X.na + (34) 0x135 @@d1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (53) 0x804 @@d2: SET X_DGR + 8*$100 ;SPREC e, na ,42, na ,siz2,na ,na ,63, X_DGR, $100 0x22a @@e0: SET _X.visb + _X.na + (42) 0x13f @@e1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (63) 0x804 @@e2: SET X_DGR + 8*$100 ;SPREC f, na ,58, na ,siz2,na ,na ,38, X_DGR, $100 0x23a @@f0: SET _X.visb + _X.na + (58) 0x126 @@f1: SET _Y.na + _Y.siz2 + _Y.na + _Y.na + (38) 0x804 @@f2: SET X_DGR + 8*$100 ;SPEMIT a,b,c,d,e,f 63c2 0232 0219 0241 DECLE @@a0, @@b0, @@c0, @@d0, @@e0, @@f0 63c5 0222 022a 023a 63c8 0030 0026 013f DECLE @@a1, @@b1, @@c1, @@d1, @@e1, @@f1 63cb 0135 013f 0126 63ce 1919 190a 0927 DECLE @@a2, @@b2, @@c2, @@d2, @@e2, @@f2 63d1 0804 0804 0804 ENDP ;; ======================================================================== ;; ;; TINK This should sound familiar ;; ;; ======================================================================== ;; 0x63d4 TINK PROC 63d4 02bc 63d8 MVII #@@tbl, R4 63d6 0200 73ba B INITMEM.2 ;@@tbl: INIT $1F0, $18 63d8 e1f0 DECLE _init_const OR $1F0 ; INIT $1F4, $00 63d9 81f4 DECLE _init_const OR $1F4 ; INIT $1F3, $80 63da 01f3 DECLE _init_const OR $1F3 ; INIT $1F7, $00 63db 81f7 DECLE _init_const OR $1F7 ; INIT $1FB, $3F 63dc 05fb DECLE _init_const OR $1FB ; INIT $1FA, $00 63dd 81fa DECLE _init_const OR $1FA ; INIT_DONE 63de 0000 DECLE 0 ENDP ;__ INCLUDE "game/ckpoint.asm" ;; ======================================================================== ;; ;; Checkpoint Summary Screen ;; ;; ;; ;; This screen shows a summary of how long it took the player to reach ;; ;; the given checkpoint, as well as what the "par" and "record" times ;; ;; are for this checkpoint. This screen counts up any bonus points that ;; ;; might've been earned as well. ;; ;; ;; ;; Sequence: ;; ;; ;; ;; -- Hide, or at least freeze, all the sprites ;; ;; ;; ;; -- Play the 'congratulations' theme ;; ;; ;; ;; -- Clear the screen ;; ;; (Should I do the wipe I used for the demo loop?) ;; ;; ;; ;; -- Display the above screen in stages ;; ;; -- Display from top to bottom, with some pauses thrown in ;; ;; -- Once display is complete, count 'average time' down to ;; ;; actual time and add it to the bonus. ;; ;; ;; ;; -- Pause for 3 to 5 seconds ;; ;; -- or wait for tap from player, since this isn't an arcade. ;; ;; ;; ;; -- Exit ;; ;; ;; ;; ;; ;; ======================================================================== ;; 0x63df CKPNT PROC 63df 0004 016a 0324 JSRD R5, SFXINIT ; SETISR CKPTISR.1 63e2 0004 016c 0244 CALL _SETISR 63e5 6554 DECLE CKPTISR.1 ;; ------------------------------------------------------------ ;; ;; Play congrats song. ;; ;; ------------------------------------------------------------ ;; 63e6 0283 0139 MVI POINT, R3 ; Get current level 63e8 037b 00d0 CMPI #26 SHL 3, R3 ; is it point 'Z'? 63ea 0201 0006 BC @@end_of_course ; Play special if it's exactly 'Z' 63ec 0004 016c 0038 CALL PLAY.mus 63ef fd91 DECLE M_LEVEL 63f0 0200 0004 B @@wait_music 0x63f2 @@end_of_course 63f2 0004 016c 0038 CALL PLAY.mus 63f5 fdb0 DECLE M_COURS ;; ------------------------------------------------------------ ;; ;; Wait for congrats song to finish. ;; ;; ------------------------------------------------------------ ;; 0x63f6 @@wait_music 63f6 0004 016d 0015 JSRE R5, WAIT_SONG ;; ------------------------------------------------------------ ;; ;; Ok, we've now officially shut down the display. Go ahead ;; ;; and put up the congrats screen. ;; ;; ------------------------------------------------------------ ;; 63f9 0004 015c 006b CALL HALTENGINE ; SETISR CKPTISR 63fc 0004 016c 0244 CALL _SETISR 63ff 6546 DECLE CKPTISR 6400 0004 016c 02f4 CALL CLRSCR ;; ------------------------------------------------------------ ;; ;; Step through the data table and draw up the screen. The ;; ;; layout shifts slightly depending on whether the ECS is ;; ;; attached. ;; ;; ------------------------------------------------------------ ;; 6403 02bd 6518 MVII #CPDAT.norec, R5 ; todo: put code here to detect ECS / top record table 6405 000f INCR PC 0x6406 @@dloop: 6406 02b5 PULR R5 6407 02a9 MVI@ R5, R1 ; get format word 6408 007d SARC R1, 2 6409 020b 0009 BMI @@special ; if -ve, this is special rec 640b 0204 0045 BEQ @@dldone ; if 0, we're done. 640d 02ac MVI@ R5, R4 ; get display ptr 640e 02a8 MVI@ R5, R0 ; get string ptr 640f 0275 PSHR R5 ; \ 6410 02bd 6406 MVII #@@dloop, R5 ; |- print it and loop 6412 0200 0a63 B P16.R ; / 0x6414 @@special: 6414 0275 PSHR R5 6415 0283 0139 MVI POINT, R3 ; Get saved point # + course # 6417 0201 0003 BC @@disp_point ; point # and player's time 6419 0202 001f BOV @@disp_avg ; average for point # 641b 0000 @@disp_rec: HLT ; not yet implemented! 0x641c @@disp_point: 641c 009a MOVR R3, R2 ; \ 641d 03ba 0007 ANDI #7, R2 ; |- Course number in R2, 641f 0113 SUBR R2, R3 ; / Point number<<2 in R3 6420 02fa 5f9d ADDI #CCTBL, R2 ; Course-specific formatting 6422 02fb 0100 ADDI #32*8, R3 ; Bias up to alphabet 6424 02d3 ADD@ R2, R3 ; add formatting to point # 6425 009a MOVR R3, R2 6426 03ba 0007 ANDI #7, R2 6428 020c 0002 BNEQ @@color_ok 642a 03fb 0003 XORI #X_TAN, R3 0x642c @@color_ok 642c 033c 0002 SUBI #2, R4 ; back up cursor 2 posns. 642e 0263 MVO@ R3, R4 ; Print it before the ":" 642f 02fc 0004 ADDI #4, R4 ; \ 6431 0280 0168 MVI TIMSEC, R0 ; |- print player's time. 6433 0004 016c 02b0 CALL PRNUM16.bfw ; / ; DECLE gen_cstk_card(0, GRAM, White, NoAdvance), 3 6436 0807 0003 DECLE ((0)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), 3 6438 0220 0033 B @@dloop 0x643a @@disp_avg: 643a 0281 013a MVI COURSE, R1 ; 643c 02f9 6510 ADDI #PARTBL, R1 ; \__ Par time based course # 643e 0288 MVI@ R1, R0 ; / 643f 037b 0078 CMPI #15 SHL 3, R3 ; \ keep upper/lower byte 6441 002f ADCR PC ; |- based on being in front 6442 0040 SWAP R0 ; / or back half of course 6443 0240 0178 MVO R0, TMP ; Remember par time 6445 03b8 00ff ANDI #$FF, R0 6447 02fc 0004 ADDI #4, R4 ; \ 6449 0244 0179 MVO R4, TMP+1 ; |_ Print par time 644b 0004 016c 02b0 CALL PRNUM16.bfw ; | ; DECLE gen_cstk_card(0, GRAM, White, NoAdvance), 3 644e 0807 0003 DECLE ((0)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), 3 6450 0220 004b B @@dloop 6452 0281 0139 @@dldone: MVI POINT, R1 6454 0379 00d0 CMPI #26 SHL 3, R1 6456 0205 0047 BLT @@not_z 6458 0280 0138 MVI LIVES, R0 645a 0080 TSTR R0 645b 020c 000f BNEQ @@tank_bonus 645d 0004 016c 0270 CALL P16.FLS ; DECLE X_TAN, disp_ptr(9,3) 6460 0003 02b7 DECLE X_TAN, ($200 + 9*20 + 3) ; S16 "No tank bonus!" 6462 7069 DECLE _s16p 6463 0278 DECLE _s16p 6464 0aa2 DECLE _s16p 6465 5a72 DECLE _s16p 6466 1002 DECLE _s16p 6467 727a DECLE _s16p 6468 9aaa DECLE _s16p 6469 0008 DECLE _s16p 646a 0200 0033 B @@not_z 0x646c @@tank_bonus: 646c 0004 016c 0270 CALL P16.FLS ; DECLE X_TAN, disp_ptr(9,0) 646f 0003 02b4 DECLE X_TAN, ($200 + 9*20 + 0) ; S16 "Tank bonus:" 6471 a051 DECLE _s16p 6472 720a DECLE _s16p 6473 0258 DECLE _s16p 6474 7a12 DECLE _s16p 6475 aa72 DECLE _s16p 6476 d298 DECLE _s16p 6477 01c0 CLRR R0 6478 0240 017b MVO R0, TMP+3 647a 0280 017b @@tb MVI TMP+3, R0 647c 0008 INCR R0 647d 0240 017b MVO R0, TMP+3 647f 0048 SLL R0, 1 ; MVII #disp_ptr(9, 13), R4 6480 02bc 02c1 MVII #($200 + 9*20 + 13), R4 6482 0004 016c 02b0 CALL PRNUM16.bfw ; DECLE gen_cstk_card(0, GRAM, White, NoAdvance), 3 6485 0807 0003 DECLE ((0)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), 3 ; MVII #gen_cstk_card($10, GRAM, White, NoAdvance), R0 6487 02b8 0887 MVII #(($10)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), R0 6489 0260 MVO@ R0, R4 648a 0260 MVO@ R0, R4 648b 0260 MVO@ R0, R4 648c 0260 MVO@ R0, R4 ; MVII #X_WHT, R1 ; CALL P16.S ; S16 "10000" ; CSTSCO 20000 648d 0004 0168 022a CALL ADDSCORE.cst 6490 0190 DECLE (20000) / 50 6491 0004 0168 035c CALL PLAYSFX 6494 0006 DECLE FXDING 6495 0004 016c 0227 CALL WAIT 6498 000a DECLE 10 6499 0280 017b MVI TMP+3, R0 649b 0340 0138 CMP LIVES, R0 649d 0225 0024 BLT @@tb 0x649f @@not_z: 649f 0282 0178 MVI TMP, R2 64a1 0302 0168 SUB TIMSEC, R2 ; Did we beat par? 64a3 020e 000f BGT @@bonus 64a5 0004 016c 0270 CALL P16.FLS 64a8 0003 DECLE X_TAN ; DECLE disp_ptr(10,3) 64a9 02cb DECLE ($200 + 10*20 + 3) ; S16 "No time bonus!" 64aa 7069 DECLE _s16p 64ab 0278 DECLE _s16p 64ac 4aa2 DECLE _s16p 64ad 2a6a DECLE _s16p 64ae 1002 DECLE _s16p 64af 727a DECLE _s16p 64b0 9aaa DECLE _s16p 64b1 0008 DECLE _s16p 64b2 0200 0045 B @@done 0x64b4 @@bonus: 64b4 0090 MOVR R2, R0 64b5 004c SLL R0, 2 ; \ 64b6 0081 MOVR R0, R1 ; |_ 1000 pts per sec 64b7 004d SLL R1, 2 ; | 64b8 00c8 ADDR R1, R0 ; / ; REGSCO 64b9 0004 0168 023b CALL ADDSCORE.reg 64bc 0004 016c 0227 CALL WAIT 64bf 003c DECLE 60 64c0 0004 016c 0270 CALL P16.FLS 64c3 0003 DECLE X_TAN ; DECLE disp_ptr(10,0) 64c4 02c8 DECLE ($200 + 10*20 + 0) ; S16 "Time bonus: " 64c5 a061 DECLE _s16p 64c6 6a4a DECLE _s16p 64c7 0228 DECLE _s16p 64c8 7a12 DECLE _s16p 64c9 aa72 DECLE _s16p 64ca d298 DECLE _s16p 64cb 0000 DECLE _s16p ; ADDI #1, R4 ; INCR R4 ; CMPI #21, R2 ; BGT @@done 64cc 01c0 CLRR R0 64cd 0270 PSHR R0 64ce 00a1 MOVR R4, R1 64cf 0200 0021 B @@bl1st 0x64d1 @@bloop: 64d1 0010 DECR R0 64d2 0240 0178 MVO R0, TMP 64d4 0284 0179 MVI TMP+1, R4 64d6 02fc 0200 ADDI #$200, R4 64d8 0004 016c 02b0 CALL PRNUM16.bfw ; DECLE gen_cstk_card(0, GRAM, White, NoAdvance), 3 64db 0807 0003 DECLE ((0)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), 3 64dd 02b0 PULR R0 64de 008c MOVR R1, R4 ; ADDI #100, R0 64df 0008 INCR R0 64e0 0270 PSHR R0 64e1 0004 016c 02b1 CALL PRNUM16.bw 64e4 0004 DECLE 4 ; MVII #gen_cstk_card($10, GRAM, White, NoAdvance), R0 64e5 02b8 0887 MVII #(($10)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), R0 64e7 0260 MVO@ R0, R4 64e8 0260 MVO@ R0, R4 64e9 0260 MVO@ R0, R4 ; MOVR R1, R2 64ea 0004 0168 035c CALL PLAYSFX 64ed 0006 DECLE FXDING ; MOVR R2, R1 64ee 0004 016c 0227 CALL WAIT 64f1 000a DECLE 10 64f2 0280 0178 @@bl1st MVI TMP, R0 64f4 0340 0168 CMP TIMSEC, R0 64f6 022c 0026 BNEQ @@bloop 64f8 02b0 PULR R0 64f9 0004 016c 0227 @@done CALL WAIT 64fc 00f0 DECLE 60 * 4 ; wait 4 seconds 64fd 0003 DIS ; SETISR ENGINE1 64fe 0004 016c 0244 CALL _SETISR 6501 537c DECLE ENGINE1 6502 01c0 CLRR R0 6503 0240 0168 MVO R0, TIMSEC ; CALL UPTSS 6505 0280 0139 MVI POINT, R0 6507 03b8 0008 ANDI #$8, R0 6509 02bd 66b8 MVII #CKPNT_RET, R5 650b 0002 EIS 650c 020c 0415 BNEQ TOCITY 650e 0200 0408 B TOCRATER ENDP ;; ------------------------------------------------------------------------ ;; ;; PARTBL Base par times for each of the 8 courses. ;; ;; ------------------------------------------------------------------------ ;; ;Beg E/J, Beg OTZ, Cmp E/J, Cmp OTZ ;PARTBL DECLE pack(70, 90), pack(80, 100) 6510 465a 5064 PARTBL DECLE ((((70) AND $FF) SHL 8) OR ((90) AND $FF)), ((((80) AND $FF) SHL 8) OR ((100) AND $FF)) ; DECLE pack(70, 90), pack(80, 100) 6512 465a 5064 DECLE ((((70) AND $FF) SHL 8) OR ((90) AND $FF)), ((((80) AND $FF) SHL 8) OR ((100) AND $FF)) ; DECLE pack(80, 100), pack(90, 110) 6514 5064 5a6e DECLE ((((80) AND $FF) SHL 8) OR ((100) AND $FF)), ((((90) AND $FF) SHL 8) OR ((110) AND $FF)) ; DECLE pack(80, 100), pack(90, 110) 6516 5064 5a6e DECLE ((((80) AND $FF) SHL 8) OR ((100) AND $FF)), ((((90) AND $FF) SHL 8) OR ((110) AND $FF)) ;; ------------------------------------------------------------------------ ;; ;; 01234567890123456789 ;; ;; ;; ;; 0 : CONGRATULATIONS! : ;; ;; 1 : : ;; ;; 2 :Your time to : ;; ;; 3 :reach Point E: XXX: ;; ;; 4 : : ;; ;; 5 :Average time: XXX: ;; ;; 6 : : ;; ;; 7 :Top record time: XXX: (if ECS attached) ;; ;; 8 : : ;; ;; 9 : Course bonus: XXXXX: (if point Z) ;; ;; 10 : Time bonus: XXXXX: (if better than avg.) ;; ;; 10 : No time bonus! : (if not) ;; ;; 11 : : ;; ;; ;; ;; Note: If no ECS attached, shift rows 2 thru 5 down 2 and row 0 down 1. ;; ;; ------------------------------------------------------------------------ ;; 0x6518 CPDAT PROC ;@@norec DECLE X_RED SHL 2, disp_ptr(1, 2), @@congrat 6518 0008 0216 6527 @@norec DECLE X_RED SHL 2, ($200 + 1*20 + 2), @@congrat ; DECLE X_TAN SHL 2, disp_ptr(3, 0), @@yourtime 651b 000c 023c 6530 DECLE X_TAN SHL 2, ($200 + 3*20 + 0), @@yourtime ; DECLE X_TAN SHL 2, disp_ptr(4, 0), @@reach, $FFFF 651e 000c 0250 6537 DECLE X_TAN SHL 2, ($200 + 4*20 + 0), @@reach, $FFFF 6521 ffff ; DECLE X_TAN SHL 2, disp_ptr(6, 0), @@avgtime, $FFFE 6522 000c 0278 653f DECLE X_TAN SHL 2, ($200 + 6*20 + 0), @@avgtime, $FFFE 6525 fffe 6526 0000 DECLE 0 ;@@congrat S16 "CONGRATULATIONS!" 0x6527 @@congrat 6527 1879 DECLE _s16p 6528 7179 DECLE _s16p 6529 9139 DECLE _s16p 652a a109 DECLE _s16p 652b 61a9 DECLE _s16p 652c a109 DECLE _s16p 652d 7949 DECLE _s16p 652e 9971 DECLE _s16p 652f 0008 DECLE _s16p ;@@yourtime S16 "Your time to" 0x6530 @@yourtime 6530 c859 DECLE _s16p 6531 aa7a DECLE _s16p 6532 0290 DECLE _s16p 6533 4aa2 DECLE _s16p 6534 2a6a DECLE _s16p 6535 a002 DECLE _s16p 6536 0278 DECLE _s16p ;@@reach S16 "reach Point :" 0x6537 @@reach 6537 906a DECLE _s16p 6538 0a2a DECLE _s16p 6539 421a DECLE _s16p 653a 8001 DECLE _s16p 653b 4a7a DECLE _s16p 653c a272 DECLE _s16p 653d 0000 DECLE _s16p 653e 00d0 DECLE _s16p ;@@avgtime S16 "Average time:" 0x653f @@avgtime 653f 0861 DECLE _s16p 6540 2ab2 DECLE _s16p 6541 0a92 DECLE _s16p 6542 2a3a DECLE _s16p 6543 a002 DECLE _s16p 6544 6a4a DECLE _s16p 6545 d228 DECLE _s16p ENDP ;;==========================================================================;; ;; CKPTISR ;; ;;==========================================================================;; 0x6546 CKPTISR PROC 6546 01c0 CLRR R0 6547 01e4 CLRR R4 REPEAT 8 6548 0260 MVO@ R0, R4 ENDR ;== 1 6549 0260 MVO@ R0, R4 ;== 2 654a 0260 MVO@ R0, R4 ;== 3 654b 0260 MVO@ R0, R4 ;== 4 654c 0260 MVO@ R0, R4 ;== 5 654d 0260 MVO@ R0, R4 ;== 6 654e 0260 MVO@ R0, R4 ;== 7 654f 0260 MVO@ R0, R4 ;== 8 6550 0240 0028 MVO R0, $28 6552 0240 002c MVO R0, $2C 6554 0240 0020 @@1: MVO R0, $20 6556 02bd 6e16 @@2: MVII #MISCISR.1, R5 6558 0200 08a1 B UPSND ENDP ;__ INCLUDE "game/gameloop.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; 655a fb0e fb19 fb29 CRPTBL DECLE CREEPFNT2, CREEPFNT3, CREEPFNT4 ;; ======================================================================== ;; ;; LOADCRP -- Load course-specific creeps. Used below and mission menu ;; ;; ======================================================================== ;; 0x655d LOADCRP PROC 655d 0245 035e MVO R5, BGTTMP 655f 0004 016c 01cf CALL LOADFONT 6562 fa5a DECLE FONT 6563 0004 016c 01cf CALL LOADFONT 6566 fac6 DECLE CREEPFNT 6567 0281 013a MVI COURSE, R1 6569 0061 SLR R1, 1 656a 0011 DECR R1 656b 020b 0006 BMI @@course0 656d 02f9 655a ADDI #CRPTBL,R1 656f 028a MVI@ R1, R2 6570 0004 016c 01d0 CALL LOADFONT.1 0x6573 @@course0: 6573 0281 013a MVI COURSE, R1 6575 0041 SWAP R1 ; ANDI #$200, R1 6576 007d SARC R1, 2 6577 0241 016d MVO R1, SPINCNT 6579 0287 035e MVI BGTTMP, PC ENDP ;; ======================================================================== ;; ;; Initializer list for init'ing world. ;; ;; ======================================================================== ;; 0x657b WINIT PROC ; INIT BGFLAG, 0 657b 811b DECLE _init_const OR BGFLAG ; INIT LMCHAR, 0 657c 8167 DECLE _init_const OR LMCHAR ; INIT LMCNT, 0 657d 8166 DECLE _init_const OR LMCNT ; INIT CAUTFL, 0 657e 8136 DECLE _init_const OR CAUTFL ; INIT JHGT, 0 657f 8343 DECLE _init_const OR JHGT ; INIT JVEL, 0 6580 8172 DECLE _init_const OR JVEL ; INIT RCCNT, 0 6581 8160 DECLE _init_const OR RCCNT ; INIT RCPIC, RCS1.blank - RCS1 + 1 6582 e561 DECLE _init_const OR RCPIC ; INIT CUENUM, 0 6583 811a DECLE _init_const OR CUENUM ; INIT WAVE, 0 6584 813d DECLE _init_const OR WAVE ; INIT WANTVL, VMED 6585 0971 DECLE _init_const OR WANTVL ; INIT GRATE, VMED 6586 0970 DECLE _init_const OR GRATE ; INIT WPTR, WHEELS.data + WHEELS.nnn 6587 4741 DECLE _init_const OR WPTR ; INIT HBCNT2, 5 6588 9513 DECLE _init_const OR HBCNT2 ; INIT FCNT, 5 6589 956b DECLE _init_const OR FCNT ; INIT DOSCO, 1 658a 853f DECLE _init_const OR DOSCO ; INIT_DONE 658b 0000 DECLE 0 ENDP ;; ======================================================================== ;; ;; Top level game loop. Wraps "INGAME". ;; ;; ======================================================================== ;; 0x658c GAMELOOP PROC 658c 0004 01d4 0391 @@title: CALL INITMEM.1 658f 657b DECLE WINIT IF (DEFINED SKIPTITLE) = 0 ; SETISR MISCISR 6590 0004 016c 0244 CALL _SETISR 6593 6e14 DECLE MISCISR INCLUDE "game/title.asm"; Set up 'Title Screen' ;; ======================================================================== ;; ;; TITLESCREEN ;; ;; Draws the title screen and waits for user input. ;; ;; ======================================================================== ;; 0x6594 TITLESCREEN;PROC ; PSHR R5 6594 0004 016c 02f4 CALL CLRSCR 6597 0004 016c 01cf CALL LOADFONT 659a faa3 DECLE JOEFNT ; Set up the title screen; 659b 0004 01d4 038e CALL INITMEM.0 ; INIT FDROP, 0 659e 8118 DECLE _init_const OR FDROP ; INIT EBSY, 1 659f 856c DECLE _init_const OR EBSY ; INIT RPTR, LMPTITLE 65a0 4b42 DECLE _init_const OR RPTR ; INIT GDATA, $3E 65a1 0d0e DECLE _init_const OR GDATA ; INIT MPTR, TOPMOUNT 65a2 4f40 DECLE _init_const OR MPTR ; INIT MGRAM, TOPGR 65a3 5344 DECLE _init_const OR MGRAM ; INIT MIDMSK, $3FFF 65a4 550a DECLE _init_const OR MIDMSK ; INIT MOBHIT, 1 65a5 8535 DECLE _init_const OR MOBHIT ; INIT DNENG, 0 65a6 8174 DECLE _init_const OR DNENG ; INIT INCITY, 0 65a7 810c DECLE _init_const OR INCITY ; INIT EMODE, 2 65a8 8919 DECLE _init_const OR EMODE ; INIT_DONE 65a9 0000 DECLE 0 65aa 0280 013a MVI COURSE, R0 65ac 03b8 0007 ANDI #7, R0 65ae 02f8 0008 ADDI #8, R0 65b0 0240 013a MVO R0, COURSE 65b2 0378 000e CMPI #14, R0 65b4 02b9 0003 MVII #C_TAN, R1 65b6 0205 0001 BLT @@tmclr_ok 65b8 01c9 CLRR R1 65b9 0241 0116 @@tmclr_ok MVO R1, TMCLR 65bb 0004 0168 0324 CALL SFXINIT 65be 0004 0168 00ff CALL INITLVL 65c1 0004 0164 035f CALL DRAWGAME ; SETISR ENGINE1 65c4 0004 016c 0244 CALL _SETISR 65c7 537c DECLE ENGINE1 65c8 0004 01d4 038e CALL INITMEM.0 ; INIT GRATE, VMED 65cb 0970 DECLE _init_const OR GRATE ; INIT WANTVL, VMED 65cc 0971 DECLE _init_const OR WANTVL ; INIT SKIPRC, 1 ; INIT EBSY, 0 65cd 816c DECLE _init_const OR EBSY ; INIT DOSCO, 0 65ce 813f DECLE _init_const OR DOSCO ; INIT TMADDR, 0 65cf 8117 DECLE _init_const OR TMADDR ; INIT SDAT+7, $FC 65d0 12f7 DECLE _init_const OR SDAT+7 ; INIT TMP, $FC 65d1 1178 DECLE _init_const OR TMP ; INIT_DONE 65d2 0000 DECLE 0 ; Put up the title string. 65d3 0004 016c 0270 CALL P16.FLS ; DECLE gen_cstk_card(0, GRAM, Blue, NoAdvance) 65d6 0801 DECLE ((0)*8 + __CSTK.GRAM_Blue + __CSTK.NoAdvance) ; DECLE disp_ptr(11, 3) 65d7 02df DECLE ($200 + 11*20 + 3) ; STRING " : 2007 !", $22, "#$%&' ", 0 ; S16 ": 2007 !\"#$%&'" 65d8 d068 DECLE _s16p 65d9 9000 DECLE _s16p 65da 8080 DECLE _s16p 65db 00b8 DECLE _s16p 65dc 1008 DECLE _s16p 65dd 2018 DECLE _s16p 65de 3028 DECLE _s16p 65df 0038 DECLE _s16p ;B TITLESCREEN_RET ;ENDP ;__ 65e0 0220 077f B RUNENG ; Do title screen. ENDI 0x65e2 RUNENG_RET_TITLE: ; SETISR MISCISR 65e2 0004 016c 0244 CALL _SETISR 65e5 6e14 DECLE MISCISR ; CALL WAITHAND 65e6 0220 0427 @@menu B WORLDMENU 0x65e8 WORLDMENU_RET: ; SETISR JRR5 65e8 0004 016c 0244 CALL _SETISR 65eb 6b65 DECLE JRR5 65ec 0004 0164 015d CALL LOADCRP 65ef 0004 01d4 038e CALL INITMEM.0 ; INIT LMCNT, 0 65f2 8166 DECLE _init_const OR LMCNT ; INIT LMCHAR, 0 65f3 8167 DECLE _init_const OR LMCHAR ; INIT FDROP, 0 65f4 8118 DECLE _init_const OR FDROP ; INIT LIVES, 3 65f5 8d38 DECLE _init_const OR LIVES ; INIT CONTS, 2 65f6 8937 DECLE _init_const OR CONTS ; INIT LIVES, 0 ; INIT CONTS, 0 ; INIT CURBON, 0 65f7 813c DECLE _init_const OR CURBON ; INIT TIMSEC, 0 65f8 8168 DECLE _init_const OR TIMSEC ; INIT TIMTIC, 31 65f9 fd69 DECLE _init_const OR TIMTIC ; INIT EBSY, 1 65fa 856c DECLE _init_const OR EBSY ; INIT GRATE, 0 ; INIT WANTVL, $90 ; INIT MOBHIT, 1 65fb 8535 DECLE _init_const OR MOBHIT ; INIT POINT, 0 65fc 8139 DECLE _init_const OR POINT ; INIT SCORE, 0 65fd 819d DECLE _init_const OR SCORE ; INIT SCORE+1, 0 65fe 819e DECLE _init_const OR SCORE+1 ; INIT PSCOR, 0 65ff 819f DECLE _init_const OR PSCOR ; INIT PSCOR+1, 0 6600 81a0 DECLE _init_const OR PSCOR+1 ; INIT DEFSCO , 0 6601 813b DECLE _init_const OR DEFSCO ; INIT_DONE 6602 0000 DECLE 0 6603 0283 013a MVI COURSE, R3 6605 02fb d349 ADDI #WINDEX,R3 6607 029b MVI@ R3, R3 6608 0243 0338 MVO R3, RCIDX 660a 0243 0164 MVO R3, RCLVL 660c 0043 SWAP R3 660d 0243 0165 MVO R3, RCLVL+1 660f 0004 0168 00ff CALL INITLVL IF (DEFINED SKIPHUT) = 0 6612 02b8 0004 MVII #4, R0 ; \_ prepare to show "hut" 6614 0240 0119 MVO R0, EMODE ; / ELSE MVII #1, R0 ; \_ Go straight to in-game MVO R0, EMODE ; / ENDI 6616 0200 000f B @@cont 0x6618 @@do_continue: 6618 0004 01d4 038e CALL INITMEM.0 ; INIT SCORE, 0 661b 819d DECLE _init_const OR SCORE ; INIT SCORE+1,0 661c 819e DECLE _init_const OR SCORE+1 ; INIT CURBON, 0 661d 813c DECLE _init_const OR CURBON ; INIT LIVES, 1 661e 8538 DECLE _init_const OR LIVES ; INIT_DONE 661f 0000 DECLE 0 6620 0280 0165 @@again: MVI RCLVL+1,R0 6622 0040 SWAP R0 6623 03c0 0164 XOR RCLVL, R0 6625 0240 0338 MVO R0, RCIDX 0x6627 @@cont: 6627 0003 DIS 6628 0004 01d4 0391 CALL INITMEM.1 662b 657b DECLE WINIT 662c 0004 015c 006f CALL SPINIT 662f 0004 0164 035f CALL DRAWGAME 6632 0004 0168 0324 CALL SFXINIT 6635 0280 0119 MVI EMODE, R0 6637 0338 0004 SUBI #4, R0 6639 020c 006e BNEQ @@do_restart 663b 0004 015c 02f9 CALL TIC1ST ; wants R0 == 0 ; Ugly. Rewrite this? Actually it's not TOO bad. 663e 0004 01d4 038e CALL INITMEM.0 ; INIT SPAT+0, SPATBL.hut0 6641 1540 DECLE _init_const OR SPAT+0 ; INIT SPAT+1, SPATBL.hut1 6642 1941 DECLE _init_const OR SPAT+1 ; INIT SPAT+2, SPATBL.hut2 6643 1d42 DECLE _init_const OR SPAT+2 ; INIT SPAT+3, SPATBL.hut3 6644 2143 DECLE _init_const OR SPAT+3 ; INIT SPXYP+0, $20 6645 2720 DECLE _init_const OR SPXYP+0 ; INIT SPXYP+2, $20 6646 2722 DECLE _init_const OR SPXYP+2 ; INIT SPXYP+4, $20 6647 2724 DECLE _init_const OR SPXYP+4 ; INIT SPXYP+6, $20 6648 2726 DECLE _init_const OR SPXYP+6 ; INIT SPHSCR+0, 1 6649 8551 DECLE _init_const OR SPHSCR+0 ; INIT SPHSCR+1, 1 664a 8552 DECLE _init_const OR SPHSCR+1 ; INIT SPHSCR+2, 1 664b 8553 DECLE _init_const OR SPHSCR+2 ; INIT SPHSCR+3, 1 664c 8554 DECLE _init_const OR SPHSCR+3 ; INIT RPTR, HUT 664d 5b42 DECLE _init_const OR RPTR ; INIT EMODE, 1 664e 8519 DECLE _init_const OR EMODE ; INIT GP1MOB, 4 664f 9157 DECLE _init_const OR GP1MOB ; INIT GDATA, 00111110b 6650 0d0e DECLE _init_const OR GDATA ; INIT EBSY, 0 6651 816c DECLE _init_const OR EBSY ; INIT_DONE 6652 0000 DECLE 0 6653 0004 015c 0165 CALL UPBSP 6656 0004 015c 008c CALL UPMUX ; SETISR ENGINE1 ; In case somehow it's not... 6659 0004 016c 0244 CALL _SETISR 665c 537c DECLE ENGINE1 ; In case somehow it's not... 665d 0004 016d 0038 JSRE R5, PLAY.mus 6660 fd0b DECLE M_INTRO 6661 0285 013a MVI COURSE, R5 6663 03bd 0006 ANDI #$6, R5 6665 02fd 61ab ADDI #CNAME, R5 6667 02a8 MVI@ R5, R0 ; Get course name 6668 02a9 MVI@ R5, R1 ; Get display offset 6669 0041 SWAP R1 666a 03b9 0007 ANDI #$7, R1 ; ADDI #disp_ptr(6, 4), R1 666c 02f9 027c ADDI #($200 + 6*20 + 4), R1 666e 008c MOVR R1, R4 666f 02b9 0007 MVII #X_WHT, R1 6671 0004 016c 0277 CALL P16.R 6674 0004 016c 001b CALL WAIT_SONG1 6677 0080 DECLE 128 6678 0282 013a MVI COURSE, R2 667a 02b8 619f MVII #BEGINNER, R0 667c 007a SARC R2 667d 0209 0002 BNC @@beg 667f 02b8 61a5 MVII #CHAMPION, R0 ;@@beg MVII #disp_ptr(6, 2), R4 6681 02bc 027a @@beg MVII #($200 + 6*20 + 2), R4 6683 02b9 0007 MVII #X_WHT, R1 6685 0004 016c 0277 CALL P16.R 6688 0004 016c 027b CALL P16.S ;TXTCOURSE S16 "COURSE" 0x668b TXTCOURSE 668b 1829 DECLE _s16p 668c a979 DECLE _s16p 668d 9991 DECLE _s16p 668e 0128 DECLE _s16p 668f 0004 016c 001b CALL WAIT_SONG1 6692 0080 DECLE 128 6693 0004 016c 0270 CALL P16.FLS ; DECLE X_WHT, disp_ptr(6, 3) 6696 0007 027b DECLE X_WHT, ($200 + 6*20 + 3) ; ; STRING " GO ", $14F, " ", 0 ; S16 " GO \x0F " 6698 0070 DECLE _s16p 6699 0000 DECLE _s16p 669a 0000 DECLE _s16p 669b 7939 DECLE _s16p 669c 7807 DECLE _s16p 669d 0000 DECLE _s16p 669e 0000 DECLE _s16p 669f 0000 DECLE _s16p 66a0 0004 016c 001b CALL WAIT_SONG1 66a3 ffff DECLE $FFFF 66a4 0004 016c 02ed CALL FILLZERO.lp 66a7 0011 DECLE 17 ; DECLE disp_ptr(6, 2) 66a8 027a DECLE ($200 + 6*20 + 2) 0x66a9 @@do_restart: 66a9 0004 016d 0038 JSRE R5, PLAY.mus 66ac fd2e DECLE M_GAME IF (DEFINED DOIDLEHST) <> 0 CALL FILLZERO.lp DECLE 256 DECLE IDLEHST ENDI 66ad 0220 084c B RUNENG 0x66af RUNENG_RET_NORMAL: ; R2 tells us what to do next. ; R2 = 0 means the tank died, so just start the level over ; or do game over. ; R2 = 1 means we hit a checkpoint, so do the checkpoint stuff ; R2 = 2 means go back to the menu 66af 037a 0002 CMPI #2, R2 66b1 0224 0126 BEQ @@title 66b3 0012 DECR R2 66b4 020b 0015 BMI @@died 66b6 0220 02d8 B CKPNT 0x66b8 CKPNT_RET 66b8 0280 0139 MVI POINT, R0 66ba 0378 0050 CMPI #10 SHL 3, R0 66bc 0209 0007 BNC @@notafterz ; After Pt. J, go to the teaser game over screen w/out continues. 66be 0004 01d4 03c6 @@afterz: CALL TEASER_END 66c1 02bd 658c MVII #@@title, R5 66c3 0200 0316 B FINALOVER 66c5 02b8 0001 @@notafterz MVII #1, R0 66c7 0240 0119 MVO R0, EMODE 66c9 0220 00aa B @@again 0x66cb @@died: ; do tank dying stuff ; branch to @@over if the game's done. 66cb 0003 DIS 66cc 0280 0138 MVI LIVES, R0 66ce 0010 DECR R0 66cf 0240 0138 MVO R0, LIVES ; the below code is mostly a temporary hack. Eventually ; this will move to its own source file. 66d1 0281 0110 MVI HBCOL0, R1 66d3 0011 DECR R1 66d4 0379 0003 CMPI #3, R1 66d6 0205 0004 BLT @@x 66d8 02f9 02a0 ADDI #GROW, R1 66da 01c0 CLRR R0 66db 0248 MVO@ R0, R1 0x66dc @@x ; SETISR DIEDISR 66dc 0004 016c 0244 CALL _SETISR 66df 670e DECLE DIEDISR 66e0 01c0 CLRR R0 ; \ 66e1 0240 0345 MVO R0, SONG ; |- Nuke any playing sounds and music 66e3 0240 013b MVO R0, DEFSCO ; | and deferred score 66e5 0004 0168 0324 CALL SFXINIT ; / 66e8 0004 0168 035c CALL PLAYSFX 66eb 000a DECLE FXDIED ; EIS 66ec 0004 015d 0115 JSRE R5, UPSPA 66ef 01c0 CLRR R0 66f0 0340 0197 @@diedspin: CMP SFXTBL+6, R0 ; hack hack hack hack 66f2 022c 0003 BNEQ @@diedspin ; Now just wait a sec 66f4 02b9 0078 MVII #120, R1 66f6 0241 016f MVO R1, WTIMER 66f8 0340 016f @@diedwait: CMP WTIMER, R0 66fa 022c 0003 BNEQ @@diedwait 66fc 0280 0138 MVI LIVES, R0 66fe 0378 00ff CMPI #$FF, R0 6700 0204 0005 BEQ @@over ; CALL RSTLVL 6702 0004 0168 0104 CALL INITLVL.1 6705 0220 00e6 B @@again 6707 0004 0168 0153 @@over: CALL GAMEOVER ; Do the 'Game Over' sequence. 670a 0223 00f3 BPL @@do_continue ; CALL WAIT ; DECLE 60 670c 0220 0181 B @@title ; SETISR RESTART ; DECR PC ; Loop back to title screen after re-init ENDP 0x670e DIEDISR PROC 670e 0280 02f0 MVI SDAT, R0 ; \ 6710 03b8 feff ANDI #$FEFF, R0 ; | 6712 0240 02f0 MVO R0, SDAT ; |_ Clear INTR bits on tank. 6714 0280 02f1 MVI SDAT+1, R0 ; | 6716 03b8 feff ANDI #$FEFF, R0 ; | 6718 0240 02f1 MVO R0, SDAT+1 ; / 671a 0280 0300 MVI SDAT+$10, R0 671c 0081 MOVR R0, R1 671d 03b8 fff8 ANDI #$FFF8, R0 671f 0009 INCR R1 6720 03b9 0007 ANDI #$7, R1 6722 01c8 XORR R1, R0 6723 0240 0300 MVO R0, SDAT+$10 6725 0280 0301 MVI SDAT+$11, R0 6727 0081 MOVR R0, R1 6728 03b8 eff8 ANDI #$EFF8, R0 672a 0009 INCR R1 672b 03b9 0007 ANDI #$7, R1 672d 01c8 XORR R1, R0 672e 0240 0301 MVO R0, SDAT+$11 6730 02bc 02f0 MVII #SDAT, R4 6732 01ed CLRR R5 6733 02ba 0008 MVII #8, R2 6735 02a0 @@l MVI@ R4, R0 6736 0268 MVO@ R0, R5 6737 02a0 MVI@ R4, R0 6738 0268 MVO@ R0, R5 6739 02a0 MVI@ R4, R0 673a 0268 MVO@ R0, R5 673b 0012 DECR R2 673c 022c 0008 BNEQ @@l 673e 01c0 CLRR R0 673f 0268 MVO@ R0, R5 ; 6740 0268 MVO@ R0, R5 ; clear tank collision bits 6741 0240 0020 MVO R0, $20 6743 0004 016c 01fb CALL UPSND 6746 02bd 6e16 MVII #MISCISR.1, R5 6748 0220 0abd B UPMUX ENDP ;; ======================================================================== ;; ;; COLOR SCHEMEs ;; ;; ======================================================================== ;; 674a 1001 0002 1006 MNTNCLR DECLE X_CYN, X_RED, X_YGR, X_TAN, X_CYN 674d 0003 1001 674f 0003 1000 0005 CRATCLR DECLE X_TAN, X_GRY, X_GRN, X_YEL, X_TAN 6752 0006 0003 6754 0006 0003 0006 CITYCLR DECLE X_YEL, X_TAN, X_YEL MACRO pack_cstk(a,b,c,d) (%a%)+(%b% SHL 4)+(%c% SHL 8) + (%d% SHL 12) ENDM ;; ======================================================================== ;; ;; Color Scheme ;; ;; ======================================================================== ;; ;CSTKCLR DECLE pack_cstk(C_BLK, C_CYN, C_TAN, C_GRY) ; moon crater 6757 8390 CSTKCLR DECLE (C_BLK)+(C_CYN SHL 4)+(C_TAN SHL 8) + (C_GRY SHL 12) ; moon crater ; DECLE pack_cstk(C_BLK, C_CYN, C_YEL, C_GRY) ; moon city 6758 8690 DECLE (C_BLK)+(C_CYN SHL 4)+(C_YEL SHL 8) + (C_GRY SHL 12) ; moon city ; DECLE pack_cstk(C_BLK, C_RED, C_GRY, C_GRY) ; mars crater 6759 8820 DECLE (C_BLK)+(C_RED SHL 4)+(C_GRY SHL 8) + (C_GRY SHL 12) ; mars crater ; DECLE pack_cstk(C_BLK, C_RED, C_TAN, C_GRY) ; mars city 675a 8320 DECLE (C_BLK)+(C_RED SHL 4)+(C_TAN SHL 8) + (C_GRY SHL 12) ; mars city ; DECLE pack_cstk(C_BLK, C_YGR, C_GRN, C_GRY) ; pluto crater 675b 85e0 DECLE (C_BLK)+(C_YGR SHL 4)+(C_GRN SHL 8) + (C_GRY SHL 12) ; pluto crater ; DECLE pack_cstk(C_BLK, C_YGR, C_YEL, C_GRY) ; pluto city 675c 86e0 DECLE (C_BLK)+(C_YGR SHL 4)+(C_YEL SHL 8) + (C_GRY SHL 12) ; pluto city ; DECLE pack_cstk(C_BLK, C_TAN, C_YEL, C_GRY) ; mercury crater 675d 8630 DECLE (C_BLK)+(C_TAN SHL 4)+(C_YEL SHL 8) + (C_GRY SHL 12) ; mercury crater ; DECLE pack_cstk(C_GRN, C_DGR, C_YGR, C_GRY) ; mercury underground 675e 8e45 DECLE (C_GRN)+(C_DGR SHL 4)+(C_YGR SHL 8) + (C_GRY SHL 12) ; mercury underground ; DECLE pack_cstk(C_BLK, C_CYN, C_TAN, C_BLK) ; title screen ; Underground scene for Mercury 0x5 X_RKBG EQU X_GRN 0x5 C_RKBG EQU C_GRN 0x1006 X_STAL EQU X_YGR 0xe C_STAL EQU C_YGR ;; ======================================================================== ;; ;; DRAWGAME ;; ;; ;; ;; This intends to be a rewrite of the DRAWGAME function from LunarMP. ;; ;; Rather than using long-hand tables, it should compute the cards going ;; ;; to the display, since drawing the display isn't terribly time critical. ;; ;; ;; ;; It needs to understand color schemes as well as the three screen ;; ;; layouts: Craters, City, and Underground. ;; ;; ======================================================================== ;; 0x675f DRAWGAME PROC 675f 0275 PSHR R5 ;; ------------------------------------------------------------ ;; ;; Shut off stuff for a bit. ;; ;; ------------------------------------------------------------ ;; 6760 0280 0119 MVI EMODE, R0 6762 0240 0178 MVO R0, TMP 6764 01c0 CLRR R0 6765 0240 0119 MVO R0, EMODE ;; ------------------------------------------------------------ ;; ;; Initialize the color stack. ;; ;; ------------------------------------------------------------ ;; ; SETISR SETCSG ; request colorstack update for game 6767 0004 016c 0244 CALL _SETISR 676a 68dc DECLE SETCSG ; request colorstack update for game 676b 0004 016d 0227 JSRE R5, WAIT 676e 0001 DECLE 1 ;; ------------------------------------------------------------ ;; ;; Go incognito for a moment and start building the screen. ;; ;; ------------------------------------------------------------ ;; 676f 0003 DIS 6770 0004 0158 03e4 CALL RSGGB ; Reset good guy bullets. 6773 0004 016c 02ed CALL FILLZERO.lp ; \ 6776 0019 DECLE 25 ; |- nuke any remaining bad guys 6777 011c DECLE BGMPTBL ; / 6778 0004 016c 02ed CALL FILLZERO.lp ; \ 677b 000a DECLE 10 ; |- and their sprites 677c 0140 DECLE SPAT ; / 677d 0004 016c 02f4 CALL CLRSCR ; nuke the display. ;; ------------------------------------------------------------ ;; ;; For all scenes other than underground, twinkle some stars. ;; ;; ------------------------------------------------------------ ;; 6780 0280 010c MVI INCITY, R0 6782 0378 0002 CMPI #2, R0 6784 0204 000a BEQ @@notwinkle 6786 02b8 0064 MVII #100, R0 0x6788 @@twloop 6788 0270 PSHR R0 6789 0004 015c 0238 CALL TWINKLE 678c 02b0 PULR R0 678d 0010 DECR R0 678e 022c 0007 BNEQ @@twloop 0x6790 @@notwinkle ;; ------------------------------------------------------------ ;; ;; Draw initial status bar graphics. ;; ;; ------------------------------------------------------------ ;; ; CALL PRINT.FLS ; DECLE gen_cstk_card(0, GRAM, Black, NoAdvance) ; DECLE disp_ptr(11, 0) ; ;01234567890123456789 ; STRING " #$ : ", 0 ; "Time" and "Pt" 6790 02b8 0820 MVII #TMCARDx, R0 ; MVO R0, disp_ptr(11, 15) 6792 0240 02eb MVO R0, ($200 + 11*20 + 15) ; MVII #PTCARDx, R0 ; MVO R0, disp_ptr(11, 17) ;; ------------------------------------------------------------ ;; ;; Draw the display elements. Logic: ;; ;; ;; ;; Draw the underground scene if INCITY == 2, else ;; ;; (draw the crater strip if INCITY = 0, or ;; ;; draw the city strip if INCITY = 1), and then ;; ;; draw the upper mountain chain. ;; ;; ------------------------------------------------------------ ;; 6794 0281 010c MVI INCITY, R1 ; \ 6796 0379 0002 CMPI #2, R1 ; |- Underground gets special 6798 0204 0085 BEQ @@underground ; / treatment. 679a 02b8 0840 MVII #CCARD*8+$0800, R0 ; City/crater starting card # 679c 0089 TSTR R1 ; \__ decide whether to draw the 679d 020c 001c BNEQ @@in_city ; / crater or city strips. ;; ------------------------------------------------------------ ;; ;; Draw the crater strip in selected color scheme. ;; ;; ------------------------------------------------------------ ;; 679f 0281 013a MVI COURSE, R1 ; \ 67a1 03b9 0007 ANDI #7, R1 67a3 0061 SLR R1, 1 ; |_ Adjust color for course 67a4 02f9 674f ADDI #CRATCLR, R1 ; | 67a6 02c8 ADD@ R1, R0 ; / 67a7 0082 MOVR R0, R2 ; 67a8 02fa 0038 ADDI #7*8, R2 ; City/crater ending card # 67aa 02bc 028c MVII #MROW, R4 67ac 02bb 0014 MVII #20, R3 0x67ae @@crat_loop: 67ae 0262 MVO@ R2, R4 ; display card 67af 033a 0008 SUBI #8, R2 ; move to prev card # 67b1 0142 CMPR R0, R2 ; \ 67b2 020d 0002 BGE @@crat_ok ; |- wrap from 0 back to 7 as needed 67b4 02fa 0040 ADDI #64, R2 ; / 67b6 0013 @@crat_ok: DECR R3 ; 67b7 022c 000a BNEQ @@crat_loop ; loop it! 67b9 0200 002f B @@done_mid ;; ------------------------------------------------------------ ;; ;; Draw the city strip in selected color scheme. ;; ;; ------------------------------------------------------------ ;; 0x67bb @@in_city: 67bb 0281 013a MVI COURSE, R1 ; \ 67bd 0061 SLR R1, 1 ; |_ Adjust color for course 67be 02f9 6754 ADDI #CITYCLR, R1 ; | 67c0 02c8 ADD@ R1, R0 ; / 67c1 0082 MOVR R0, R2 ; 67c2 02fa 0038 ADDI #7*8, R2 ; City/crater ending card # 67c4 02bc 0278 MVII #CROW, R4 67c6 02bd 028c MVII #CROW + 20, R5 67c8 02bb 67ea MVII #@@done_mid, R3 ; will reuse this loop as a func below 67ca 0200 0004 B @@city_fill_start 0x67cc @@city_fill: 67cc 00ab MOVR R5, R3 67cd 00a5 MOVR R4, R5 67ce 02fd 0014 ADDI #20, R5 0x67d0 @@city_fill_start: 67d0 02b8 0005 MVII #5, R0 0x67d2 @@city_fill1 67d2 0273 PSHR R3 67d3 02bb 0008 MVII #8, R3 0x67d5 @@city_loop: 67d5 026a MVO@ R2, R5 ; \ 67d6 011a SUBR R3, R2 ; |_ column 0 mod 4 67d7 0262 MVO@ R2, R4 ; | 67d8 011a SUBR R3, R2 ; / 67d9 026a MVO@ R2, R5 ; \ 67da 011a SUBR R3, R2 ; |_ column 1 mod 4 67db 0262 MVO@ R2, R4 ; | 67dc 011a SUBR R3, R2 ; / 67dd 026a MVO@ R2, R5 ; \ 67de 011a SUBR R3, R2 ; |_ column 2 mod 4 67df 0262 MVO@ R2, R4 ; | 67e0 011a SUBR R3, R2 ; / 67e1 026a MVO@ R2, R5 ; \ 67e2 011a SUBR R3, R2 ; |_ column 3 mod 4 67e3 0262 MVO@ R2, R4 ; | 67e4 02fa 0038 ADDI #56, R2 ; / 67e6 0010 DECR R0 67e7 022c 0013 BNEQ @@city_loop 67e9 02b7 PULR PC ; "return" 0x67ea @@done_mid: ;; ------------------------------------------------------------ ;; ;; Fix up color stack on city after drawing it. ;; ;; ------------------------------------------------------------ ;; 67ea 0280 0278 MVI TROW+60,R0 ; 10 67ec 03f8 2000 XORI #$2000, R0 ; 8 67ee 0240 0278 MVO R0, TROW+60 ; 11 ;; ------------------------------------------------------------ ;; ;; Draw the mountain chain in selected color scheme. ;; ;; ------------------------------------------------------------ ;; 67f0 02ba 09f8 MVII #(TCARD + 7)*8 + $800, R2 ; 67f2 0281 013a MVI COURSE, R1 ; \ 67f4 03b9 0007 ANDI #7, R1 67f6 0061 SLR R1, 1 ; |_ Adjust color for course 67f7 02f9 674a ADDI #MNTNCLR, R1 ; | 67f9 02ca ADD@ R1, R2 ; / 67fa 0091 MOVR R2, R1 67fb 02bc 023c MVII #TROW, R4 67fd 0004 0164 03cc CALL @@city_fill ; Reuse the city_loop to fill mountain 6800 02bc 0264 MVII #TROW + 40, R4 6802 0339 0020 SUBI #4*8, R1 6804 008a MOVR R1, R2 6805 02bd 6819 MVII #@@finish_mntn, R5 ; will reuse like a function below 0x6807 @@mntn_fill: 6807 02b8 0005 MVII #5, R0 0x6809 @@mntn_loop: 6809 0262 MVO@ R2, R4 680a 033a 0010 SUBI #16, R2 680c 0262 MVO@ R2, R4 680d 02fa 0030 ADDI #48, R2 680f 0262 MVO@ R2, R4 6810 033a 0010 SUBI #16, R2 6812 0262 MVO@ R2, R4 6813 033a 0010 SUBI #16, R2 6815 0010 DECR R0 6816 022c 000e BNEQ @@mntn_loop 6818 00af JR R5 0x6819 @@finish_mntn: 6819 02b8 2000 MVII #$2000, R0 ; \ _ Color stack advance for 681b 0240 02a0 MVO R0, GROW ; / ground 681d 0200 0037 B @@done_field ;; ------------------------------------------------------------ ;; ;; Draw the underground scene. ;; ;; ------------------------------------------------------------ ;; 0x681f @@underground: 681f 02ba 1856 MVII #(CCARD+2)*8 + $800 + X_STAL, R2 ; stalagtites/stalagmites 6821 02bc 0200 MVII #STROW1, R4 6823 0004 0168 0007 CALL @@mntn_fill 6826 02ba 085d MVII #(CCARD+3)*8 + $800 + X_RKBG, R2 ; stalagtites/stalagmites 6828 02bc 028c MVII #STROW2, R4 682a 0004 0168 0007 CALL @@mntn_fill 682d 02ba 09fd MVII #(TCARD+7)*8 + $800 + X_RKBG, R2 ; background rocks 682f 02bc 0264 MVII #RKROW + 4*20, R4 ; last 2 rows 6831 0004 0164 03cc CALL @@city_fill ; fill 2 rows of background rocks 6834 02ba 09fd MVII #(TCARD+7)*8 + $800 + X_RKBG, R2 ; background rocks 6836 02bc 0214 MVII #RKROW, R4 ; first 2 rows 6838 0004 0164 03cc CALL @@city_fill ; fill 2 rows of background rocks 683b 02ba 09d5 MVII #(TCARD+2)*8 + $800 + X_RKBG, R2 ; background rocks 683d 02bc 023c MVII #RKROW + 40, R4 ; 683f 0004 0168 0007 CALL @@mntn_fill ; fill 3rd row 6842 02ba 09dd MVII #(TCARD+3)*8 + $800 + X_RKBG, R2 ; background rocks 6844 0004 0168 0007 CALL @@mntn_fill ; fill 4th row ;; ------------------------------------------------------------ ;; ;; Fixup color stack for background scene. ;; ;; ------------------------------------------------------------ ;; 6847 02b8 2000 MVII #$2000, R0 6849 03c0 0214 XOR RKROW, R0 684b 0240 0214 MVO R0, RKROW 684d 02b8 2000 MVII #$2000, R0 684f 03c0 028c XOR STROW2, R0 6851 0240 028c MVO R0, STROW2 6853 01c0 CLRR R0 6854 0240 02a0 MVO R0, GROW ;; ------------------------------------------------------------ ;; ;; Now draw the remaining invariant portions of the screen. ;; ;; The "ground row" -- e.g. where the buggy drives. ;; ;; ------------------------------------------------------------ ;; 0x6856 @@done_field: 6856 0004 016c 02ef CALL FILLMEM.vlp 6859 0001 0013 02a1 DECLE 1, 19, GROW+1 685c 0004 016c 02ef CALL FILLMEM.vlp 685f 18da 0014 02b4 DECLE GCARDx, 20, GROW+20 6862 0004 016c 02ef CALL FILLMEM.vlp 6865 1952 DECLE $0800 + (74-32)*8 + X_GRND 6866 0013 DECLE 19 6867 02c9 DECLE GROW + 41 6868 02b8 3952 MVII #$2800 + (74-32)*8 + X_GRND, R0 ; \ Color stack adv. for 686a 0240 02c8 MVO R0, GROW + 40 ; / status line ;; ------------------------------------------------------------ ;; ;; Ok, ready to show the world, kinda. Mark the engine as ;; ;; busy so that we can load the GRAM. We will set our ISR ;; ;; such that the display won't enable. ;; ;; ------------------------------------------------------------ ;; 686c 02b8 0001 MVII #1, R0 686e 0240 016c MVO R0, EBSY 6870 0280 0178 MVI TMP, R0 6872 0240 0119 MVO R0, EMODE ;; ------------------------------------------------------------ ;; ;; Ok, disable interrupts again and set up the scroll engine ;; ;; internal variables. ;; ;; ------------------------------------------------------------ ;; 6874 0004 01d6 038e JSRD R5, INITMEM.0 ; INIT EBSY, 0 6877 816c DECLE _init_const OR EBSY ; INIT FDROP, 0 6878 8118 DECLE _init_const OR FDROP ; INIT GPHASE, $80 6879 033d DECLE _init_const OR GPHASE ; INIT TPHASE, 0 687a 833f DECLE _init_const OR TPHASE ; INIT MPHASE, 0 687b 833e DECLE _init_const OR MPHASE ; INIT PGCARD, $FF 687c 2908 DECLE _init_const OR PGCARD ; INIT PGPHAS, $FF 687d 2905 DECLE _init_const OR PGPHAS ; INIT PTCARD, $FF 687e 281a DECLE _init_const OR PTCARD ; INIT PMPHAS, $FF 687f 2904 DECLE _init_const OR PMPHAS ; INIT_DONE 6880 0000 DECLE 0 0x6881 @@xxx: ;; ------------------------------------------------------------ ;; ;; Ok, let everything settle out, so that when we turn on the ;; ;; lights, hopefully the right GRAM images are all loaded. ;; ;; ------------------------------------------------------------ ;; 6881 0004 0168 008d CALL SETGFX 6884 02b8 0001 MVII #1, R0 ; Clear any lingering death. 6886 0240 0135 MVO R0, MOBHIT ; Do it after SETGFX. ;; ------------------------------------------------------------ ;; ;; Restore the normal engine and let 'er rip! ;; ;; ------------------------------------------------------------ ;; ; SETISR ENGINE1 6888 0004 016c 0244 CALL _SETISR 688b 537c DECLE ENGINE1 688c 02b7 PULR PC ENDP ;; ======================================================================== ;; ;; SETGFX Load up mid and top mountain graphics for game display. ;; ;; ======================================================================== ;; 0x688d SETGFX PROC 688d 02b8 f700 MVII #ROCKCRAT, R0 688f 0240 0342 MVO R0, RPTR ;; ------------------------------------------------------------ ;; ;; The 'INCITY' flag toggles us between the three layouts. ;; ;; The 'COURSE' flag indicates which color scheme and graphic ;; ;; set to use. ;; ;; ------------------------------------------------------------ ;; 6891 0280 010c MVI INCITY, R0 6893 0080 TSTR R0 6894 0204 000e BEQ @@start_crater 0x6896 @@start_city: 6896 02b9 00e0 MVII #$E0, R1 ; update mask for cities 6898 0282 013a MVI COURSE, R2 ;\ 689a 0062 SLR R2, 1 ; |_load city graphic ptr for course 689b 02fa 68a0 ADDI #@@cities, R2 ; | 689d 0290 MVI@ R2, R0 ;/ 689e 0200 0008 B @@start_cont 68a0 00f2 00f3 @@cities: DECLE MIDCITY1 SHR 8, MIDCITY2 SHR 8 68a2 00f4 00f5 DECLE MIDCITY3 SHR 8, MIDCITY4 SHR 8 IF ((MIDCITY1 OR MIDCITY2 OR MIDCITY3 OR MIDCITY4) AND $FF) <> 0 ERR "MIDCITY must be 256-word aligned" ENDI IF ((MIDMOUNT) AND $FF) <> 0 ERR "MIDMOUNT must be 256-word aligned" ENDI 0x68a4 @@start_crater: 68a4 02b8 00f1 MVII #MIDMOUNT SHR 8, R0 ; Stalagtite/stalagmites 68a6 02b9 00c0 MVII #$C0, R1 ; update mask for craters 0x68a8 @@start_cont: 68a8 0240 0109 MVO R0, MIDGFX 68aa 0241 010a MVO R1, MIDMSK 68ac 0245 035e MVO R5, BGTTMP ; SETISR ENGINE1.1 68ae 0004 016c 0244 CALL _SETISR 68b1 537e DECLE ENGINE1.1 68b2 0280 0109 MVI MIDGFX, R0 68b4 0040 SWAP R0 68b5 0240 0340 MVO R0, MPTR 68b7 02b8 3840 MVII #MIDGR, R0 68b9 0240 0344 MVO R0, MGRAM 68bb 01c0 CLRR R0 68bc 0240 033c MVO R0, MGOFS 68be 0004 016d 0227 JSRE R5, WAIT 68c1 0001 DECLE 1 68c2 0003 DIS 68c3 02b8 f000 MVII #TOPMOUNT, R0 68c5 0283 010c MVI INCITY, R3 68c7 037b 0002 CMPI #2, R3 68c9 020c 0002 BNEQ @@asis 68cb 02b8 f600 MVII #ROCKBG, R0 68cd 0240 0340 @@asis: MVO R0, MPTR 68cf 02b8 39c0 MVII #TOPGR, R0 68d1 0240 0344 MVO R0, MGRAM 68d3 0004 016d 0227 JSRE R5, WAIT 68d6 0001 DECLE 1 68d7 01c0 CLRR R0 68d8 0240 0340 MVO R0, MPTR 68da 0287 035e MVI BGTTMP, PC ENDP ;; ======================================================================== ;; ;; SETCSG Sets up the color stack for the in-game sequences. ;; ;; ======================================================================== ;; 0x68dc SETCSG PROC 68dc 0280 0021 MVI $21, R0 ; set Color stack mode 68de 0281 010c MVI INCITY, R1 ; \ 68e0 0379 0001 CMPI #1, R1 ; | 68e2 0281 013a MVI COURSE, R1 ; |_ Get color scheme for course 68e4 0088 MOVR R1, R0 68e5 03b9 0006 ANDI #6, R1 ; SLR R1, 1 ; | ; RLC R1, 1 ; | 68e7 0029 ADCR R1 68e8 02f9 6757 ADDI #CSTKCLR, R1 ; | 68ea 0289 MVI@ R1, R1 ; / 68eb 0378 0008 CMPI #8, R0 ; \ 68ed 0205 0002 BLT @@ok ; |- black strip at bottom 68ef 03b9 0fff ANDI #$0FFF, R1 ; / of title screen 68f1 02bc 0028 @@ok MVII #CS0, R4 68f3 0261 MVO@ R1, R4 68f4 0065 SLR R1, 2 68f5 0065 SLR R1, 2 68f6 0261 MVO@ R1, R4 68f7 0065 SLR R1, 2 68f8 0065 SLR R1, 2 68f9 0261 MVO@ R1, R4 68fa 0065 SLR R1, 2 68fb 0065 SLR R1, 2 68fc 0261 MVO@ R1, R4 ; MVI FDROP, R0 ; INCR R0 ; MVO R0, FDROP 68fd 0200 0517 B MISCISR.wtimer ENDP ;__ INCLUDE "game/level.asm" IF (DEFINED SEEKKEYS) <> 0 ;; ======================================================================== ;; ;; World Checkpoint Table (used only for PRV/RST/NXTLVL). ;; ;; ======================================================================== ;; WCKPT PROC DECLE MOON_B.ckpt_0a, MOON_B.ckpt_0b, MOON_B.ckpt_0c DECLE MOON_B.ckpt_0d, MOON_B.ckpt_0e, MOON_B.ckpt_0f DECLE MOON_B.ckpt_0g, MOON_B.ckpt_0h, MOON_B.ckpt_0i DECLE MOON_B.ckpt_0j, MOON_B.ckpt_0k, MOON_B.ckpt_0l DECLE MOON_B.ckpt_0m, MOON_B.ckpt_0n, MOON_B.ckpt_0o DECLE MOON_B.ckpt_0p, MOON_B.ckpt_0q, MOON_B.ckpt_0r DECLE MOON_B.ckpt_0s, MOON_B.ckpt_0t, MOON_B.ckpt_0u DECLE MOON_B.ckpt_0v, MOON_B.ckpt_0w, MOON_B.ckpt_0x DECLE MOON_B.ckpt_0y, MOON_B.ckpt_0z DECLE MOON_C.ckpt_0a, MOON_C.ckpt_0b, MOON_C.ckpt_0c DECLE MOON_C.ckpt_0d, MOON_C.ckpt_0e, MOON_C.ckpt_0f DECLE MOON_C.ckpt_0g, MOON_C.ckpt_0h, MOON_C.ckpt_0i DECLE MOON_C.ckpt_0j, MOON_C.ckpt_0k, MOON_C.ckpt_0l DECLE MOON_C.ckpt_0m, MOON_C.ckpt_0n, MOON_C.ckpt_0o DECLE MOON_C.ckpt_0p, MOON_C.ckpt_0q, MOON_C.ckpt_0r DECLE MOON_C.ckpt_0s, MOON_C.ckpt_0t, MOON_C.ckpt_0u DECLE MOON_C.ckpt_0v, MOON_C.ckpt_0w, MOON_C.ckpt_0x DECLE MOON_C.ckpt_0y, MOON_C.ckpt_0z DECLE MARS_B.ckpt_0a, MARS_B.ckpt_0b, MARS_B.ckpt_0c DECLE MARS_B.ckpt_0d, MARS_B.ckpt_0e, MARS_B.ckpt_0f DECLE MARS_B.ckpt_0g, MARS_B.ckpt_0h, MARS_B.ckpt_0i DECLE MARS_B.ckpt_0j, MARS_B.ckpt_0k, MARS_B.ckpt_0l DECLE MARS_B.ckpt_0m, MARS_B.ckpt_0n, MARS_B.ckpt_0o DECLE MARS_B.ckpt_0p, MARS_B.ckpt_0q, MARS_B.ckpt_0r DECLE MARS_B.ckpt_0s, MARS_B.ckpt_0t, MARS_B.ckpt_0u DECLE MARS_B.ckpt_0v, MARS_B.ckpt_0w, MARS_B.ckpt_0x DECLE MARS_B.ckpt_0y, MARS_B.ckpt_0z DECLE MARS_C.ckpt_0a, MARS_C.ckpt_0b, MARS_C.ckpt_0c DECLE MARS_C.ckpt_0d, MARS_C.ckpt_0e, MARS_C.ckpt_0f DECLE MARS_C.ckpt_0g, MARS_C.ckpt_0h, MARS_C.ckpt_0i DECLE MARS_C.ckpt_0j, MARS_C.ckpt_0k, MARS_C.ckpt_0l DECLE MARS_C.ckpt_0m, MARS_C.ckpt_0n, MARS_C.ckpt_0o DECLE MARS_C.ckpt_0p, MARS_C.ckpt_0q, MARS_C.ckpt_0r DECLE MARS_C.ckpt_0s, MARS_C.ckpt_0t, MARS_C.ckpt_0u DECLE MARS_C.ckpt_0v, MARS_C.ckpt_0w, MARS_C.ckpt_0x DECLE MARS_C.ckpt_0y, MARS_C.ckpt_0z DECLE PLUT_B.ckpt_0a, PLUT_B.ckpt_0b, PLUT_B.ckpt_0c DECLE PLUT_B.ckpt_0d, PLUT_B.ckpt_0e, PLUT_B.ckpt_0f DECLE PLUT_B.ckpt_0g, PLUT_B.ckpt_0h, PLUT_B.ckpt_0i DECLE PLUT_B.ckpt_0j, PLUT_B.ckpt_0k, PLUT_B.ckpt_0l DECLE PLUT_B.ckpt_0m, PLUT_B.ckpt_0n, PLUT_B.ckpt_0o DECLE PLUT_B.ckpt_0p, PLUT_B.ckpt_0q, PLUT_B.ckpt_0r DECLE PLUT_B.ckpt_0s, PLUT_B.ckpt_0t, PLUT_B.ckpt_0u DECLE PLUT_B.ckpt_0v, PLUT_B.ckpt_0w, PLUT_B.ckpt_0x DECLE PLUT_B.ckpt_0y, PLUT_B.ckpt_0z DECLE PLUT_C.ckpt_0a, PLUT_C.ckpt_0b, PLUT_C.ckpt_0c DECLE PLUT_C.ckpt_0d, PLUT_C.ckpt_0e, PLUT_C.ckpt_0f DECLE PLUT_C.ckpt_0g, PLUT_C.ckpt_0h, PLUT_C.ckpt_0i DECLE PLUT_C.ckpt_0j, PLUT_C.ckpt_0k, PLUT_C.ckpt_0l DECLE PLUT_C.ckpt_0m, PLUT_C.ckpt_0n, PLUT_C.ckpt_0o DECLE PLUT_C.ckpt_0p, PLUT_C.ckpt_0q, PLUT_C.ckpt_0r DECLE PLUT_C.ckpt_0s, PLUT_C.ckpt_0t, PLUT_C.ckpt_0u DECLE PLUT_C.ckpt_0v, PLUT_C.ckpt_0w, PLUT_C.ckpt_0x DECLE PLUT_C.ckpt_0y, PLUT_C.ckpt_0z DECLE MERC_B.ckpt_0a, MERC_B.ckpt_0b, MERC_B.ckpt_0c DECLE MERC_B.ckpt_0d, MERC_B.ckpt_0e, MERC_B.ckpt_0f DECLE MERC_B.ckpt_0g, MERC_B.ckpt_0h, MERC_B.ckpt_0i DECLE MERC_B.ckpt_0j, MERC_B.ckpt_0k, MERC_B.ckpt_0l DECLE MERC_B.ckpt_0m, MERC_B.ckpt_0n, MERC_B.ckpt_0o DECLE MERC_B.ckpt_0p, MERC_B.ckpt_0q, MERC_B.ckpt_0r DECLE MERC_B.ckpt_0s, MERC_B.ckpt_0t, MERC_B.ckpt_0u DECLE MERC_B.ckpt_0v, MERC_B.ckpt_0w, MERC_B.ckpt_0x DECLE MERC_B.ckpt_0y, MERC_B.ckpt_0z DECLE MERC_C.ckpt_0a, MERC_C.ckpt_0b, MERC_C.ckpt_0c DECLE MERC_C.ckpt_0d, MERC_C.ckpt_0e, MERC_C.ckpt_0f DECLE MERC_C.ckpt_0g, MERC_C.ckpt_0h, MERC_C.ckpt_0i DECLE MERC_C.ckpt_0j, MERC_C.ckpt_0k, MERC_C.ckpt_0l DECLE MERC_C.ckpt_0m, MERC_C.ckpt_0n, MERC_C.ckpt_0o DECLE MERC_C.ckpt_0p, MERC_C.ckpt_0q, MERC_C.ckpt_0r DECLE MERC_C.ckpt_0s, MERC_C.ckpt_0t, MERC_C.ckpt_0u DECLE MERC_C.ckpt_0v, MERC_C.ckpt_0w, MERC_C.ckpt_0x DECLE MERC_C.ckpt_0y, MERC_C.ckpt_0z ENDP ;; ======================================================================== ;; ;; PRVLVL: Restart the current level. ;; ;; ======================================================================== ;; PRVLVL PROC MVI POINT, R0 SUBI #8, R0 BMI RSTLVL MVO R0, POINT ; fallthru ;; ======================================================================== ;; ;; RSTLVL: Restart the current level. ;; ;; ======================================================================== ;; RSTLVL PSHR R5 PSHR R1 CALL INITLVL.1 MVI POINT, R0 MVII #@@done_redraw, R5 CMPI #5*8, R0 BLT TOCRATER.1 CMPI #10*8, R0 BLT TOCITY.1 CMPI #15*8, R0 BLT TOCRATER.1 CMPI #20*8, R0 BLT TOCITY.1 B TOCRATER.1 @@done_redraw MVI POINT, R1 ANDI #$F8, R1 SLR R1, 2 SLR R1, 1 MVI COURSE, R0 ; SLL R0, 1 ; ADDR R0, R1 ; + *2 SLL R0, 2 ; ADDR R0, R1 ; + *8 SLL R0, 1 ; ADDR R0, R1 ; + *16 ADDI #WCKPT, R1 MVI@ R1, R0 MVO R0, RCIDX MVO R0, RCLVL SWAP R0 MVO R0, RCLVL+1 CLRR R0 MVO R0, RCCNT PULR R1 PULR PC ENDP ;; ======================================================================== ;; ;; NXTLVL: Skip forward to the next level. ;; ;; ======================================================================== ;; NXTLVL PROC MVI POINT, R0 ADDI #8, R0 CMPI #26*8, R0 BGE RSTLVL MVO R0, POINT B RSTLVL ENDP ENDI ;; ======================================================================== ;; ;; INITLVL Initialize the level in preparation for the game. ;; ;; ======================================================================== ;; 0x68ff INITLVL PROC 68ff 01c0 CLRR R0 6900 0240 0160 MVO R0, RCCNT 6902 0240 0139 MVO R0, POINT 6904 01c0 @@1: CLRR R0 6905 0240 0166 MVO R0, LMCNT 6907 0240 011a MVO R0, CUENUM 6909 0240 016e MVO R0, SPINB 690b 0281 013a MVI COURSE, R1 690d 02f9 d349 ADDI #WINDEX,R1 690f 0289 MVI@ R1, R1 6910 0241 0338 MVO R1, RCIDX 6912 02b8 0001 MVII #1, R0 6914 0240 0135 MVO R0, MOBHIT 6916 0220 0d33 B RSGGB ; reset GGBs and return ENDP 0x6918 TOCRATER PROC 6918 0280 010c MVI INCITY, R0 691a 0080 TSTR R0 691b 0204 0005 BEQ @@done 0x691d @@1: 691d 01c0 CLRR R0 691e 0240 010c MVO R0, INCITY 6920 0220 01c2 B DRAWGAME 6922 00af @@done: JR R5 ENDP 0x6923 TOCITY PROC 6923 0280 010c MVI INCITY, R0 6925 0080 TSTR R0 6926 020c 000d BNEQ @@done 0x6928 @@1: 6928 02b8 0001 MVII #1, R0 692a 0281 013a MVI COURSE, R1 692c 0379 0006 CMPI #6, R1 692e 0209 0001 BNC @@not_mercury 6930 0008 INCR R0 0x6931 @@not_mercury 6931 0240 010c MVO R0, INCITY 6933 0220 01d5 B DRAWGAME 6935 00af @@done: JR R5 ENDP 0x6936 TOPLANET PROC 6936 033a 0003 SUBI #3, R2 6938 004a SLL R2, 1 6939 0342 013a CMP COURSE, R2 693b 0204 0015 BEQ @@done 693d 0242 013a MVO R2, COURSE 693f 037a 0006 CMPI #6, R2 6941 0209 0007 BNC @@not_mercury 6943 0281 010c MVI INCITY, R1 ; \ 6945 0049 SLL R1 ; |- make sure Mercury city 6946 0241 010c MVO R1, INCITY ; / maps to underground 6948 0220 01ea B DRAWGAME 0x694a @@not_mercury: 694a 0281 010c MVI INCITY, R1 ; \ 694c 0079 SARC R1 ; |_ make sure other planets don't 694d 0029 ADCR R1 ; | get underground. 694e 0241 010c MVO R1, INCITY ; / 6950 0220 01f2 B DRAWGAME 6952 00af @@done JR R5 ENDP ;__ INCLUDE "game/gameover.asm" ;; ======================================================================== ;; ;; GAMEOVER ;; ;; Guess what? It's game over time!! ;; ;; ======================================================================== ;; 0x6953 GAMEOVER PROC 6953 0275 PSHR R5 ; Clear all the sprites 6954 0004 015c 006f CALL SPINIT 6957 0004 016c 0270 CALL P16.FLS ; DECLE X_WHT, disp_ptr(6, 4) 695a 0007 027c DECLE X_WHT, ($200 + 6*20 + 4) ; S16 " Game Over " 695c 0050 DECLE _s16p 695d 093a DECLE _s16p 695e 2a6a DECLE _s16p 695f 7801 DECLE _s16p 6960 2ab2 DECLE _s16p 6961 0290 DECLE _s16p 6962 0004 016c 0038 CALL PLAY.mus 6965 fde0 DECLE M_OVER 6966 0004 016d 001b JSRE R5, WAIT_SONG1 6969 ffff DECLE $FFFF 696a 0004 016c 0227 CALL WAIT 696d 003c DECLE 60 696e 0004 016e 02f4 JSRD R5, CLRSCR ; SETISR CKPTISR 6971 0004 016c 0244 CALL _SETISR 6974 6546 DECLE CKPTISR 6975 0004 016d 0224 JSRE R5, WAIT1 ; set up color stack properly ahead of time 6978 0004 01d4 038e CALL INITMEM ; INIT TMP, 1 ; default to "yes" on continue 697b 8578 DECLE _init_const OR TMP ; INIT TMP+1, 1 ; highlight "yes" in blue 697c 8579 DECLE _init_const OR TMP+1 ; INIT TMP+2, 0 ; don't highlight "no" 697d 817a DECLE _init_const OR TMP+2 ; INIT_DONE 697e 0000 DECLE 0 ; SETISR CONTISR 697f 0004 016c 0244 CALL _SETISR 6982 6a1b DECLE CONTISR 6983 0004 016c 0224 CALL WAIT1 6986 0280 0137 MVI CONTS, R0 6988 0010 DECR R0 6989 020b 005f BMI @@nocont 698b 0240 0137 MVO R0, CONTS 698d 0004 0168 02ab CALL DISPFINAL ; DECLE disp_ptr(2, 0) 6990 0228 DECLE ($200 + 2*20 + 0) 6991 0004 0168 02b1 CALL DISPPEAK ; DECLE disp_ptr(4, 0) 6994 0250 DECLE ($200 + 4*20 + 0) 6995 0004 016c 0270 CALL P16.FLS ; DECLE X_WHT, disp_ptr(7, 5) 6998 0007 0291 DECLE X_WHT, ($200 + 7*20 + 5) ; S16 "Continue?" 699a 1841 DECLE _s16p 699b 727a DECLE _s16p 699c 4aa2 DECLE _s16p 699d aa72 DECLE _s16p 699e fa28 DECLE _s16p 699f 0004 016c 0270 CALL P16.FLS ; DECLE X_YEL, disp_ptr(9, 6) 69a2 0006 02ba DECLE X_YEL, ($200 + 9*20 + 6) ; S16 "Yes No" 69a4 c831 DECLE _s16p 69a5 9a2a DECLE _s16p 69a6 0000 DECLE _s16p 69a7 7972 DECLE _s16p 69a8 02b8 2000 MVII #$2000, R0 ; MVO R0, disp_ptr(9, 5) 69aa 0240 02b9 MVO R0, ($200 + 9*20 + 5) ; MVO R0, disp_ptr(9,10) 69ac 0240 02be MVO R0, ($200 + 9*20 + 10) ; MVO R0, disp_ptr(9,14) 69ae 0240 02c2 MVO R0, ($200 + 9*20 + 14) 69b0 0200 0003 B @@first 69b2 0004 0160 03d4 @@loop_yn CALL TINK 69b5 02bc 0178 @@first MVII #TMP, R4 69b7 02a0 MVI@ R4, R0 69b8 0260 MVO@ R0, R4 69b9 03f8 0001 XORI #1, R0 69bb 0260 MVO@ R0, R4 69bc 0004 016c 02fe @@keyl CALL MENUINP 69bf 0203 0010 BPL @@done_yn 69c1 01c9 CLRR R1 69c2 007c SARC R0, 2 69c3 0202 0004 BOV @@right 69c5 007c SARC R0, 2 69c6 022a 000b BNOV @@keyl 69c8 0009 @@left: INCR R1 69c9 0341 0178 @@right: CMP TMP, R1 69cb 0224 0010 BEQ @@keyl 69cd 0241 0178 MVO R1, TMP 69cf 0220 001e B @@loop_yn 69d1 0004 0160 03d4 @@done_yn CALL TINK 69d4 0004 016c 0256 CALL WAITNOKEY 69d7 0280 0178 MVI TMP, R0 69d9 0010 DECR R0 ; Continue flag in S. 69da 02b7 @@done PULR PC 0x69db FINALOVER 69db 0275 PSHR R5 69dc 0004 016e 02f4 JSRD R5, CLRSCR ; SETISR CKPTISR 69df 0004 016c 0244 CALL _SETISR 69e2 6546 DECLE CKPTISR 69e3 0004 016d 0224 JSRE R5, WAIT1 ; SETISR CONTISR 69e6 0004 016c 0244 CALL _SETISR 69e9 6a1b DECLE CONTISR 0x69ea @@nocont 69ea 0285 013a MVI COURSE, R5 69ec 03bd 0006 ANDI #$6, R5 69ee 02fd 61ab ADDI #CNAME, R5 69f0 02a8 MVI@ R5, R0 ; Get course name 69f1 02a9 MVI@ R5, R1 ; Get display offset 69f2 0041 SWAP R1 69f3 03b9 0007 ANDI #$7, R1 ; ADDI #disp_ptr(1, 4), R1 69f5 02f9 0218 ADDI #($200 + 1*20 + 4), R1 69f7 008c MOVR R1, R4 69f8 02b9 0007 MVII #X_WHT, R1 69fa 0004 016c 0277 CALL P16.R 69fd 0282 013a MVI COURSE, R2 69ff 02b8 619f MVII #BEGINNER, R0 6a01 007a SARC R2 6a02 0209 0002 BNC @@beg 6a04 02b8 61a5 MVII #CHAMPION, R0 ;@@beg MVII #disp_ptr(3, 2), R4 6a06 02bc 023e @@beg MVII #($200 + 3*20 + 2), R4 6a08 02b9 0007 MVII #X_WHT, R1 6a0a 0004 016c 0277 CALL P16.R 6a0d 0004 016c 0276 CALL P16.P 6a10 668b DECLE TXTCOURSE 6a11 0004 0168 02ab CALL DISPFINAL ; DECLE disp_ptr(6, 0) 6a14 0278 DECLE ($200 + 6*20 + 0) 6a15 0004 0168 02b1 CALL DISPPEAK ; DECLE disp_ptr(8, 0) 6a18 02a0 DECLE ($200 + 8*20 + 0) IF 0 MVII #WAITKEY.1, R5 ; Waitkey returns w/ S=1 B UPTSS ; but go there via UPTSS ELSE 6a19 0200 0431 B WAITKEY.1 ENDI ; CLRR R0 ; Continue flag in S. ; DECR R0 ; PULR PC ENDP 0x6a1b CONTISR PROC 6a1b 0280 0179 MVI TMP+1, R0 6a1d 0281 017a MVI TMP+2, R1 6a1f 01d2 CLRR R2 6a20 02bc 0028 MVII #$28, R4 6a22 0262 MVO@ R2, R4 6a23 0260 MVO@ R0, R4 6a24 0261 MVO@ R1, R4 6a25 0262 MVO@ R2, R4 6a26 0280 0021 MVI $21, R0 6a28 0200 03ea B MISCISR ENDP ;__ INCLUDE "game/score.asm" ;; ======================================================================== ;; ;; ADDSCORE Adds a constant, random value from table or register to ;; ;; the player's current score. ;; ;; ======================================================================== ;; 0x6a2a ADDSCORE PROC ;; ------------------------------------------------------------ ;; ;; For ADDSCORE.cst, score is in a constant after the CALL. ;; ;; ------------------------------------------------------------ ;; 6a2a 02a8 @@cst MVI@ R5, R0 ; Get constant from after call 6a2b 0200 000e B @@reg ;; ------------------------------------------------------------ ;; ;; For ADDSCORE.rnd, four different scores are packed in R0 ;; ;; and R1. Use the RSEED to pick one of the four scores. ;; ;; ------------------------------------------------------------ ;; 6a2d 0282 035f @@rnd MVI RSEED, R2 ; \ 6a2f 0052 RLC R2 ; |_ evolve random seed in case 6a30 002a ADCR R2 ; | multple RNDSCOs in one tic 6a31 0242 035f MVO R2, RSEED ; / 6a33 0052 RLC R2 ; \ 6a34 002f ADCR PC ; |- Pick R1/R0 based on MSB of 6a35 0088 MOVR R1, R0 ; / random number. 6a36 0052 RLC R2 ; \ 6a37 002f ADCR PC ; |- Pick upper/lower byte based 6a38 0040 SWAP R0 ; / on next bit 6a39 03b8 00ff ANDI #$FF, R0 0x6a3b @@reg ;; ------------------------------------------------------------ ;; ;; R0 contains # of points to award. Add it to the score. ;; ;; ------------------------------------------------------------ ;; 6a3b 0271 PSHR R1 6a3c 02bc 019d MVII #SCORE, R4 ; \ 6a3e 0001 SDBD ; |- Add to 16-bit score 6a3f 02e0 ADD@ R4, R0 ; / 6a40 008c MOVR R1, R4 6a41 02bc 019d MVII #SCORE, R4 ; \ 6a43 0260 MVO@ R0, R4 ; |_ Store it out. 6a44 0040 SWAP R0 ; | 6a45 0260 MVO@ R0, R4 ; / 6a46 0040 SWAP R0 ; Swap it back into normal order ;; ------------------------------------------------------------ ;; ;; R0 now contains the new score. See if it's a new peak ;; ;; score for this game, and a new high score all around. The ;; ;; code is a little funky because the peak and high checks ;; ;; are implemented by the same piece of code in a loop. We ;; ;; do this to save code size. ;; ;; ------------------------------------------------------------ ;; 0x6a47 @@peakagain 6a47 0001 SDBD ; \__ See if this is a new peak score 6a48 0360 CMP@ R4, R0 ; / so we can record it if it is. 6a49 0209 0010 BNC @@checkbon ;; ------------------------------------------------------------ ;; ;; Update peak score (first iter) and high score (2nd iter) ;; ;; ------------------------------------------------------------ ;; 6a4b 033c 0002 SUBI #2, R4 6a4d 0260 MVO@ R0, R4 6a4e 0040 SWAP R0 6a4f 0260 MVO@ R0, R4 6a50 0040 SWAP R0 ; Swap it back into normal order ;; ------------------------------------------------------------ ;; ;; If we got to here, loop a second time to check for high ;; ;; score. If we've already checked the high score, leave. ;; ;; ------------------------------------------------------------ ;; 6a51 037c 01a1 CMPI #TOPSCO, R4 ; Did we just check peak score? 6a53 020c 0006 BNEQ @@checkbon ; No, so exit 6a55 02c4 013a ADD COURSE, R4 ; \_ Yes. Index to this course's 6a57 02c4 013a ADD COURSE, R4 ; / high score and loop 6a59 0220 0013 B @@peakagain ;; ------------------------------------------------------------ ;; ;; See if the score crosses a new bonus threshold. If so, ;; ;; award the player a shiny new tank, and update the current ;; ;; bonus pointer to point to the next threshold. ;; ;; ------------------------------------------------------------ ;; 0x6a5b @@checkbon 6a5b 0281 013c MVI CURBON, R1 ; \ 6a5d 02f9 6aa3 ADDI #XTRATNK, R1 ; |_ See if score is above next 6a5f 0348 CMP@ R1, R0 ; | bonus threshold 6a60 0209 0009 BNC @@nobon ; / 6a62 0339 6aa2 SUBI #XTRATNK-1, R1 ; \ 6a64 0241 013c MVO R1, CURBON ; | 6a66 0280 0138 MVI LIVES, R0 ; |- Yes: Advance threshold and 6a68 0008 INCR R0 ; | increment life count 6a69 0240 0138 MVO R0, LIVES ; / 6a6b 02b8 0001 @@nobon MVII #1, R0 6a6d 0240 013f MVO R0, DOSCO 6a6f 02b1 PULR R1 6a70 00af JR R5 ENDP ;; ======================================================================== ;; ;; DEFSCORE Adds the deferred score to the current score. ;; ;; ======================================================================== ;; 0x6a71 DEFSCORE PROC 6a71 0280 0156 MVI LANDED, R0 ; \ 6a73 007c SARC R0, 2 ; |_ Only do this if we just 6a74 020a 00ef BNOV JRR5 ; | landed, and landed safely 6a76 0240 0156 MVO R0, LANDED ; / 0x6a78 @@1: ;; ------------------------------------------------------------ ;; ;; Scan for scorable jumpables to the left of us ;; ;; ------------------------------------------------------------ ;; 6a78 02bc 014c MVII #JMPSCO, R4 ; Array holding "passed it!" flags 6a7a 02bb 0320 MVII #SPXYP, R3 ; 6a7c 0280 013b MVI DEFSCO, R0 ; Get current deferred score 6a7e 0273 PSHR R3 6a7f 0272 PSHR R2 6a80 02a1 @@lp MVI@ R4, R1 ; \ 6a81 0089 TSTR R1 ; |- Is this one scoreable? 6a82 0204 000f BEQ @@nxt ; / No: Skip it 6a84 029a MVI@ R3, R2 ; \ 6a85 03ba 00ff ANDI #$FF, R2 ; |- Is it to the left of tank? 6a87 0342 015d CMP TXLO, R2 ; / 6a89 020e 0008 BGT @@nxt ; No: Skip it 6a8b 0014 DECR R4 ; \ 6a8c 01d2 CLRR R2 ; |- Mark it scored 6a8d 0262 MVO@ R2, R4 ; / ;@@sc ADDI #Score(500),R0 ; \ 6a8e 02f8 000a @@sc ADDI #((500)/50),R0 ; \ 6a90 0011 DECR R1 ; |- Add some multiple of 500 pts 6a91 0223 0004 BPL @@sc ; / 6a93 02fb 0002 @@nxt ADDI #2, R3 ; \ 6a95 037c 0151 CMPI #JMPSCO+5, R4 ; |- Loop over all 5 BGs 6a97 022c 0018 BNEQ @@lp ; / 6a99 02b2 PULR R2 6a9a 02b3 PULR R3 6a9b 0080 TSTR R0 ; Points for landing? 6a9c 0204 00c7 BEQ JRR5 ; No: Leave 6a9e 01c9 CLRR R1 ; \_ Clear previous deferred 6a9f 0241 013b MVO R1, DEFSCO ; / 6aa1 0220 0067 B ADDSCORE.reg ; Add it in! ENDP ;; ======================================================================== ;; ;; XTRATNK Boundaries at which the player gets an additional tank ;; ;; ======================================================================== ;; 0x6aa3 XTRATNK PROC ; DECLE Score(100000), Score(300000), Score(500000), Score(700000) 6aa3 07d0 1770 2710 DECLE ((100000)/50), ((300000)/50), ((500000)/50), ((700000)/50) 6aa6 36b0 6aa7 ffff DECLE $FFFF ENDP ;; ======================================================================== ;; ;; WBONUS Wave bonuses ;; ;; ======================================================================== ;; 0x6aa8 WBONUS PROC ; DECLE Score(5000), Score(8000), Score(10000) 6aa8 0064 00a0 00c8 DECLE ((5000)/50), ((8000)/50), ((10000)/50) ENDP ;; ======================================================================== ;; ;; DISPFINAL Display final score ;; ;; DISPPEAK Display peak score ;; ;; DISPSCORE Display current score ;; ;; DISPSCORE2 Display arbitrary score that's in R0 ;; ;; ======================================================================== ;; 0x6aab DISPFINAL PROC 6aab 02b8 6ae8 MVII #FINALTXT, R0 6aad 02bb 019d MVII #SCORE, R3 6aaf 0200 0004 B @@x 6ab1 02b8 6aef DISPPEAK MVII #PEAKTXT, R0 6ab3 02bb 019f MVII #PSCOR, R3 6ab5 02b9 0003 @@x MVII #C_TAN, R1 6ab7 02ac MVI@ R5, R4 6ab8 0275 PSHR R5 6ab9 0273 PSHR R3 6aba 0004 016c 0277 CALL P16.R ; MVII #gen_cstk_card(0, GRAM, White, NoAdvance), R3 6abd 02bb 0807 MVII #((0)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), R3 6abf 02b5 PULR R5 6ac0 0200 000c B @@y 6ac2 02ac DISPSCORE2 MVI@ R5, R4 6ac3 0275 PSHR R5 ; MVII #gen_cstk_card(0, GRAM, White, NoAdvance), R3 6ac4 02bb 0807 MVII #((0)*8 + __CSTK.GRAM_White + __CSTK.NoAdvance), R3 6ac6 0200 0008 B @@z 6ac8 02ac DISPSCORE MVI@ R5, R4 6ac9 0275 PSHR R5 6aca 02bd 019d MVII #SCORE, R5 ; MVII #gen_cstk_card(0, GRAM, Blue, NoAdvance), R3 6acc 02bb 0801 MVII #((0)*8 + __CSTK.GRAM_Blue + __CSTK.NoAdvance), R3 6ace 0001 @@y: SDBD 6acf 02a8 MVI@ R5, R0 0x6ad0 @@z: 6ad0 02ba 0080 MVII #$10 * 8, R2 6ad2 01da XORR R3, R2 6ad3 02fc 0006 ADDI #6, R4 6ad5 0262 MVO@ R2, R4 6ad6 0006 CLRC 6ad7 0070 RRC R0 6ad8 0209 0003 BNC @@zend 6ada 02ba 00a8 MVII #$15 * 8, R2 6adc 01da XORR R3, R2 6add 033c 0002 @@zend SUBI #2, R4 6adf 0262 MVO@ R2, R4 6ae0 02ba 0005 MVII #5, R2 6ae2 033c 0006 SUBI #6, R4 6ae4 0004 016c 02b5 CALL PRNUM16.z 6ae7 02b7 PULR PC ENDP ;FINALTXT S16 "Final score: " 0x6ae8 FINALTXT 6ae8 3061 DECLE _s16p 6ae9 724a DECLE _s16p 6aea 620a DECLE _s16p 6aeb 9802 DECLE _s16p 6aec 7a1a DECLE _s16p 6aed 2a92 DECLE _s16p 6aee 00d0 DECLE _s16p ;PEAKTXT S16 " Peak score: " 0x6aef PEAKTXT 6aef 0060 DECLE _s16p 6af0 2982 DECLE _s16p 6af1 5a0a DECLE _s16p 6af2 9802 DECLE _s16p 6af3 7a1a DECLE _s16p 6af4 2a92 DECLE _s16p 6af5 00d0 DECLE _s16p ;__ 0x957 _GAME.size EQU $ - _GAME 0x6af6 _SENG EQU $ INCLUDE "engine/sfxeng.asm" ;; ======================================================================== ;; ;; SFX Engine ;; ;; ;; ;; Sound effect updates are handled similarly to bad-guy updates. Each ;; ;; active effect has a thinker associated with it to update the effect. ;; ;; Each effect is allocated a single PSG channel, thereby making it easy ;; ;; to track PSG resource allocation. ;; ;; ;; ;; Space Patrol needs the following sounds, in order of decreasing ;; ;; priority: ;; ;; ;; ;; Jump (pri) ;; ;; Ding ;; ;; Fire ;; ;; Kill Alien ;; ;; Lg. Explosion ;; ;; Jump (aux) ;; ;; Sm. Explosion ;; ;; Space Plant* ;; ;; Alien Flight* ;; ;; ;; ;; [*] These are played only if ECS is attached. ;; ;; ;; ;; Note that there are two separate Jump sound effects. The Jump effect ;; ;; requires two channels, one for a descending high pitch, and one for ;; ;; a low pitch fixed tone. The former is a high-priority sound effect, ;; ;; whereas the latter can be canceled if another effect needs it. ;; ;; ;; ;; When the game requests a sound effect, the engine must find a slot ;; ;; that is free, or the lowest priority slot that's also lower prio than ;; ;; the requested effect to override. ;; ;; ;; ;; When the ECS is attached, the engine tracks four SFX slots. When it's ;; ;; not attached, the engine tracks two SFX slots. In either case, noise ;; ;; producing sound effects are limited to the first two slots to avoid ;; ;; conflict with the music's "click track." The engine never "migrates" ;; ;; sounds. Therefore, it's possible an explosion sound effect will get ;; ;; dropped even when a channel is available. To minimize this, the code ;; ;; prefers ECS channels over master component channels when the ECS is ;; ;; attached. Furthermore, some effects (plant, alien flight) should only ;; ;; play when the ECS is attached. ;; ;; ;; ;; Each effect gets a single byte of status storage that it can use to ;; ;; track where in the effect it is. Some effects, such as the Fire ;; ;; sound effect, won't need this byte. Others can use it for sleeping ;; ;; or whatever between stages of the effect. ;; ;; ;; ;; Each thinker gets invoked with R3 pointing to the base of the PSG ;; ;; channel, and R4 pointing to the status byte for the channel. The ;; ;; status bytes are stored interleaved with the thinker indices. ;; ;; ;; ;; Each effect gets initialized from a record containing the following ;; ;; information. ;; ;; ;; ;; -- Volume (1 - 15, or 0 if uses envelope) ;; ;; -- Tone period, or 0 if no tone ;; ;; -- Noise period / 2, or 0 if no noise ;; ;; -- Allowed channel bitmap ;; ;; ;; ;; Format: ;; ;; ;; ;; 15 8 7 4 3 0 ;; ;; +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; | State Byte Initializer | Noise Period | Channel Bitmap| ;; ;; +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; ;; ;; 15 12 11 0 ;; ;; +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; | Initial Vol | Initial Tone Period | ;; ;; +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ;; ;; ;; ;; Note that thinker address could also be packed in this table, but ;; ;; net size savings would be minimal due to more complicated code. ;; ;; Also, the channel bitmap contains the ECS channels in bits 1:0 and ;; ;; the master component channels in bits 3:2. ;; ;; ;; ;; ======================================================================== ;; ;; ======================================================================== ;; ;; UPSFX Called once per tick to update all active SFX. ;; ;; ======================================================================== ;; 0x6af6 UPSFX PROC 6af6 0280 019a MVI SFXBSY, R0 6af8 0080 TSTR R0 6af9 020c 006a BNEQ JRR5 6afb 0245 035e MVO R5, BGTTMP ; Save return address 6afd 02bc 0191 MVII #SFXTBL, R4 ; Thinker table 6aff 02bb 00f1 MVII #$0F1, R3 ; Utility: Point to PSG 6b01 02a1 @@loop: MVI@ R4, R1 ; \ 6b02 0011 DECR R1 ; |- 0 means no SFX 6b03 020b 0007 BMI @@next ; / non-zero is thinker # 6b05 0379 00fe CMPI #$FE, R1 ; Is it a disabled channel? 6b07 0204 0003 BEQ @@next ; Yes: Blow this popsicle stand 6b09 02f9 fb9c ADDI #SFXIND, R1 ; \_ dispatch to thinker. 6b0b 028f MVI@ R1, PC ; / 0x6b0c SFXRET 6b0c 000c @@next: INCR R4 ; Skip status byte 6b0d 000b INCR R3 6b0e 037b 00f3 CMPI #$0F3, R3 6b10 020c 0002 BNEQ @@not3 6b12 02bb 01f1 MVII #$1F1, R3 6b14 037b 01f3 @@not3 CMPI #$1F3, R3 6b16 022c 0016 BNEQ @@loop 6b18 0287 035e MVI BGTTMP, PC 6b1a 0014 SFXDIE DECR R4 ; Point back to sfx byte 6b1b 01c0 CLRR R0 6b1c 0260 MVO@ R0, R4 6b1d 02fb 000b ADDI #$B, R3 6b1f 0258 MVO@ R0, R3 6b20 033b 000b SUBI #$B, R3 6b22 0220 0017 B @@next ENDP ;; ======================================================================== ;; ;; SFXINIT Initialize the SFX structures. ;; ;; ======================================================================== ;; 0x6b24 SFXINIT PROC 6b24 0275 PSHR R5 6b25 02bc 0191 MVII #SFXTBL, R4 6b27 0280 4040 MVI ECSOK, R0 ; Zero if OK, 0xFFFF if not. 6b29 0260 MVO@ R0, R4 ; \_ 00 means channel available 6b2a 000c INCR R4 6b2b 0260 MVO@ R0, R4 ; / FF means not available 6b2c 000c INCR R4 6b2d 01c0 CLRR R0 6b2e 0260 MVO@ R0, R4 ; \_ Master component channels 6b2f 000c INCR R4 6b30 0260 MVO@ R0, R4 ; / are always available 6b31 0240 0199 MVO R0, SFXQ 6b33 0008 INCR R0 6b34 02bc 01f0 MVII #$1F0, R4 6b36 0260 MVO@ R0, R4 6b37 0260 MVO@ R0, R4 6b38 0260 MVO@ R0, R4 6b39 02bc 00f0 MVII #$0F0, R4 6b3b 0260 MVO@ R0, R4 6b3c 0260 MVO@ R0, R4 6b3d 0260 MVO@ R0, R4 6b3e 0010 DECR R0 6b3f 02bc 01f4 MVII #$1F4, R4 6b41 0260 MVO@ R0, R4 6b42 0260 MVO@ R0, R4 6b43 0260 MVO@ R0, R4 6b44 02bc 01fb MVII #$1FB, R4 6b46 0260 MVO@ R0, R4 6b47 0260 MVO@ R0, R4 6b48 0260 MVO@ R0, R4 6b49 02bc 00f4 MVII #$0F4, R4 6b4b 0260 MVO@ R0, R4 6b4c 0260 MVO@ R0, R4 6b4d 0260 MVO@ R0, R4 6b4e 02bc 00fb MVII #$0FB, R4 6b50 0260 MVO@ R0, R4 6b51 0260 MVO@ R0, R4 6b52 0260 MVO@ R0, R4 6b53 02b8 0037 MVII #$37, R0 6b55 0240 00f8 MVO R0, $0F8 6b57 02b8 0038 MVII #$38, R0 6b59 0240 01f8 MVO R0, $1F8 6b5b 02b7 PULR PC ENDP ;; ======================================================================== ;; ;; PLAYSFX Try to play a sound effect. ;; ;; Sound effect number pointed to by R5. ;; ;; ======================================================================== ;; 0x6b5c PLAYSFX PROC 6b5c 0270 PSHR R0 6b5d 02a8 MVI@ R5, R0 6b5e 0340 0199 @@1: CMP SFXQ, R0 6b60 0205 0002 BLT @@nope 6b62 0240 0199 MVO R0, SFXQ 6b64 02b0 @@nope: PULR R0 6b65 00af JRR5 JR R5 ENDP 0x6b66 DOPLAYSFX PROC 6b66 0275 PSHR R5 6b67 02b8 0001 MVII #1, R0 6b69 0240 019a MVO R0, SFXBSY 6b6b 0379 fbdd CMPI #SFXSAUC, R1 6b6d 020c 0002 BNEQ @@notsauc 6b6f 0240 019b MVO R0, SFXSTMP 0x6b71 @@notsauc: 6b71 008d @@again: MOVR R1, R5 ; Save priority 6b72 0049 SLL R1, 1 ; 6b73 02f9 fb84 ADDI #SFXINI-2, R1 6b75 0289 MVI@ R1, R1 ; Get channel allocation flags 6b76 03b9 000f ANDI #$F, R1 ; Mask away noise flags 6b78 02b8 00fe MVII #$00FE, R0 ; \_ current "best" is "none" 6b7a 01d2 CLRR R2 ; / with lower-than-lowest prio 6b7b 02bb 0191 MVII #SFXTBL, R3 ; Start at first ECS channel 6b7d 0200 0004 B @@loop 6b7f 0204 0012 @@skip: BEQ @@last 6b81 02fb 0002 @@next: ADDI #2, R3 6b83 0079 @@loop: SARC R1, 1 ; Can I alloc this channel? 6b84 0229 0006 BNC @@skip 6b86 035d CMP@ R3, R5 ; Is this same effect? 6b87 0204 0007 BEQ @@restart_sfx 6b89 0358 CMP@ R3, R0 ; Is this better than current? 6b8a 0225 000a BLT @@next ; If smaller, nope. 6b8c 009a MOVR R3, R2 ; Save ptr 6b8d 0298 MVI@ R3, R0 ; Save priority 6b8e 0220 000e B @@next 0x6b90 @@restart_sfx: ; CMPI #FXSAUC, R5 ; \_ don't restart SAUC effect ; BEQ @@done ; / 6b90 009a MOVR R3, R2 ; Make equal channel "best" 6b91 0200 0006 B @@doit 6b93 0092 @@last: TSTR R2 6b94 0204 0045 BEQ @@done ; No slot available for SFX 6b96 0145 CMPR R0, R5 ; Drop it if prev are higher prio 6b97 0205 0042 BLT @@done 6b99 0255 @@doit: MVO@ R5, R2 ; Write SFX # to slot to alloc 6b9a 00ed ADDR R5, R5 6b9b 02fd fb84 ADDI #SFXINI-2, R5 ; Now point to init table again 6b9d 02a8 MVI@ R5, R0 ; Get rest of first init word 6b9e 0040 SWAP R0 6b9f 000a INCR R2 6ba0 0250 MVO@ R0, R2 ; Write initializer 6ba1 0040 SWAP R0 6ba2 033a 0192 SUBI #SFXTBL+1, R2 ; turn into an index 6ba4 004a SLL R2, 1 ; \_ Index into channel info 6ba5 02fa 6bea ADDI #SFXPSG, R2 ; / table 6ba7 0094 MOVR R2, R4 ; More convenient register 6ba8 02b9 003f MVII #$3F, R1 ; Default channel enables: None 6baa 02a2 MVI@ R4, R2 ; Get noise period address 6bab 0064 SLR R0, 2 6bac 0060 SLR R0, 1 6bad 03b8 001e ANDI #$1E, R0 ; Any noise component? 6baf 0204 0003 BEQ @@no_noise 6bb1 03b9 0007 ANDI #$07, R1 ; enable noise for this channel 6bb3 0250 MVO@ R0, R2 ; Write noise period 0x6bb4 @@no_noise: 6bb4 02a2 MVI@ R4, R2 ; Get tone period address 6bb5 02a8 MVI@ R5, R0 ; Get tone 6bb6 0083 MOVR R0, R3 ; Save volume 6bb7 03b8 0fff ANDI #$FFF, R0 ; Any tone component? 6bb9 020c 0004 BNEQ @@tone ; 6bbb 02b8 0001 MVII #1, R0 ; set tone register to high pitch 6bbd 0204 0002 BEQ @@no_tone 6bbf 03b9 0038 @@tone: ANDI #$38, R1 ; enable tone for this channel 0x6bc1 @@no_tone: 6bc1 0250 MVO@ R0, R2 ; Write tone LSBs 6bc2 02fa 0004 ADDI #4, R2 6bc4 0040 SWAP R0 6bc5 0250 MVO@ R0, R2 ; Write tone MSBs 6bc6 033a 0004 SUBI #4, R2 ; Rewind pointer (*sigh*) ; At this point: ; R0 is junk ; R1 holds tone/noise enables for this channel. ; R2 points to LSB of tone channel ; R3 holds volume in bits 15:12 ; R4 points to 3rd word of SFXPSG entry ; R5 points past SFXINI record 6bc8 0043 SWAP R3 ; \ 6bc9 03bb 00f0 ANDI #$F0, R3 ; |_ Extract volume 6bcb 0067 SLR R3, 2 ; | 6bcc 0067 SLR R3, 2 ; / 6bcd 020c 0002 BNEQ @@no_env 6bcf 02bb 003f MVII #$3F, R3 ; vol=0 means "use envelope" 6bd1 02fa 000b @@no_env ADDI #$B, R2 ; point to channel's volume reg 6bd3 0253 MVO@ R3, R2 ; write volume 6bd4 02a2 MVI@ R4, R2 ; Point to channel enable 6bd5 02a0 MVI@ R4, R0 ; Get update mask 6bd6 0181 ANDR R0, R1 ; Filter out our enables 6bd7 0018 COMR R0 6bd8 0390 AND@ R2, R0 ; Keep other bits, clr this chan's 6bd9 01c8 XORR R1, R0 ; Merge in this chan's 6bda 0250 MVO@ R0, R2 ; Write merged channel enable 6bdb 0281 0199 @@done: MVI SFXQ, R1 6bdd 0089 TSTR R1 6bde 0204 0006 BEQ @@leave 6be0 01c0 CLRR R0 6be1 0240 0199 MVO R0, SFXQ 6be3 0004 0368 0371 J @@again 6be6 01c0 @@leave: CLRR R0 6be7 0240 019a MVO R0, SFXBSY 6be9 02b7 PULR PC ENDP ;; ======================================================================== ;; ;; SFXPSG Useful lookup table for channel-to-PSG mapping. ;; ;; ======================================================================== ;; 0x6bea SFXPSG PROC 6bea 00f9 00f1 00f8 DECLE $0F9, $0F1, $0F8, %010010 6bed 0012 6bee 00f9 00f2 00f8 DECLE $0F9, $0F2, $0F8, %100100 6bf1 0024 6bf2 01f9 01f1 01f8 DECLE $1F9, $1F1, $1F8, %010010 6bf5 0012 6bf6 01f9 01f2 01f8 DECLE $1F9, $1F2, $1F8, %100100 6bf9 0024 ENDP ;; ======================================================================== ;; ;; SFXGET Get the current channel into machine registers ;; ;; SFXPUT Write machine registers to the current channel ;; ;; ======================================================================== ;; 0x6bfa SFXGET PROC 6bfa 0298 MVI@ R3, R0 6bfb 02fb 0004 ADDI #4, R3 6bfd 0040 SWAP R0 6bfe 03d8 XOR@ R3, R0 6bff 0040 SWAP R0 6c00 02fb 0007 ADDI #7, R3 6c02 029a MVI@ R3, R2 6c03 03ba 003f ANDI #$3F, R2 6c05 033b 000b SUBI #$B, R3 6c07 00af JR R5 ENDP 0x6c08 SFXPUT PROC 6c08 02bd 6b0c MVII #SFXRET,R5 6c0a 0258 @@1 MVO@ R0, R3 6c0b 02fb 0004 ADDI #4, R3 6c0d 0040 SWAP R0 6c0e 0258 MVO@ R0, R3 6c0f 02fb 0007 ADDI #7, R3 6c11 025a MVO@ R2, R3 6c12 033b 000b SUBI #$B, R3 6c14 00af JR R5 ENDP ;__ INCLUDE "engine/tracker.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Music engine copyright 2007, Arnauld Chevallier ;; ;;==========================================================================;; ;;==========================================================================;; ;; Constants ;; ;;==========================================================================;; 0x1c5 RFRSH2POS EQU (POS_A - RFRSH_A) AND $FFFF 0x1c8 POS2NOTE EQU (POS_A - NOTE_A) AND $FFFF 0x66 COUNT2PER EQU ($01F0 - COUNT_A) AND $FFFF 0xff90 PER2VOL EQU (VOL_A - $01F4) AND $FFFF 0x77 VOL2VOL EQU ($01FB - VOL_A) AND $FFFF ;;==========================================================================;; ;; WAIT_SONG ;; ;; Wait for end of current song ;; ;;==========================================================================;; 0x6c15 WAIT_SONG PROC 6c15 0280 0345 @@spin: MVI SONG, R0 6c17 0080 TSTR R0 6c18 022c 0004 BNEQ @@spin 6c1a 00af JR R5 ENDP 0x6c1b WAIT_SONG1 PROC 6c1b 02a8 MVI@ R5, R0 6c1c 0240 016f MVO R0, WTIMER 6c1e 0275 PSHR R5 6c1f 0280 0173 @@spin: MVI DOENG, R0 6c21 0010 DECR R0 6c22 020b 0008 BMI @@nope 6c24 0240 0173 MVO R0, DOENG 6c26 0004 016c 01fb CALL UPSND 6c29 01c0 CLRR R0 6c2a 0240 016c MVO R0, EBSY 6c2c 01c0 @@nope: CLRR R0 6c2d 0340 016f CMP WTIMER, R0 6c2f 0204 0004 BEQ @@done 6c31 0340 0345 CMP SONG, R0 6c33 022c 0015 BNEQ @@spin 6c35 0240 016f @@done MVO R0, WTIMER 6c37 02b7 PULR PC ENDP ;;==========================================================================;; ;; INIT_SONG ;; ;; Initialize a new song ;; ;;==========================================================================;; 6c38 02ac PLAY.mus MVI@ R5, R4 0x6c39 INIT_SONG PROC 6c39 0275 PSHR R5 6c3a 0244 0345 MVO R4, SONG ; save song address 6c3c 000c INCR R4 ; read flags 6c3d 02a0 MVI@ R4, R0 6c3e 0240 0190 MVO R0, MUS_FLAGS ; and save them 6c40 0004 016c 02ed CALL FILLZERO.lp ; clear most variables 6c43 0013 DECLE PAT-RFRSH_M+1 6c44 017d DECLE RFRSH_M ; COMR R0 ; initialize counters ; MVO R0, COUNT_A ; MVO R0, COUNT_B ; MVO R0, COUNT_C 6c45 0004 01d4 038e CALL INITMEM.0 ; INIT COUNT_A, $FF 6c48 298a DECLE _init_const OR COUNT_A ; INIT COUNT_B, $FF 6c49 298b DECLE _init_const OR COUNT_B ; INIT COUNT_C, $FF 6c4a 298c DECLE _init_const OR COUNT_C ; INIT PSG0 + 8, $38 ; set channel enables to "Tone Only" 6c4b 2df8 DECLE _init_const OR PSG0 + 8 ; INIT PSG1 + 8, $31 ; on second PSG, have noise on channel A 6c4c 30f8 DECLE _init_const OR PSG1 + 8 ; INIT PSG1 + 9, $3 ; Noise period of 3 6c4d 8cf9 DECLE _init_const OR PSG1 + 9 ; INIT PSG1 + 11, $0 ; Volume off 6c4e 80fb DECLE _init_const OR PSG1 + 11 ; INIT_DONE 6c4f 0000 DECLE 0 6c50 02b5 PULR R5 ENDP ;;==========================================================================;; ;; INIT_PAT ;; ;; Initialize next pattern ;; ;;==========================================================================;; 0x6c51 INIT_PAT PROC 6c51 0284 0345 MVI SONG, R4 6c53 02fc 0002 ADDI #2, R4 6c55 02a2 MVI@ R4, R2 ; R2 = address of 1st pattern 6c56 0280 018f MVI PAT, R0 ; R0 = position in patterns order table 6c58 00c4 ADDR R0, R4 6c59 02a1 MVI@ R4, R1 ; R1 = pattern number 6c5a 0089 TSTR R1 6c5b 0203 000c BPL @@pat_ok ; end of sequence ? 6c5d 0379 8000 CMPI #$8000, R1 ; restart ? ... 6c5f 020c 0004 BNEQ @@restart 6c61 01c0 CLRR R0 ; ... no : clear SONG and quit 6c62 0240 0345 MVO R0, SONG 6c64 00af JR R5 0x6c65 @@restart: 6c65 00c8 ADDR R1, R0 ; ... yes : jump to restart position ... 6c66 00cc ADDR R1, R4 6c67 0014 DECR R4 6c68 02a1 MVI@ R4, R1 ; ... and read again 0x6c69 @@pat_ok: 6c69 0008 INCR R0 ; increment position 6c6a 0240 018f MVO R0, PAT ; in patterns order table 6c6c 004d SLL R1, 2 ; R4 = R1 * 4 + R2 6c6d 008c MOVR R1, R4 ; (beginning of pattern's detail) 6c6e 00d4 ADDR R2, R4 6c6f 02a0 MVI@ R4, R0 ; init. pattern counter 6c70 0240 018e MVO R0, COUNT_P IF 0 MVI@ R4, R0 ; init. position for each channel MVO R0, POS_A MVI@ R4, R0 MVO R0, POS_B MVI@ R4, R0 MVO R0, POS_C ELSE 6c72 02a0 MVI@ R4, R0 6c73 02a1 MVI@ R4, R1 6c74 02a2 MVI@ R4, R2 6c75 02bc 0346 MVII #POS_A, R4 6c77 0260 MVO@ R0, R4 6c78 0261 MVO@ R1, R4 6c79 0262 MVO@ R2, R4 ENDI 6c7a 00af JR R5 ENDP ;;==========================================================================;; ;; PLAY_SONG ;; ;; Update the current song ;; ;;==========================================================================;; 0x6c7b PLAY_SONG PROC 6c7b 0275 PSHR R5 6c7c 0284 0345 MVI SONG, R4 ; is a song playing ? 6c7e 00a4 TSTR R4 6c7f 0204 0054 BEQ @@done 6c81 0280 018d MVI COUNT_M,R0 ; global music counter 6c83 0008 INCR R0 6c84 0240 018d MVO R0, COUNT_M 6c86 0280 017d MVI RFRSH_M,R0 ; refresh notes ? 6c88 0010 DECR R0 6c89 0203 002b BPL @@notes_ok 6c8b 02a0 MVI@ R4, R0 ; ... yes : read speed 6c8c 0240 017d MVO R0, RFRSH_M 6c8e 0004 016c 00d6 CALL UPD_CH ; refresh note for each channel 6c91 0181 DECLE RFRSH_A 6c92 0280 0190 MVI MUS_FLAGS,R0 ; 3-channel tune ? ... 6c94 03b8 0002 ANDI #M_3CH, R0 6c96 0204 0008 BEQ @@tick 6c98 0004 016c 00d6 CALL UPD_CH ; ... yes 6c9b 0182 DECLE RFRSH_B 6c9c 0004 016c 00d6 CALL UPD_CH 6c9f 0183 DECLE RFRSH_C 0x6ca0 @@tick: 6ca0 0280 0190 MVI MUS_FLAGS,R0 ; ticks enabled ? ... 6ca2 03b8 0004 ANDI #M_TICK,R0 6ca4 0204 0004 BEQ @@cnt 6ca6 02b8 000e MVII #$0E, R0 ; ... yes : initialize new tick 6ca8 0240 00fb MVO R0, PSG1+11 6caa 0280 018e @@cnt: MVI COUNT_P,R0 ; pattern counter 6cac 0010 DECR R0 6cad 0240 018e MVO R0, COUNT_P 6caf 020c 0007 BNEQ @@upd_psg ; jump to next pattern ? 6cb1 0004 016c 0051 CALL INIT_PAT ; ... yes 6cb4 0200 0002 B @@upd_psg 0x6cb6 @@notes_ok: 6cb6 0240 017d MVO R0, RFRSH_M 0x6cb8 @@upd_psg: 6cb8 0004 016c 0105 CALL UPD_PSG ; update PSG for each channel 6cbb 017e DECLE NOTE_A 6cbc 0280 0190 MVI MUS_FLAGS,R0 ; 3-channel tune? ... 6cbe 03b8 0002 ANDI #M_3CH, R0 6cc0 0204 0008 BEQ @@upd_tick 6cc2 0004 016c 0105 CALL UPD_PSG ; ... yes 6cc5 017f DECLE NOTE_B 6cc6 0004 016c 0105 CALL UPD_PSG 6cc9 0180 DECLE NOTE_C 0x6cca @@upd_tick: 6cca 0281 00fb MVI PSG1+11,R1 ; update tick 6ccc 03b9 000f ANDI #$0F, R1 6cce 0339 0004 SUBI #4, R1 6cd0 0203 0001 BPL @@tick_ok 6cd2 01c9 CLRR R1 0x6cd3 @@tick_ok: 6cd3 0241 00fb MVO R1, PSG1+11 0x6cd5 @@done: 6cd5 02b7 PULR PC ENDP ;;==========================================================================;; ;; UPD_CH ;; ;; Update a channel ;; ;;==========================================================================;; 0x6cd6 UPD_CH PROC 6cd6 02ab MVI@ R5, R3 6cd7 0275 PSHR R5 6cd8 0298 MVI@ R3, R0 ; (R3 = RFRSH_x) 6cd9 0338 0010 SUBI #$10, R0 6cdb 020b 0002 BMI @@ch_new 6cdd 0258 MVO@ R0, R3 6cde 02b7 PULR PC 0x6cdf @@ch_new: 6cdf 02fb 01c5 ADDI #RFRSH2POS,R3 ; read pos 6ce1 029c MVI@ R3, R4 6ce2 02a0 MVI@ R4, R0 ; read data 6ce3 0081 MOVR R0, R1 ; disable ticks ? ... 6ce4 0203 0006 BPL @@data_ok 6ce6 0282 0190 MVI MUS_FLAGS,R2 ; ... yes 6ce8 03ba fffb ANDI #(NOT M_TICK),R2 6cea 0242 0190 MVO R2,MUS_FLAGS 0x6cec @@data_ok: 6cec 025c MVO@ R4, R3 ; update pos 6ced 0040 SWAP R0 ; save note 6cee 033b 01c8 SUBI #POS2NOTE,R3 6cf0 03b8 007f ANDI #$7F, R0 6cf2 0204 0001 BEQ @@skip_sav 6cf4 0258 MVO@ R0, R3 0x6cf5 @@skip_sav: 6cf5 02fb 0003 ADDI #3, R3 ; new refresh value (R3 = RFRSH_x) 6cf7 0259 MVO@ R1, R3 6cf8 03b9 000f ANDI #$F, R1 ; new volume 6cfa 02fb 0003 ADDI #3, R3 ; (R3 = VOL_x) 6cfc 0259 MVO@ R1, R3 6cfd 0080 TSTR R0 ; if note = 0, 6cfe 0204 0004 BEQ @@ch_ok ; don't reset counter 6d00 02fb 0006 ADDI #6, R3 ; (R3 = COUNT_x) 6d02 01c0 CLRR R0 ; reset counter 6d03 0258 MVO@ R0, R3 0x6d04 @@ch_ok: 6d04 02b7 PULR PC ENDP ;;==========================================================================;; ;; UPD_PSG ;; ;; Update the PSG ;; ;;==========================================================================;; 0x6d05 UPD_PSG PROC 6d05 02ab MVI@ R5, R3 6d06 0299 MVI@ R3, R1 ; read note 6d07 02fb 000c ADDI #12, R3 ; (R3 = COUNT_x) 6d09 029a MVI@ R3, R2 ; read channel counter -> R2 6d0a 037a 00ff CMPI #$FF, R2 ; prevents loop after $FF 6d0c 0204 0003 BEQ @@cnt_ok 6d0e 000a INCR R2 ; increment counter 6d0f 025a MVO@ R2, R3 6d10 0012 DECR R2 0x6d11 @@cnt_ok: 6d11 02f9 6d58 ADDI #(PER_TBL-1),R1 ; read period from notes table 6d13 0288 MVI@ R1, R0 ; R0 = period 6d14 02fb 0066 ADDI #COUNT2PER,R3 ; write period 6d16 0258 MVO@ R0, R3 ; (low) 6d17 0040 SWAP R0 6d18 02fb 0004 ADDI #4, R3 6d1a 0258 MVO@ R0, R3 ; (high) 6d1b 0281 0190 MVI MUS_FLAGS,R1 ; duplicate on channels B/C ? ... 6d1d 03b9 0001 ANDI #M_DUP, R1 6d1f 0204 0013 BEQ @@env 6d21 0040 SWAP R0 ; ... yes 6d22 0081 MOVR R0, R1 6d23 0338 0002 SUBI #2, R0 ; R0 = note tuned slightly sharp 6d25 0061 SLR R1 ; R1 = note + 1 octaves 6d26 033b 0003 SUBI #3, R3 ; write period 6d28 0258 MVO@ R0, R3 ; (low / channel B) 6d29 000b INCR R3 6d2a 0259 MVO@ R1, R3 ; (low / channel C) 6d2b 0040 SWAP R0 6d2c 0041 SWAP R1 6d2d 02fb 0003 ADDI #3, R3 6d2f 0258 MVO@ R0, R3 ; (high / channel B) 6d30 000b INCR R3 6d31 0259 MVO@ R1, R3 ; (high / channel C) 6d32 033b 0002 SUBI #2, R3 0x6d34 @@env: 6d34 02bc fcff MVII #ENV.01, R4 ; R4 = pointer to envelope 6d36 0062 SLR R2 ; R2 = channel counter / 2 6d37 0091 MOVR R2, R1 ; get volume from envelope 6d38 0066 SLR R2, 2 6d39 00d4 ADDR R2, R4 6d3a 02a0 MVI@ R4, R0 6d3b 007d SARC R1, 2 ; 2 LSBs say which of four nibbles to use 6d3c 0201 0002 BC @@env_X1 ; C==1 means nibble 1 or 3 6d3e 0064 SLR R0, 2 ; \_ C==0 means nibble 0 or 2 6d3f 0064 SLR R0, 2 ; / 0x6d40 @@env_X1 6d40 0202 0001 BOV @@env_1X ; V==1 means nibble 2 or 3 6d42 0040 SWAP R0 ; V==0 means nibble 0 or 1 0x6d43 @@env_1X ; (nibbles numbered left-to-right) 6d43 03b8 000f ANDI #$F, R0 6d45 02fb ff90 ADDI #PER2VOL,R3 ; (R3 = VOL_x) 6d47 0318 SUB@ R3, R0 ; get volume from song 6d48 0203 0001 BPL @@upd_vol 6d4a 01c0 CLRR R0 0x6d4b @@upd_vol: 6d4b 02fb 0077 ADDI #VOL2VOL,R3 ; apply new volume 6d4d 0258 MVO@ R0, R3 6d4e 0281 0190 MVI MUS_FLAGS,R1 ; duplicate on channels B/C ? ... 6d50 03b9 0001 ANDI #M_DUP, R1 6d52 0204 0004 BEQ @@done 6d54 000b INCR R3 ; ... yes : same value 6d55 0258 MVO@ R0, R3 6d56 000b INCR R3 6d57 0258 MVO@ R0, R3 0x6d58 @@done: 6d58 00af JR R5 ENDP ;;==========================================================================;; ;; PER_TBL ;; ;; Periods of the 50 defined notes ;; ;;==========================================================================;; 0x6d59 PER_TBL PROC 6d59 054d 0501 04b9 DECLE $054D, $0501, $04B9, $0475, $0435, $03F9, $03C0, $038A 6d5c 0475 0435 03f9 03c0 038a 6d61 0357 0327 02fa DECLE $0357, $0327, $02FA, $02CF, $02A7, $0281, $025D, $023B 6d64 02cf 02a7 0281 025d 023b 6d69 021b 01fc 01e0 DECLE $021B, $01FC, $01E0, $01C5, $01AC, $0194, $017D, $0168 6d6c 01c5 01ac 0194 017d 0168 6d71 0153 0140 012e DECLE $0153, $0140, $012E, $011D, $010D, $00FE, $00F0, $00E2 6d74 011d 010d 00fe 00f0 00e2 6d79 00d6 00ca 00be DECLE $00D6, $00CA, $00BE, $00B4, $00AA, $00A0, $0097, $008F 6d7c 00b4 00aa 00a0 0097 008f 6d81 0087 007f 0078 DECLE $0087, $007F, $0078, $0071, $006B, $0065, $005F, $005A 6d84 0071 006b 0065 005f 005a 6d89 0055 0050 DECLE $0055, $0050 ENDP ;__ 0x295 _SENG.size EQU $ - _SENG 0x6d8b _OS EQU $ INCLUDE "os/main_os.asm" ;;==========================================================================;; ;; Joe Zbiciak's Space Patrol for Intellivision. ;; ;; Main ISR, Main loop, task functions, initialization, etc. ;; ;; Copyright 2007, Joe Zbiciak, intvnut AT gmail.com. ;; ;; http://spatula-city.org/~im14u2c/intv/ ;; ;;==========================================================================;; ;;==========================================================================;; ;; TITLE / START ;; ;; ;; ;; This contains the title string and the startup code. We pre-empt the ;; ;; EXEC's initialization sequence by setting the "Special Copyright" bit ;; ;; in location $500C. This causes the code at 'START' to run before the ;; ;; built-in title screen is completely displayed. ;; ;; ;; ;; The Startup code does very little. Mainly, it sets the Interrupt ;; ;; Service Routine vector to point to our _real_ initialization routine, ;; ;; INIT. This is done because we can only get to GRAM and STIC registers ;; ;; during the vertical retrace, and vertical retrace is signaled by an ;; ;; interrupt. (Actually, we can have access to GRAM/STIC for longer ;; ;; if we don't hit the STIC 'handshake' at location $20, but then the ;; ;; display blanks. During INIT, the display does blank briefly.) ;; ;;==========================================================================;; 6d8b 006b 0053 0070 TITLE: BYTE 107, "Space Patrol Teaser Edition", 0 6d8e 0061 0063 0065 0020 0050 0061 0074 0072 6d96 006f 006c 0020 0054 0065 0061 0073 0065 6d9e 0072 0020 0045 0064 0069 0074 0069 006f 6da6 006e 0000 ; Intercept/preempt EXEC initialization and just do our own. ; We call no EXEC routines in this game. 0x6da8 START: PROC 6da8 02be 034a @@pass: MVII #STACK, R6 ;; ---------------------------------------------------------------- ;; ;; Initialize memory ;; ;; ---------------------------------------------------------------- ;; 6daa 0004 016c 02ed CALL FILLZERO.lp 6dad 005a 02f0 DECLE STACK-$2F0, $2F0 ; $2F0...$STACK. ;; ---------------------------------------------------------------- ;; ;; Game initialization. ;; ;; ---------------------------------------------------------------- ;; ; SETISR INITISR 6daf 0004 016c 0244 CALL _SETISR 6db2 6db7 DECLE INITISR 6db3 0004 016d 02f4 JSRE R5, CLRSCR 6db6 0017 DECR PC ENDP ;;==========================================================================;; ;; INIT ;; ;; Initializes the ISR, etc. Gets everything ready to run. ;; ;; This is called via the ISR dispatcher, so it's safe to bang GRAM from ;; ;; here, too. ;; ;; ;; ;; -- Zero out memory to get started ;; ;; -- Set up variables that need to be set up here and there ;; ;; -- Set up GRAM image ;; ;; -- Drop into the main game state-machine. ;; ;;==========================================================================;; 0x6db7 INITISR PROC 6db7 0003 DIS 6db8 02ba 0038 MVII #$38, R2 6dba 0242 01f8 MVO R2, $1F8 ;@@1: DIS 6dbc 02be 034a MVII #STACK, R6 ; Reset the stack pointer 6dbe 0004 016c 02ed CALL FILLZERO.lp 6dc1 0040 DECLE $40 ; $00...$3F. (The STIC) 6dc2 0000 DECLE 0 ; Prepare to zero all system RAM, PSG0,& STIC. 6dc3 0281 0021 MVI COLSTK, R1 ; Force display to color-stack mode ; SETISR MISCISR ; Point ISR vector to our ISR 6dc5 0004 016c 0244 CALL _SETISR 6dc8 6e14 DECLE MISCISR ; Point ISR vector to our ISR ; Ok, everything's ready to roll now. ; Load up our initial font and drop into the game loop 6dc9 0004 016d 01cf JSRE R5, LOADFONT 6dcc fa5a DECLE FONT 6dcd 0220 0842 B GAMELOOP ENDP ;;==========================================================================;; ;; LOADFONT -- Load a compressed FONT into GRAM. ;; ;; ;; ;; Font data is broken up into spans of characters that are copied ;; ;; into GRAM. Each span is defined as follows. ;; ;; ;; ;; Span Header: 2 numbers in 1 DECLE ;; ;; bit 6..0, bit 15: Skip Length (in bytes of GRAM memory) ;; ;; bit 14..7: Span Length (in bytes of GRAM memory) ;; ;; Span Data -- Span Length / 2 words ;; ;; ;; ;; Span data is encoded with two bytes in each 16-bit word. The lower ;; ;; byte is stored to the lower address, and the upper byte to the next ;; ;; address after it. ;; ;; ;; ;; The font is terminated with a span of length 0. ;; ;; ;; ;; INPUTS: ;; ;; R5 -- Points to word (1 decle in 16-bit ROM) containing ptr to font ;; ;; info. Code returns after this word. ;; ;; ;; ;; OUTPUTS: ;; ;; R0, R1, R4, R5 trashed. ;; ;; GRAM is updated according to the font specification. ;; ;; ;; ;;==========================================================================;; 0x6dcf LOADFONT PROC 6dcf 02aa MVI@ R5, R2 ; get font pointer 6dd0 0275 @@1 PSHR R5 6dd1 02bc 0100 MVII #$100, R4 6dd3 0001 SDBD 6dd4 02a1 MVI@ R4, R1 ; SETISR @@isr 6dd5 0004 016c 0244 CALL _SETISR 6dd8 6dda DECLE @@isr 6dd9 0017 DECR PC ; let ISR take over. 0x6dda @@isr: 6dda 0003 DIS 6ddb 033e 0008 SUBI #8, R6 6ddd 0241 0100 MVO R1, $100 ; \ 6ddf 0041 SWAP R1 ; |- restore old ISR 6de0 0241 0101 MVO R1, $101 ; / 6de2 0095 MOVR R2, R5 ; get font pointer 6de3 02bc 3800 MVII #GRAM, R4 ; Point R4 at GRAM 0x6de5 @@gramloop: 6de5 02a8 MVI@ R5, R0 ; Get skip & span len. (in GRAM bytes) 6de6 0080 TSTR R0 ; Quit if skip/span == 0. 6de7 0204 0010 BEQ @@gramdone 6de9 0081 MOVR R0, R1 6dea 03b8 07f8 ANDI #$7F8, R0 ; Extract span length. 6dec 01c1 XORR R0, R1 ; Clear away span bits from word 6ded 0041 SWAP R1 ; Extrack skip value. 6dee 00cc ADDR R1, R4 ; Skip our output pointer. 6def 0060 SLR R0, 1 ; Divide count by 2. 0x6df0 @@charloop: 6df0 02a9 MVI@ R5, R1 ; Get two bytes 6df1 0261 MVO@ R1, R4 ; Put the first byte 6df2 0041 SWAP R1 ; Put the other byte into position 6df3 0261 MVO@ R1, R4 ; Put the second byte 6df4 0010 DECR R0 ; Sheesh, do I have to spell this out? 6df5 022c 0006 BNEQ @@charloop ; inner loop 6df7 0220 0013 B @@gramloop ; outer loop 0x6df9 @@gramdone: 6df9 0002 EIS 6dfa 02b7 PULR PC ENDP 0x6dfb UPSND PROC 6dfb 0275 PSHR R5 ;; ---------------------------------------------------------------- ;; ;; Update sound streams. All sound streams update at 60Hz. ;; ;; ---------------------------------------------------------------- ;; ; Update music 6dfc 0004 016c 007b CALL PLAY_SONG ; Arnauld's tracker ; Play any queued sound effects from running the engine2 6dff 0281 0199 MVI SFXQ, R1 6e01 0089 TSTR R1 6e02 0204 0006 BEQ @@nosfx 6e04 01c0 CLRR R0 6e05 0240 0199 MVO R0, SFXQ 6e07 0004 0168 0366 CALL DOPLAYSFX 0x6e0a @@nosfx: ; Update sfx 6e0a 0004 0168 02f6 CALL UPSFX ; Update the sound stream 6e0d 02b7 PULR PC ENDP ;;==========================================================================;; ;; MISCISR ;; ;; This is the main interrupt service routine. It has to perform the ;; ;; following tasks: ;; ;; ;; ;; -- Run any miscellaneous "pre-VBLANK" task requested by main program. ;; ;; -- Hit the vertical blank handshake to keep screen enabled. ;; ;; -- Update any active sound streams. ;; ;; -- Drain and pixels queued up in the Pixel Queue. ;; ;; -- Count down task timers and schedule tasks when timers expire. ;; ;; -- Count down the 'busy-wait' timer if it is set. ;; ;; -- Detect a "Pause" request and pause the game if needed. ;; ;; ;; ;; Our code does not rely on any EXEC routines at all, except the ISR ;; ;; dispatch routine which saves and restores all the registers. (On a ;; ;; real Intellivision, we have no choice. On an emulator, that routine ;; ;; can be replaced with a separate non-EXEC routine which performs a ;; ;; similar dispatch, if we want to distribute this program without an ;; ;; EXEC ROM image but with an emulator.) ;; ;; ;; ;;==========================================================================;; 6e0e 0280 0178 BISTISR MVI TMP, R0 6e10 0240 0028 MVO R0, $28 6e12 0240 002c MVO R0, $2C 0x6e14 MISCISR PROC 6e14 0240 0020 MVO R0, $20 0x6e16 @@1: 0x6e16 @@wtimer: ;; ---------------------------------------------------------------- ;; ;; Count down the wait-timer, if there is one. ;; ;; ---------------------------------------------------------------- ;; 6e16 0285 016f MVI WTIMER, R5 6e18 0015 DECR R5 6e19 020b 0002 BMI @@expired 6e1b 0245 016f MVO R5, WTIMER 0x6e1d @@expired: ;; ---------------------------------------------------------------- ;; ;; Other misc periodic stuff. ;; ;; ---------------------------------------------------------------- ;; 6e1d 0280 0102 MVI TICK, R0 ; Increment global tick counter 6e1f 0008 INCR R0 6e20 0240 0102 MVO R0, TICK 6e22 0220 5e0f B ISRRET ENDP ;;==========================================================================;; ;; WAIT ;; ;; Busy-waits for the number of ticks specified after call, or in R0. ;; ;; ;; ;; INPUTS: ;; ;; R0 -- Number of ticks to wait (WAIT.1) ;; ;; R5 -- Return address ;; ;; ;; ;; OUTPUTS: ;; ;; R0 -- cleared ;; ;;==========================================================================;; 6e24 02b8 0001 WAIT1 MVII #1, R0 6e26 000f INCR PC 0x6e27 WAIT PROC 6e27 02a8 MVI@ R5, R0 6e28 0240 016f @@1 MVO R0, WTIMER 6e2a 01c0 CLRR R0 0x6e2b @@loop: 6e2b 0340 016f CMP WTIMER, R0 6e2d 022c 0003 BNEQ @@loop 6e2f 00af JR R5 ENDP ;__ INCLUDE "os/rand.asm" ;; ======================================================================== ;; ;; RAND ;; ;; Returns random bits in R0. ;; ;; ;; ;; INPUTS: ;; ;; R5 -- Return address ;; ;; Random state in RSEED ;; ;; ;; ;; OUTPUTS: ;; ;; R0 -- 16 random bits. ;; ;; ;; ;; NOTES: ;; ;; You are encouraged to add additional "randomness" by adding or ;; ;; XORing other values into RSEED. ;; ;; ;; ;; Implementation is a Galois realization of a 16-bit LFSR with the ;; ;; following polynomial: ;; ;; ;; ;; x^16 = x^15 + x^13 + x^11 + x^9 + x^8 + x^4 + x^3 + x^0 ;; ;; ;; ;; The random number generator is only advanced by 4 bits per call. ;; ;; Call twice if you need 8 truly random bits. The generator uses ;; ;; a dense polynomial, so the top 12 bits will be different than the ;; ;; bottom 12 bits returned on the previous call 15 out of 16 times. ;; ;; ======================================================================== ;; 0x6e30 RAND PROC 6e30 0280 035f MVI RSEED, R0 ; 10 Get rand seed 6e32 01e8 XORR R5, R0 ; 8 XOR in caller ret address 6e33 02b9 ab19 MVII #$AB19, R1 ; 8 Field polynomial ;---- ; 26 REPEAT 4 6e35 0058 SLLC R0, 1 ; 6 Multiply by x^1 6e36 002f ADCR PC ; 7 \_ If x^16 generated, XOR in 6e37 01c8 XORR R1, R0 ; 6 / polynomial (-ve logic) ;---- ; 19 ENDR ;== 1 6e38 0058 SLLC R0, 1 ; 6 Multiply by x^1 6e39 002f ADCR PC ; 7 \_ If x^16 generated, XOR in 6e3a 01c8 XORR R1, R0 ; 6 / polynomial (-ve logic) ;---- ; 19 ;== 2 6e3b 0058 SLLC R0, 1 ; 6 Multiply by x^1 6e3c 002f ADCR PC ; 7 \_ If x^16 generated, XOR in 6e3d 01c8 XORR R1, R0 ; 6 / polynomial (-ve logic) ;---- ; 19 ;== 3 6e3e 0058 SLLC R0, 1 ; 6 Multiply by x^1 6e3f 002f ADCR PC ; 7 \_ If x^16 generated, XOR in 6e40 01c8 XORR R1, R0 ; 6 / polynomial (-ve logic) ;---- ; 19 ;== 4 ; 76 (4 unrolled iterations) ; 26 (carried forward) ;---- ; 102 6e41 0240 035f MVO R0, RSEED ; 11 6e43 00af JR R5 ; 7 ;---- ; 18 ; 102 ;---- ; 130 ENDP ;__ INCLUDE "os/setisr.asm" IF 0 ;; Ugly: ISR address is packed into 5 MSBs of the 3 words of the CALL. _SETISR PROC SUBI #3, R5 MVI@ R5, R0 ; 5432:10__:____:_#__ SWAP R0 ; ____:_#__:5432:10__ SLL R0, 2 ; ___#:__54:3210:____ XOR@ R5, R0 ; BA98:7654:3210:____ 5..0 gets XORd w/ opc. SLR R0, 2 ; __BA:987:65432:10__ SLR R0, 2 ; ____:BA98:7654:3210 XOR@ R5, R0 ; FEDC:BA98:7654:3210 B..0 gets XORd w/ opc. MVO R0, ISRVEC SWAP R0 MVO R0, ISRVEC+1 JR R5 ENDP ELSE 0x6e44 _SETISR PROC 6e44 02a8 MVI@ R5, R0 6e45 0240 0100 MVO R0, ISRVEC 6e47 0040 SWAP R0 6e48 0240 0101 MVO R0, ISRVEC+1 6e4a 00af JR R5 ENDP ENDI INCLUDE "os/wnk.asm" ;; ======================================================================== ;; ;; WAITKEY Wait for release/press/release ;; ;; WAITNOKEY Wait for key release ;; ;; ======================================================================== ;; 0x6e4b WAITKEY PROC 6e4b 0275 PSHR R5 6e4c 0004 016c 0256 @@1: CALL WAITNOKEY ; Wait for release-press-release 6e4f 0280 01fe @@wk MVI $1FE, R0 6e51 03c0 01ff XOR $1FF, R0 6e53 0224 0005 BEQ @@wk 6e55 000f INCR PC ; skip PSHR R5 6e56 0275 WAITNOKEY PSHR R5 6e57 02b8 00c8 @@waitnokey MVII #200, R0 6e59 0240 017c MVO R0, TMP+4 6e5b 02c0 035f @@stillnk ADD RSEED, R0 6e5d 0240 035f MVO R0, RSEED 6e5f 0004 016c 033d CALL DBHC 6e62 0080 TSTR R0 6e63 022c 000d BNEQ @@waitnokey 6e65 0092 TSTR R2 6e66 022c 0010 BNEQ @@waitnokey 6e68 0280 017c MVI TMP+4, R0 6e6a 0010 DECR R0 6e6b 0240 017c MVO R0, TMP+4 6e6d 0223 0013 BPL @@stillnk 6e6f 02b7 PULR PC ENDP INCLUDE "util/p16.asm" ;;==========================================================================;; ;; Useful Routines ;; ;; Copyright 1999-2002, Joe Zbiciak. ;; ;; ;; ;; This file contains a number of useful routines that you're welcome ;; ;; to use in your own software. Please keep in mind that these routines ;; ;; are licensed under the GNU General Public License, and so if you plan ;; ;; to distribute a program which incorporates these routines, it too must ;; ;; be distributed under the GNU General Public License. ;; ;;==========================================================================;; ;; ======================================================================== ;; ;; P16.xxx Prints a string packed by S16 ;; ;; ;; ;; P16.R Ptr to string in R0, format in R1, location in R4. ;; ;; P16.S String follows CALL. Format in R1, location in R4. ;; ;; P16.LS Location and string itself follows CALL. Format in R1. ;; ;; P16.FLS Format, location, and string itself follows CALL ;; ;; P16.P Ptr to string follows CALL. Format in R1, loc. in R4. ;; ;; P16.LP Location and ptr to string follows CALL. Format in R1. ;; ;; P16.FLP Format, location, and ptr to string follows CALL ;; ;; ;; ;; P16 alone is an alias for P16.FLS. ;; ;; ;; ;; INPUTS for P16.R: ;; ;; R0 -- Pointer to ASCIIZ string ;; ;; R1 -- Screen format word ;; ;; R4 -- Pointer to display location ;; ;; R5 -- Return address ;; ;; ;; ;; INPUTS for P16.S: ;; ;; R1 -- Screen format word ;; ;; R4 -- Pointer to display location ;; ;; R5 -- Invocation record, followed by return code. ;; ;; String n DECLEs (NUL terminated) ;; ;; ;; ;; INPUTS for P16.LS: ;; ;; R1 -- Screen format word ;; ;; R5 -- Invocation record, followed by return code. ;; ;; Ptr to display location 1 DECLE ;; ;; String n DECLEs (NUL terminated) ;; ;; ;; ;; INPUTS for P16.FLS: ;; ;; R5 -- Invocation record, followed by return code. ;; ;; Screen format word 1 DECLE ;; ;; Ptr to display location 1 DECLE ;; ;; String n DECLEs (NUL terminated) ;; ;; ;; ;; INPUTS for P16.P: ;; ;; R1 -- Screen format word ;; ;; R4 -- Pointer to display location ;; ;; R5 -- Invocation record, followed by return code. ;; ;; Pointer to ASCIIZ string 1 DECLE ;; ;; ;; ;; INPUTS for P16.LP: ;; ;; R1 -- Screen format word ;; ;; R5 -- Invocation record, followed by return code. ;; ;; Ptr to display location 1 DECLE ;; ;; Pointer to ASCIIZ string 1 DECLE ;; ;; ;; ;; INPUTS for P16.FLP: ;; ;; R5 -- Invocation record, followed by return code. ;; ;; Screen format word 1 DECLE ;; ;; Location 1 DECLE ;; ;; Pointer to ASCIIZ string 1 DECLE ;; ;; ;; ;; OUTPUTS: ;; ;; R0 -- Trashed ;; ;; R1 -- Same as screen format word, EXCEPT Bit 15 is cleared. ;; ;; R4 -- Points to display location just after displayed string. ;; ;; R5 -- Points just past end of source string in memory. ;; ;; R2 and R3 are not modified. ;; ;; ;; ;; NOTES ;; ;; ASCIIZ strings are ASCII strings that are terminated with a ;; ;; single NUL character. Although it was originally intended for use ;; ;; with ASCII strings, this routine does allow for characters outside ;; ;; the normal range of ASCII characters as well. This can be useful ;; ;; for displaying graphic characters within a string. ;; ;; ;; ;; The card # displayed for a given character in the string is given ;; ;; by the following formula: ;; ;; ;; ;; (character_number - 32) + (format_word SHR 3) = card_number. ;; ;; ;; ;; To display a single character from GRAM, for instance, just ;; ;; insert a word whose value is "GRAM_picture_number + 288" in your ;; ;; string. ;; ;; ;; ;; You can use PRINT to display entire strings of characters in ;; ;; alternate fonts (such as a font loaded in GRAM) as well. To do ;; ;; this, merely add the appropriate offset to the format_word. ;; ;; The correct offset depends on what characters are in your font ;; ;; and where your font begins in GRAM. ;; ;; ;; ;; For example, suppose your font only contains uppercase alphabetic ;; ;; characters, and is loaded in GRAM positions 10 through 35. That ;; ;; is, the picture for 'A' is in GRAM position #10, and 'Z' is in ;; ;; GRAM position #35. We want 'A' to map to GRAM position #10. ;; ;; GRAM position #10 is equivalent to card #266. The ASCII value for ;; ;; 'A' is 65. Using the relationship given above, we have: ;; ;; ;; ;; (character_number - 32) + (format_word SHR 3) = card_number. ;; ;; ( 65 - 32) + (format_word SHR 3) = 266 ;; ;; ;; ;; Solving this, we get: ;; ;; ;; ;; format_word SHR 3 = 233 ;; ;; format_word = 233 SHL 3 ;; ;; ;; ;; So, to display this particular GRAM font, we must add 233 SHL 3 ;; ;; to our format word. (We can still set other bits in the format ;; ;; word to control its color, etc.) ;; ;; ======================================================================== ;; 0x6e70 P16 PROC 6e70 02a9 @@FLS: MVI@ R5, R1 ; Load format word from invoc. record 6e71 02ac @@LS: MVI@ R5, R4 ; Load ptr to display loc from invoc record 6e72 0200 0007 B @@S ; Continue w/ string pointer in R5. 6e74 02a9 @@FLP: MVI@ R5, R1 ; Load ptr to string from invoc. record 6e75 02ac @@LP: MVI@ R5, R4 ; Load format word from invoc. record 6e76 02a8 @@P: MVI@ R5, R0 ; Load ptr to display loc from invoc record 6e77 0275 @@R: PSHR R5 ; Save return address if string ptr is in R0 6e78 0085 MOVR R0, R5 ; Use auto-incr pointer for reading string 6e79 0007 SETC ; Flag: C==1 means ret addr is on stack 6e7a 000f INCR PC ; Skip the CLRC. 6e7b 0006 @@S CLRC ; Flag: C==0 means return after string. 6e7c 0272 PSHR R2 6e7d 02aa MVI@ R5, R2 ; \ 6e7e 03ba 07f8 ANDI #$7F8, R2 ; |_ Get string length from first word 6e80 0066 SLR R2, 2 ; | 6e81 0062 SLR R2, 1 ; / 6e82 0049 SLL R1, 1 ; \__ Hide the flag in MSB of screen fmt word 6e83 0071 RRC R1, 1 ; / 0x6e84 @@loop 6e84 0015 DECR R5 ; \ 6e85 02a8 MVI@ R5, R0 ; Get character to display 6e86 0040 SWAP R0 ; \_ unpack hi-half character 6e87 03b8 07f8 ANDI #$7F8, R0 ; / 6e89 0378 0600 CMPI #$600, R0 6e8b 0209 0002 BNC @@a 6e8d 02f8 0200 ADDI #$200, R0 0x6e8f @@a 6e8f 00c8 ADDR R1, R0 ; \_ Merge format word and write to display 6e90 0260 MVO@ R0, R4 ; / 6e91 0012 DECR R2 ; \_ Are we done yet? 6e92 020b 000e BMI @@done ; / 6e94 02a8 MVI@ R5, R0 ; Get character to display 6e95 03b8 07f8 ANDI #$7F8, R0 ; -- unpack lo-half character 6e97 0378 0600 CMPI #$600, R0 6e99 0209 0002 BNC @@b 6e9b 02f8 0200 ADDI #$200, R0 0x6e9d @@b 6e9d 00c8 ADDR R1, R0 ; \_ Merge format word and write to display 6e9e 0260 MVO@ R0, R4 ; / 6e9f 0012 DECR R2 ; \_ Are we done yet? 6ea0 0223 001d BPL @@loop ; / 0x6ea2 @@done: 6ea2 02b2 PULR R2 6ea3 0059 SLLC R1, 1 ; Get "return-to-stack" flag from MSB 6ea4 0061 SLR R1, 1 ; Restore screen fmt word, clearing MSB. 6ea5 002f ADCR PC ; Conditionally skip JR R5 if return-to-stack 6ea6 00af JR R5 ; Return to R5 if flag was clear 6ea7 02b7 PULR PC ; Return to saved address if flag was set. ENDP ;__ ; INCLUDE "util/prnum32.asm" INCLUDE "util/prnum16.asm" ;; ======================================================================== ;; ;; PRNUM16.l -- Print an unsigned 16-bit number left-justified. ;; ;; PRNUM16.b -- Print an unsigned 16-bit number with leading blanks. ;; ;; PRNUM16.z -- Print an unsigned 16-bit number with leading zeros. ;; ;; ;; ;; AUTHOR ;; ;; Joseph Zbiciak ;; ;; ;; ;; REVISION HISTORY ;; ;; 30-Mar-2003 Initial complete revision ;; ;; ;; ;; INPUTS for all variants ;; ;; R0 Number to print. ;; ;; R2 Width of field. Ignored by PRNUM16.l. ;; ;; R3 Format word, added to digits to set the color. ;; ;; Note: Bit 15 MUST be cleared when building with PRNUM32. ;; ;; R4 Pointer to location on screen to print number ;; ;; ;; ;; OUTPUTS ;; ;; R0 Zeroed ;; ;; R1 Unmodified ;; ;; R2 Unmodified ;; ;; R3 Unmodified ;; ;; R4 Points to first character after field. ;; ;; ;; ;; DESCRIPTION ;; ;; These routines print unsigned 16-bit numbers in a field up to 5 ;; ;; positions wide. The number is printed either in left-justified ;; ;; or right-justified format. Right-justified numbers are padded ;; ;; with leading blanks or leading zeros. Left-justified numbers ;; ;; are not padded on the right. ;; ;; ;; ;; This code handles fields wider than 5 characters, padding with ;; ;; zeros or blanks as necessary. ;; ;; ;; ;; Routine Value(hex) Field Output ;; ;; ---------- ---------- ---------- ---------- ;; ;; PRNUM16.l $0045 n/a "69" ;; ;; PRNUM16.b $0045 4 " 69" ;; ;; PRNUM16.b $0045 6 " 69" ;; ;; PRNUM16.z $0045 4 "0069" ;; ;; PRNUM16.z $0045 6 "000069" ;; ;; ;; ;; TECHNIQUES ;; ;; This routine uses repeated subtraction to divide the number ;; ;; to display by various powers of 10. This is cheaper than a ;; ;; full divide, at least when the input number is large. It's ;; ;; also easier to get right. :-) ;; ;; ;; ;; The printing routine first pads out fields wider than 5 spaces ;; ;; with zeros or blanks as requested. It then scans the power-of-10 ;; ;; table looking for the first power of 10 that is <= the number to ;; ;; display. While scanning for this power of 10, it outputs leading ;; ;; blanks or zeros, if requested. This eliminates "leading digit" ;; ;; logic from the main digit loop. ;; ;; ;; ;; Once in the main digit loop, we discover the value of each digit ;; ;; by repeated subtraction. We build up our digit value while ;; ;; subtracting the power-of-10 repeatedly. We iterate until we go ;; ;; a step too far, and then we add back on power-of-10 to restore ;; ;; the remainder. ;; ;; ;; ;; NOTES ;; ;; The left-justified variant ignores field width. ;; ;; ;; ;; The code is fully reentrant. ;; ;; ;; ;; This code does not handle numbers which are too large to be ;; ;; displayed in the provided field. If the number is too large, ;; ;; non-digit characters will be displayed in the initial digit ;; ;; position. Also, the run time of this routine may get excessively ;; ;; large, depending on the magnitude of the overflow. ;; ;; ;; ;; When using with PRNUM32, one must either include PRNUM32 before ;; ;; this function, or define the symbol _WITH_PRNUM32. PRNUM32 ;; ;; needs a tiny bit of support from PRNUM16 to handle numbers in ;; ;; the range 65536...99999 correctly. ;; ;; ;; ;; CODESIZE ;; ;; 73 words, including power-of-10 table ;; ;; 80 words, if compiled with PRNUM32. ;; ;; ;; ;; To save code size, you can define the following symbols to omit ;; ;; some variants: ;; ;; ;; ;; _NO_PRNUM16.l: Disables PRNUM16.l. Saves 10 words ;; ;; _NO_PRNUM16.b: Disables PRNUM16.b. Saves 3 words. ;; ;; ;; ;; Defining both symbols saves 17 words total, because it omits ;; ;; some code shared by both routines. ;; ;; ;; ;; STACK USAGE ;; ;; This function uses up to 4 words of stack space. ;; ;; ;; ;; LICENSE ;; ;; GNU General Public License, Version 2.0. ;; ;; ;; ;; This program is free software; you can redistribute it and/or ;; ;; modify it under the terms of the GNU General Public License as ;; ;; published by the Free Software Foundation; either version 2 of the ;; ;; License, or (at your option) any later version. ;; ;; ;; ;; This program is distributed in the hope that it will be useful, ;; ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; ;; General Public License for more details. ;; ;; ;; ;; You should have received a copy of the GNU General Public License ;; ;; along with this program; if not, write to the Free Software ;; ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ;; ;; ------------------------------------------------------------------------ ;; ;; Copyright (c) 2003, Joseph Zbiciak ;; ;; ======================================================================== ;; IF (DEFINED PRNUM16) = 0 0x6ea8 PRNUM16 PROC ;; ---------------------------------------------------------------- ;; ;; PRNUM16.l: Print unsigned, left-justified. ;; ;; ---------------------------------------------------------------- ;; IF (DEFINED _NO_PRNUM16.l) = 0 6ea8 0275 @@l: PSHR R5 ; save return address 6ea9 02bd 0001 @@l1: MVII #$1, R5 ; set R5 to 1 to counteract screen ptr update ; in the 'find initial power of 10' loop 6eab 0272 PSHR R2 6eac 02ba 0005 MVII #5, R2 ; force effective field width to 5. 6eae 0200 0007 B @@z2 ENDI ;; ---------------------------------------------------------------- ;; ;; PRNUM16.b: Print unsigned with leading blanks. ;; ;; ---------------------------------------------------------------- ;; IF (DEFINED _NO_PRNUM16.b) = 0 6eb0 02ab @@bfw: MVI@ R5, R3 6eb1 02aa @@bw: MVI@ R5, R2 6eb2 0275 @@b: PSHR R5 6eb3 01ed @@b1: CLRR R5 ; let the blank loop do its thing 6eb4 000f INCR PC ; skip the PSHR R5 ENDI ;; ---------------------------------------------------------------- ;; ;; PRNUM16.z: Print unsigned with leading zeros. ;; ;; ---------------------------------------------------------------- ;; 6eb5 0275 @@z: PSHR R5 6eb6 0272 @@z1: PSHR R2 6eb7 0271 @@z2: PSHR R1 ;; ---------------------------------------------------------------- ;; ;; Find the initial power of 10 to use for display. ;; ;; Note: For fields wider than 5, fill the extra spots above 5 ;; ;; with blanks or zeros as needed. ;; ;; ---------------------------------------------------------------- ;; 6eb8 02b9 feaa MVII #_PW10+5,R1 ; Point to end of power-of-10 table 6eba 0111 SUBR R2, R1 ; Subtract the field width to get right power 6ebb 0273 PSHR R3 ; save format word IF ((DEFINED _NO_PRNUM16.l) AND (DEFINED _NO_PRNUM16.b)) = 0 6ebc 037d 0002 CMPI #2, R5 ; are we leading with zeros? 6ebe 0209 0008 BNC @@lblnk ; no: then do the loop w/ blanks IF (DEFINED _NO_PRNUM16.l) = 0 6ec0 01ed CLRR R5 ; force R5==0 ENDI ENDI 6ec1 02fb 0080 ADDI #$80, R3 ; yes: do the loop with zeros 6ec3 0200 0003 B @@lblnk 6ec5 0263 @@llp MVO@ R3, R4 ; print a blank/zero IF (DEFINED _NO_PRNUM16.l) = 0 6ec6 012c SUBR R5, R4 ; rewind pointer if needed. ENDI 6ec7 0009 INCR R1 ; get next power of 10 6ec8 0012 @@lblnk DECR R2 ; decrement available digits 6ec9 0204 0007 BEQ @@ldone 6ecb 037a 0005 CMPI #5, R2 ; field too wide? 6ecd 022d 0009 BGE @@llp ; just force blanks/zeros 'till we're narrower. 6ecf 0348 CMP@ R1, R0 ; Is this power of 10 too big? 6ed0 0229 000c BNC @@llp ; Yes: Put a blank and go to next 6ed2 02b3 @@ldone PULR R3 ; restore format word ;; ---------------------------------------------------------------- ;; ;; The digit loop prints at least one digit. It discovers digits ;; ;; by repeated subtraction. ;; ;; ---------------------------------------------------------------- ;; 6ed3 0080 @@digit TSTR R0 ; If the number is zero, print zero and leave 6ed4 020c 0006 BNEQ @@dig1 ; no: print the number 6ed6 009d MOVR R3, R5 ;\ 6ed7 02fd 0080 ADDI #$80, R5 ; |-- print a 0 there. 6ed9 0265 MVO@ R5, R4 ;/ 6eda 0200 000e B @@done IF (DEFINED PRNUM32) OR (DEFINED _WITH_PRNUM32) @@dig1: MOVR R3, R5 ; for first digit only: check to see if BPL @@cont ; we need to add '5'. ADDI #$80+4*8,R5 ; start our digit as one just before '5' B @@spcl ELSE 0x6edc @@dig1: ENDI 6edc 009d @@nxdig MOVR R3, R5 ; save display format word 6edd 02fd 0078 @@cont: ADDI #$80-8, R5 ; start our digit as one just before '0' 0x6edf @@spcl: ;; ---------------------------------------------------------------- ;; ;; Divide by repeated subtraction. This divide is constructed ;; ;; to go "one step too far" and then back up. ;; ;; ---------------------------------------------------------------- ;; 6edf 02fd 0008 @@div: ADDI #8, R5 ; increment our digit 6ee1 0308 SUB@ R1, R0 ; subtract power of 10 6ee2 0221 0004 BC @@div ; loop until we go too far 6ee4 02c8 ADD@ R1, R0 ; add back the extra power of 10. 6ee5 0265 MVO@ R5, R4 ; display the digit. 6ee6 0009 INCR R1 ; point to next power of 10 6ee7 0012 DECR R2 ; any room left in field? 6ee8 0223 000d BPL @@nxdig ; keep going until R2 < 0. 6eea 02b1 @@done: PULR R1 ; restore R1 6eeb 02b2 PULR R2 ; restore R2 6eec 02b7 PULR PC ; return ENDP ENDI ;; ======================================================================== ;; ;; End of File: prnum16.asm ;; ;; ======================================================================== ;; ;__ INCLUDE "util/fillmem.asm" ;;==========================================================================;; ;; Useful Routines ;; ;; Copyright 1999-2002, Joe Zbiciak. ;; ;; ;; ;; This file contains a number of useful routines that you're welcome ;; ;; to use in your own software. Please keep in mind that these routines ;; ;; are licensed under the GNU General Public License, and so if you plan ;; ;; to distribute a program which incorporates these routines, it too must ;; ;; be distributed under the GNU General Public License. ;; ;;==========================================================================;; 6eed 01c0 FILLZERO.lp CLRR R0 6eee 000f INCR PC 6eef 02a8 FILLMEM.vlp MVI@ R5, R0 6ef0 02a9 FILLMEM.lp MVI@ R5, R1 6ef1 02ac FILLMEM.p MVI@ R5, R4 6ef2 0200 0005 B FILLMEM ;; ======================================================================== ;; ;; FILLZERO ;; ;; Fills memory with zeros ;; ;; ;; ;; FILLMEM ;; ;; Fills memory with a constant ;; ;; ;; ;; INPUTS: ;; ;; R0 -- Fill value (FILLMEM only) ;; ;; R1 -- Number of words to fill ;; ;; R4 -- Start of fill area ;; ;; R5 -- Return address ;; ;; ;; ;; OUTPUTS: ;; ;; R0 -- Zeroed if FILLZERO, otherwise untouched. ;; ;; R1 -- Zeroed ;; ;; R4 -- Points to word after fill area ;; ;; ======================================================================== ;; 0x6ef4 CLRSCR PROC 6ef4 02b9 00f0 MVII #$0F0, R1 6ef6 02bc 0200 MVII #$200, R4 6ef8 01c0 FILLZERO CLRR R0 ; Start out with R0 zeroed for FILLZERO 6ef9 0260 FILLMEM MVO@ R0, R4 ; Store R0 out at R4, and move along 6efa 0011 DECR R1 ; Keep going until our count runs out 6efb 022c 0003 BNEQ FILLMEM 6efd 00af JR R5 ; Return to the caller. ENDP ;__ ; INCLUDE "util/hex16.asm" INCLUDE "util/menuinp.asm" ;; ======================================================================== ;; ;; MENUINP: Read controller looking for DISC/Action or Enter, w/debounce ;; ;; R0: Value read from controller ;; ;; S flag: S == 0 if enter, S == 1 if not enter ;; ;; ======================================================================== ;; 0x6efe MENUINP PROC 6efe 0275 PSHR R5 6eff 0004 016c 0256 CALL WAITNOKEY 6f02 01c0 CLRR R0 6f03 0240 017b @@db MVO R0, TMP + 3 6f05 02b8 00c8 MVII #200, R0 6f07 0240 017c MVO R0, TMP + 4 6f09 0004 016c 033d @@disc CALL DBHC 6f0c 0080 TSTR R0 6f0d 0224 000b BEQ @@db 6f0f 0340 017b CMP TMP + 3, R0 6f11 022c 000f BNEQ @@db 6f13 0281 017c MVI TMP + 4, R1 6f15 0011 DECR R1 6f16 0241 017c MVO R1, TMP + 4 6f18 022c 0010 BNEQ @@disc 6f1a 02bc 6f29 MVII #KEYS, R4 6f1c 02ba 0003 MVII #3, R2 6f1e 0360 @@kloop: CMP@ R4, R0 6f1f 0204 0007 BEQ @@leave 6f21 0012 DECR R2 6f22 0223 0005 BPL @@kloop 6f24 0378 0020 CMPI #$20, R0 6f26 022d 001e BGE @@disc 6f28 02b7 @@leave PULR PC ;@@1: PSHR R5 ; B @@disc ENDP ;; ======================================================================== ;; ;; KEYS Look for action keys and 'enter' to exit menu ;; ;; ======================================================================== ;; 6f29 00c0 00a0 0060 KEYS DECLE $C0, $A0, $60, $28 6f2c 0028 ;__ INCLUDE "misc/shltbl.asm" 0x6f2d SHLTBL PROC 6f2d 0001 0002 0004 DECLE $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 6f30 0008 0010 0020 0040 0080 6f35 0100 0200 0400 DECLE $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 6f38 0800 1000 2000 4000 8000 ENDP INCLUDE "os/debounce.asm" ;;==========================================================================;; ;; DBHC -- Read hand-controller inputs. ;; ;; ;; ;; This function previously debounced the inputs. Now it merely returns ;; ;; the current and previous inputs, merged from both controllers. ;; ;; ;; ;; OUTPUTS ;; ;; R0 Controller input ;; ;; R2 Previous controller input ;; ;;==========================================================================;; 0x6f3d DBHC PROC 6f3d 02bc 01fe MVII #$1FE, R4 ; 8 Point to hand controllers 6f3f 02a0 MVI@ R4, R0 ; 8 \_ Read and merge controller inputs 6f40 03e0 XOR@ R4, R0 ; 8 / 6f41 0282 0175 MVI DBOUT, R2 ; 10 Previous input. 6f43 0240 0175 MVO R0, DBOUT ; 11 Store new input. 6f45 00af JR R5 ; 7 ;==== ; 154 ENDP ; EMIT_CST8 0x6f46 CST8 PROC d7b5 0006 CLRC ; patch up INITMEM 6f46 601f DECLE _init_tmp 6f47 9f1e DECLE _init_tmp 6f48 dccd DECLE _init_tmp 6f49 d1d5 DECLE _init_tmp 6f4a d900 DECLE _init_tmp 6f4b df18 DECLE _init_tmp 6f4c 1100 DECLE _init_tmp ENDP ; EMIT_CST16 0x6f4d CST16 PROC 6f4d 02f0 DECLE _init_cst_10 6f4e fa56 DECLE _init_cst_11 6f4f f981 DECLE _init_cst_12 6f50 f000 DECLE _init_cst_13 6f51 39c0 DECLE _init_cst_14 6f52 3fff DECLE _init_cst_15 6f53 fa1e DECLE _init_cst_16 ENDP 0x1c9 _OS.size EQU $ - _OS 0x6f54 _5000.end EQU $ IF ($ < $5000) OR ($ > $7000) ERR "5000 overflow" ENDI 6f54 ffff 6f55 ffff 6f56 ffff 6f57 ffff 6f58 ffff 6f59 ffff 6f5a ffff 6f5b ffff 6f5c ffff 6f5d ffff 6f5e ffff 6f5f ffff 6f60 ffff 6f61 ffff 6f62 ffff 6f63 ffff 6f64 ffff 6f65 ffff 6f66 ffff 6f67 ffff 6f68 ffff 6f69 ffff 6f6a ffff 6f6b ffff 6f6c ffff 6f6d ffff 6f6e ffff 6f6f ffff 6f70 ffff 6f71 ffff 6f72 ffff 6f73 ffff 6f74 ffff 6f75 ffff 6f76 ffff 6f77 ffff 6f78 ffff 6f79 ffff 6f7a ffff 6f7b ffff 6f7c ffff 6f7d ffff 6f7e ffff 6f7f ffff 6f80 ffff 6f81 ffff 6f82 ffff 6f83 ffff 6f84 ffff 6f85 ffff 6f86 ffff 6f87 ffff 6f88 ffff 6f89 ffff 6f8a ffff 6f8b ffff 6f8c ffff 6f8d ffff 6f8e ffff 6f8f ffff 6f90 ffff 6f91 ffff 6f92 ffff 6f93 ffff 6f94 ffff 6f95 ffff 6f96 ffff 6f97 ffff 6f98 ffff 6f99 ffff 6f9a ffff 6f9b ffff 6f9c ffff 6f9d ffff 6f9e ffff 6f9f ffff 6fa0 ffff 6fa1 ffff 6fa2 ffff 6fa3 ffff 6fa4 ffff 6fa5 ffff 6fa6 ffff 6fa7 ffff 6fa8 ffff 6fa9 ffff 6faa ffff 6fab ffff 6fac ffff 6fad ffff 6fae ffff 6faf ffff 6fb0 ffff 6fb1 ffff 6fb2 ffff 6fb3 ffff 6fb4 ffff 6fb5 ffff 6fb6 ffff 6fb7 ffff 6fb8 ffff 6fb9 ffff 6fba ffff 6fbb ffff 6fbc ffff 6fbd ffff 6fbe ffff 6fbf ffff 6fc0 ffff 6fc1 ffff 6fc2 ffff 6fc3 ffff 6fc4 ffff 6fc5 ffff 6fc6 ffff 6fc7 ffff 6fc8 ffff 6fc9 ffff 6fca ffff 6fcb ffff 6fcc ffff 6fcd ffff 6fce ffff 6fcf ffff 6fd0 ffff 6fd1 ffff 6fd2 ffff 6fd3 ffff 6fd4 ffff 6fd5 ffff 6fd6 ffff 6fd7 ffff 6fd8 ffff 6fd9 ffff 6fda ffff 6fdb ffff 6fdc ffff 6fdd ffff 6fde ffff 6fdf ffff 6fe0 ffff 6fe1 ffff 6fe2 ffff 6fe3 ffff 6fe4 ffff 6fe5 ffff 6fe6 ffff 6fe7 ffff 6fe8 ffff 6fe9 ffff 6fea ffff 6feb ffff 6fec ffff 6fed ffff 6fee ffff 6fef ffff 6ff0 ffff 6ff1 ffff 6ff2 ffff 6ff3 ffff 6ff4 ffff 6ff5 ffff 6ff6 ffff 6ff7 ffff 6ff8 ffff 6ff9 ffff 6ffa ffff 6ffb ffff 6ffc ffff 6ffd ffff 6ffe ffff 6fff ffff ;* ======================================================================== *; ;* This program is free software; you can redistribute it and/or modify *; ;* it under the terms of the GNU General Public License as published by *; ;* the Free Software Foundation; either version 2 of the License, or *; ;* (at your option) any later version. *; ;* *; ;* This program is distributed in the hope that it will be useful, *; ;* but WITHOUT ANY WARRANTY; without even the implied warranty of *; ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *; ;* General Public License for more details. *; ;* *; ;* You should have received a copy of the GNU General Public License *; ;* along with this program; if not, write to the Free Software *; ;* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *; ;* ======================================================================== *; ;* Copyright (c) 2007, Joseph Zbiciak *; ;* ======================================================================== *; ERROR SUMMARY - ERRORS DETECTED 0 - WARNINGS 0