Mercurial > hg > Members > kono > nitros9-code
changeset 1864:f351932fa6cd
Added pacos9
author | boisy |
---|---|
date | Tue, 26 Jul 2005 01:17:24 +0000 |
parents | ebec41c32d7d |
children | c6426b9ca0da |
files | 3rdparty/packages/pacos9/board90.a 3rdparty/packages/pacos9/caged90.a 3rdparty/packages/pacos9/check90.a 3rdparty/packages/pacos9/ghosts90.a 3rdparty/packages/pacos9/main90.a 3rdparty/packages/pacos9/makefile 3rdparty/packages/pacos9/movpac90.a 3rdparty/packages/pacos9/score90.a 3rdparty/packages/pacos9/scrns90.a 3rdparty/packages/pacos9/setup90.a |
diffstat | 10 files changed, 5854 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/board90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,1248 @@ + + + NAM BOARD + TTL Routine to draw playing board + +* Program segment to be compiled using Level II RMA +* This is not a mainline program segment +* Written by Larry Olson + + IFP1 +* use /h0/defs/os9defs.a + ENDc + +STACK EQU 100 + + PSECT BOARD,0,0,0,STACK,BOARDC + + VSECT + +* Local variables + +XTEMP RMB 2 + + RMB STACK + + + ENDSECT + + +* These are the FCB's for board #1 + +B1STRT fcb $1b,$32,1 + fcb $1b,$40,0,36,0,83,$1b,$46,0,36,0,8 + fcb $1b,$46,2,88,0,8,$1b,$46,2,88,0,83 + fcb $1b,$46,2,18,0,83,$1b,$46,2,18,0,69 + fcb $1b,$46,2,82,0,69,$1b,$46,2,82,0,11 + fcb $1b,$46,1,106,0,11,$1b,$46,1,106,0,29 + fcb $1b,$46,1,18,0,29,$1b,$46,1,18,0,11 + fcb $1b,$46,0,42,0,11,$1b,$46,0,42,0,69 + fcb $1b,$46,0,106,0,69,$1b,$46,0,106,0,83 + fcb $1b,$46,0,36,0,83 + + fcb $1b,$40,0,36,0,96,$1b,$46,0,36,0,180 + fcb $1b,$46,2,88,0,180,$1b,$46,2,88,0,96 + fcb $1b,$46,2,18,0,96,$1b,$46,2,18,0,110 + fcb $1b,$46,2,82,0,110,$1b,$46,2,82,0,177 + fcb $1b,$46,0,42,0,177,$1b,$46,0,42,0,110 + fcb $1b,$46,0,106,0,110,$1b,$46,0,106,0,96 + fcb $1b,$46,0,36,0,96 + +B11 fcb $1b,$40,0,66,0,24,$1b,$48,0,138,0,38 + +B12 fcb $1b,$40,0,162,0,24,$1b,$48,0,250,0,29 + +B14 fcb $1b,$40,1,130,0,24,$1b,$48,1,218,0,29 + +B15 fcb $1b,$40,1,242,0,24,$1b,$48,2,58,0,38 + +B16 fcb $1b,$40,0,66,0,51,$1b,$48,0,138,0,56 + +B17 fcb $1b,$40,0,162,0,42,$1b,$46,0,202,0,42 + fcb $1b,$46,0,202,0,60,$1b,$46,0,250,0,60 + fcb $1b,$46,0,250,0,65,$1b,$46,0,202,0,65 + fcb $1b,$46,0,202,0,83,$1b,$46,0,130,0,83 + fcb $1b,$46,0,130,0,69,$1b,$46,0,162,0,69 + fcb $1b,$46,0,162,0,42 + +B18 fcb $1b,$40,0,226,0,42,$1b,$46,1,154,0,42 + fcb $1b,$46,1,154,0,47,$1b,$46,1,106,0,47 + fcb $1b,$46,1,106,0,65,$1b,$46,1,18,0,65 + fcb $1b,$46,1,18,0,47,$1b,$46,0,226,0,47 + fcb $1b,$46,0,226,0,42 + +B19 fcb $1b,$40,1,178,0,42,$1b,$46,1,218,0,42 + fcb $1b,$46,1,218,0,69,$1b,$46,1,250,0,69 + fcb $1b,$46,1,250,0,83,$1b,$46,1,178,0,83 + fcb $1b,$46,1,178,0,65,$1b,$46,1,130,0,65 + fcb $1b,$46,1,130,0,60,$1b,$46,1,178,0,60 + fcb $1b,$46,1,178,0,42 + +B110 fcb $1b,$40,1,242,0,51,$1b,$48,2,58,0,56 + +B112 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B115 fcb $1b,$40,0,130,0,96,$1b,$48,0,202,0,110 + +B116 fcb $1b,$40,1,178,0,96,$1b,$48,1,250,0,110 + +B118 fcb $1b,$40,0,66,0,123,$1b,$46,0,138,0,123 + fcb $1b,$46,0,138,0,128,$1b,$46,0,90,0,128 + fcb $1b,$46,0,90,0,146,$1b,$46,0,66,0,146 + fcb $1b,$46,0,66,0,123 + +B119 fcb $1b,$40,0,162,0,123,$1b,$48,0,250,0,128 + +B120 fcb $1b,$40,0,226,0,105,$1b,$46,1,154,0,105 + fcb $1b,$46,1,154,0,110,$1b,$46,1,106,0,110 + fcb $1b,$46,1,106,0,128,$1b,$46,1,18,0,128 + fcb $1b,$46,1,18,0,110,$1b,$46,0,226,0,110 + fcb $1b,$46,0,226,0,105 + +B121 fcb $1b,$40,1,130,0,123,$1b,$48,1,218,0,128 + +B122 fcb $1b,$40,1,242,0,123,$1b,$46,2,58,0,123 + fcb $1b,$46,2,58,0,146,$1b,$46,2,34,0,146 + fcb $1b,$46,2,34,0,128,$1b,$46,1,242,0,128 + fcb $1b,$46,1,242,0,123 + +B123 fcb $1b,$40,0,66,0,159,$1b,$46,0,114,0,159 + fcb $1b,$46,0,114,0,141,$1b,$46,0,202,0,141 + fcb $1b,$46,0,202,0,159,$1b,$46,0,250,0,159 + fcb $1b,$46,0,250,0,164,$1b,$46,0,66,0,164 + fcb $1b,$46,0,66,0,159 + +B124 fcb $1b,$40,0,226,0,141,$1b,$46,1,154,0,141 + fcb $1b,$46,1,154,0,146,$1b,$46,1,106,0,146 + fcb $1b,$46,1,106,0,164,$1b,$46,1,18,0,164 + fcb $1b,$46,1,18,0,146,$1b,$46,0,226,0,146 + fcb $1b,$46,0,226,0,141 + +B125 fcb $1b,$40,1,178,0,141,$1b,$46,2,10,0,141 + fcb $1b,$46,2,10,0,159,$1b,$46,2,58,0,159 + fcb $1b,$46,2,58,0,164,$1b,$46,1,130,0,164 + fcb $1b,$46,1,130,0,159,$1b,$46,1,178,0,159 + fcb $1b,$46,1,178,0,141 + +B1END equ *-B1STRT + +* (board #2) +B2STRT fcb $1b,$32,1 + fcb $1b,$40,1,42,0,8,$1b,$46,0,36,0,8 + fcb $1b,$46,0,36,0,180,$1b,$46,1,58,0,180 + fcb $1b,$46,1,58,0,177,$1b,$46,0,42,0,177 + fcb $1b,$46,0,42,0,146,$1b,$46,0,74,0,146 + fcb $1b,$46,0,74,0,141,$1b,$46,0,42,0,141 + fcb $1b,$46,0,42,0,11,$1b,$46,0,162,0,11 + fcb $1b,$46,0,162,0,20,$1b,$46,1,42,0,20 + fcb $1b,$46,1,42,0,8 + + fcb $1b,$40,1,66,0,8,$1b,$46,2,88,0,8 + fcb $1b,$46,2,88,0,180,$1b,$46,1,82,0,180 + fcb $1b,$46,1,82,0,177,$1b,$46,2,82,0,177 + fcb $1b,$46,2,82,0,146,$1b,$46,2,50,0,146 + fcb $1b,$46,2,50,0,141,$1b,$46,2,82,0,141 + fcb $1b,$46,2,82,0,11,$1b,$46,1,218,0,11 + fcb $1b,$46,1,218,0,20,$1b,$46,1,66,0,20 + fcb $1b,$46,1,66,0,8 + +B21 fcb $1b,$40,0,66,0,24,$1b,$48,0,138,0,29 + +B22 fcb $1b,$40,0,66,0,42,$1b,$48,0,138,0,47 + +B23 fcb $1b,$40,0,66,0,60,$1b,$46,0,162,0,60 + fcb $1b,$46,0,162,0,33,$1b,$46,0,202,0,33 + fcb $1b,$46,0,202,0,60,$1b,$46,1,26,0,60 + fcb $1b,$46,1,26,0,65,$1b,$46,0,202,0,65 + fcb $1b,$46,0,202,0,83,$1b,$46,0,162,0,83 + fcb $1b,$46,0,162,0,65,$1b,$46,0,66,0,65 + fcb $1b,$46,0,66,0,60 + +B24 fcb $1b,$40,0,226,0,33,$1b,$46,1,154,0,33 + fcb $1b,$46,1,154,0,47,$1b,$46,1,74,0,47 + fcb $1b,$46,1,74,0,65,$1b,$46,1,50,0,65 + fcb $1b,$46,1,50,0,47,$1b,$46,0,226,0,47 + fcb $1b,$46,0,226,0,33 + +B25 fcb $1b,$40,1,98,0,60,$1b,$46,1,178,0,60 + fcb $1b,$46,1,178,0,33,$1b,$46,1,218,0,33 + fcb $1b,$46,1,218,0,60,$1b,$46,2,58,0,60 + fcb $1b,$46,2,58,0,65,$1b,$46,1,218,0,65 + fcb $1b,$46,1,218,0,83,$1b,$46,1,178,0,83 + fcb $1b,$46,1,178,0,65,$1b,$46,1,98,0,65 + fcb $1b,$46,1,98,0,60 + +B26 fcb $1b,$40,1,242,0,24,$1b,$48,2,58,0,29 + +B27 fcb $1b,$40,1,242,0,42,$1b,$48,2,58,0,47 + +B28 fcb $1b,$40,0,66,0,78,$1b,$48,0,90,0,110 + +B29 fcb $1b,$40,0,114,0,78,$1b,$48,0,138,0,110 + +B210 fcb $1b,$40,0,162,0,96,$1b,$48,0,202,0,110 + +B211 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B212 fcb $1b,$40,1,178,0,96,$1b,$48,1,218,0,110 + +B213 fcb $1b,$40,1,242,0,78,$1b,$48,2,10,0,110 + +B214 fcb $1b,$40,2,34,0,78,$1b,$48,2,58,0,110 + +B215 fcb $1b,$40,0,66,0,123,$1b,$46,0,138,0,123 + fcb $1b,$46,0,138,0,146,$1b,$46,0,98,0,146 + fcb $1b,$46,0,98,0,128,$1b,$46,0,66,0,128 + fcb $1b,$46,0,66,0,123 + +B216 fcb $1b,$40,0,162,0,123,$1b,$48,1,26,0,128 + +B217 fcb $1b,$40,0,226,0,105,$1b,$46,1,154,0,105 + fcb $1b,$46,1,154,0,110,$1b,$46,1,74,0,110 + fcb $1b,$46,1,74,0,128,$1b,$46,1,50,0,128 + fcb $1b,$46,1,50,0,110,$1b,$46,0,226,0,110 + fcb $1b,$46,0,226,0,105 + +B218 fcb $1b,$40,1,98,0,123,$1b,$48,1,218,0,128 + +B219 fcb $1b,$40,1,242,0,123,$1b,$46,2,58,0,123 + fcb $1b,$46,2,58,0,128,$1b,$46,2,26,0,128 + fcb $1b,$46,2,26,0,146,$1b,$46,1,242,0,146 + fcb $1b,$46,1,242,0,123 + +B220 fcb $1b,$40,0,66,0,159,$1b,$46,0,162,0,159 + fcb $1b,$46,0,162,0,141,$1b,$46,0,202,0,141 + fcb $1b,$46,0,202,0,159,$1b,$46,1,58,0,159 + fcb $1b,$46,1,58,0,164,$1b,$46,0,66,0,164 + fcb $1b,$46,0,66,0,159 + +B221 fcb $1b,$40,0,226,0,141,$1b,$48,1,154,0,146 + +B222 fcb $1b,$40,1,82,0,159,$1b,$46,1,178,0,159 + fcb $1b,$46,1,178,0,141,$1b,$46,1,218,0,141 + fcb $1b,$46,1,218,0,159,$1b,$46,2,58,0,159 + fcb $1b,$46,2,58,0,164,$1b,$46,1,82,0,164 + fcb $1b,$46,1,82,0,159 + +B2END equ *-B2STRT + + +* These draw commands for borad #3 + +B3STRT fcb $1b,$32,1 * TOPBRD + fcb $1b,$40,0,36,0,83,$1b,$46,0,36,0,80 + fcb $1b,$46,0,132,0,80,$1b,$46,0,132,0,72 + fcb $1b,$46,0,36,0,72,$1b,$46,0,36,0,8 + fcb $1b,$46,2,89,0,8,$1b,$46,2,89,0,72 + fcb $1b,$46,1,248,0,72,$1b,$46,1,248,0,80 + fcb $1b,$46,2,89,0,80,$1b,$46,2,89,0,83 + fcb $1b,$46,1,242,0,83,$1b,$46,1,242,0,69 + fcb $1b,$46,2,83,0,69,$1b,$46,2,83,0,11 + fcb $1b,$46,1,74,0,11,$1b,$46,1,74,0,29 + fcb $1b,$46,1,50,0,29,$1b,$46,1,50,0,11 + fcb $1b,$46,0,42,0,11,$1b,$46,0,42,0,69 + fcb $1b,$46,0,138,0,69,$1b,$46,0,138,0,83 + fcb $1b,$46,0,36,0,83 +* + fcb $1b,$40,0,36,0,96,$1b,$46,0,138,0,96 + fcb $1b,$46,0,138,0,110,$1b,$46,0,42,0,110 + fcb $1b,$46,0,42,0,141,$1b,$46,0,74,0,141 + fcb $1b,$46,0,74,0,146,$1b,$46,0,42,0,146 + fcb $1b,$46,0,42,0,177,$1b,$46,2,83,0,177 + fcb $1b,$46,2,83,0,146,$1b,$46,2,50,0,146 + fcb $1b,$46,2,50,0,141,$1b,$46,2,83,0,141 + fcb $1b,$46,2,83,0,110,$1b,$46,1,242,0,110 + fcb $1b,$46,1,242,0,96,$1b,$46,2,89,0,96 + fcb $1b,$46,2,89,0,99,$1b,$46,1,248,0,99 + fcb $1b,$46,1,248,0,107,$1b,$46,2,89,0,107 + fcb $1b,$46,2,89,0,180,$1b,$46,0,36,0,180 + fcb $1b,$46,0,36,0,107,$1b,$46,0,132,0,107 + fcb $1b,$46,0,132,0,99,$1b,$46,0,36,0,99 + fcb $1b,$46,0,36,0,96 + +B31 fcb $1b,$40,0,66,0,24,$1b,$48,0,138,0,38 + +B32 fcb $1b,$40,0,162,0,24,$1b,$48,1,26,0,29 + +B33 fcb $1b,$40,1,98,0,24,$1b,$48,1,218,0,29 + +B34 fcb $1b,$40,1,242,0,24,$1b,$48,2,58,0,38 + +B35 fcb $1b,$40,0,66,0,51,$1b,$48,0,138,0,56 + +B36 fcb $1b,$40,0,162,0,42,$1b,$46,0,202,0,42 + fcb $1b,$46,0,202,0,60,$1b,$46,1,26,0,60 + fcb $1b,$46,1,26,0,65,$1b,$46,0,202,0,65 + fcb $1b,$46,0,202,0,83,$1b,$46,0,162,0,83 + fcb $1b,$46,0,162,0,42 + +B37 fcb $1b,$40,0,226,0,42,$1b,$46,1,154,0,42 + fcb $1b,$46,1,154,0,47,$1b,$46,1,74,0,47 + fcb $1b,$46,1,74,0,65,$1b,$46,1,50,0,65 + fcb $1b,$46,1,50,0,47,$1b,$46,0,226,0,47 + fcb $1b,$46,0,226,0,42 + +B38 fcb $1b,$40,1,98,0,60,$1b,$46,1,178,0,60 + fcb $1b,$46,1,178,0,42,$1b,$46,1,218,0,42 + fcb $1b,$46,1,218,0,83,$1b,$46,1,178,0,83 + fcb $1b,$46,1,178,0,65,$1b,$46,1,98,0,65 + fcb $1b,$46,1,98,0,60 + +B39 fcb $1b,$40,1,242,0,51,$1b,$48,2,58,0,56 + +B310 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B311 fcb $1b,$40,0,162,0,96,$1b,$48,0,202,0,110 + +B312 fcb $1b,$40,0,226,0,105,$1b,$46,1,154,0,105 + fcb $1b,$46,1,154,0,110,$1b,$46,1,74,0,110 + fcb $1b,$46,1,74,0,128,$1b,$46,1,50,0,128 + fcb $1b,$46,1,50,0,110,$1b,$46,0,226,0,110 + fcb $1b,$46,0,226,0,105 + +B313 fcb $1b,$40,1,178,0,96,$1b,$48,1,218,0,110 + +B314 fcb $1b,$40,0,66,0,123,$1b,$46,0,138,0,123 + fcb $1b,$46,0,138,0,146,$1b,$46,0,98,0,146 + fcb $1b,$46,0,98,0,128,$1b,$46,0,66,0,128 + fcb $1b,$46,0,66,0,123 + +B315 fcb $1b,$40,0,162,0,123,$1b,$48,1,26,0,128 + +B316 fcb $1b,$40,1,98,0,123,$1b,$48,1,218,0,128 + +B317 fcb $1b,$40,1,242,0,123,$1b,$46,2,58,0,123 + fcb $1b,$46,2,58,0,128,$1b,$46,2,26,0,128 + fcb $1b,$46,2,26,0,146,$1b,$46,1,242,0,146 + fcb $1b,$46,1,242,0,123 + +B318 fcb $1b,$40,0,66,0,159,$1b,$46,0,162,0,159 + fcb $1b,$46,0,162,0,141,$1b,$46,0,202,0,141 + fcb $1b,$46,0,202,0,159,$1b,$46,1,26,0,159 + fcb $1b,$46,1,26,0,164,$1b,$46,0,66,0,164 + fcb $1b,$46,0,66,0,159 + +B319 fcb $1b,$40,0,226,0,141,$1b,$46,1,154,0,141 + fcb $1b,$46,1,154,0,146,$1b,$46,1,74,0,146 + fcb $1b,$46,1,74,0,164,$1b,$46,1,50,0,164 + fcb $1b,$46,1,50,0,146,$1b,$46,0,226,0,146 + fcb $1b,$46,0,226,0,141 + +B320 fcb $1b,$40,1,98,0,159,$1b,$46,1,178,0,159 + fcb $1b,$46,1,178,0,141,$1b,$46,1,218,0,141 + fcb $1b,$46,1,218,0,159,$1b,$46,2,58,0,159 + fcb $1b,$46,2,58,0,164,$1b,$46,1,98,0,164 + fcb $1b,$46,1,98,0,159 + +B3END equ *-B3STRT + + +* These are the FCB's for board #4 + +B4STRT fcb $1b,$32,1 + fcb $1b,$40,1,42,0,8,$1b,$46,0,36,0,8 + fcb $1b,$46,0,36,0,180,$1b,$46,1,58,0,180 + fcb $1b,$46,1,58,0,177,$1b,$46,0,42,0,177 + fcb $1b,$46,0,42,0,146,$1b,$46,0,90,0,146 + fcb $1b,$46,0,90,0,141,$1b,$46,0,42,0,141 + fcb $1b,$46,0,42,0,110,$1b,$46,0,138,0,110 + fcb $1b,$46,0,138,0,105,$1b,$46,0,58,0,105 + fcb $1b,$46,0,58,0,74,$1b,$46,0,138,0,74 + fcb $1b,$46,0,138,0,69,$1b,$46,0,42,0,69 + fcb $1b,$46,0,42,0,11,$1b,$46,1,42,0,11 + fcb $1b,$46,1,42,0,8 + + fcb $1b,$40,1,66,0,8,$1b,$46,2,88,0,8 + fcb $1b,$46,2,88,0,180,$1b,$46,1,82,0,180 + fcb $1b,$46,1,82,0,177,$1b,$46,2,82,0,177 + fcb $1b,$46,2,82,0,146,$1b,$46,2,34,0,146 + fcb $1b,$46,2,34,0,141,$1b,$46,2,82,0,141 + fcb $1b,$46,2,82,0,110,$1b,$46,1,242,0,110 + fcb $1b,$46,1,242,0,105,$1b,$46,2,66,0,105 + fcb $1b,$46,2,66,0,74,$1b,$46,1,242,0,74 + fcb $1b,$46,1,242,0,69,$1b,$46,2,82,0,69 + fcb $1b,$46,2,82,0,11,$1b,$46,1,66,0,11 + fcb $1b,$46,1,66,0,8 + + +B41 fcb $1b,$40,0,66,0,24,$1b,$48,0,90,0,38 + +B42 fcb $1b,$40,0,114,0,24,$1b,$48,0,138,0,38 + +B43 fcb $1b,$40,0,162,0,24,$1b,$46,0,202,0,24 + fcb $1b,$46,0,202,0,42,$1b,$46,0,234,0,42 + fcb $1b,$46,0,234,0,47,$1b,$46,0,162,0,47 + fcb $1b,$46,0,162,0,24 + +B44 fcb $1b,$40,0,226,0,24,$1b,$48,1,42,0,29 + +B45 fcb $1b,$40,1,66,0,24,$1b,$48,1,154,0,29 + +B46 fcb $1b,$40,1,2,0,42,$1b,$48,1,122,0,47 + +B47 fcb $1b,$40,1,178,0,24,$1b,$46,1,218,0,24 + fcb $1b,$46,1,218,0,47,$1b,$46,1,146,0,47 + fcb $1b,$46,1,146,0,42,$1b,$46,1,178,0,42 + fcb $1b,$46,1,178,0,24 + +B48 fcb $1b,$40,1,242,0,24,$1b,$48,2,10,0,38 + +B49 fcb $1b,$40,2,34,0,24,$1b,$48,2,58,0,38 + +B410 fcb $1b,$40,0,66,0,51,$1b,$48,0,138,0,56 + +B411 fcb $1b,$40,1,242,0,51,$1b,$48,2,58,0,56 + +B412 fcb $1b,$40,0,162,0,60,$1b,$46,1,42,0,60 + fcb $1b,$46,1,42,0,65,$1b,$46,0,202,0,65 + fcb $1b,$46,0,202,0,83,$1b,$46,0,162,0,83 + fcb $1b,$46,0,162,0,60 + +B413 fcb $1b,$40,1,66,0,60,$1b,$46,1,218,0,60 + fcb $1b,$46,1,218,0,83,$1b,$46,1,178,0,83 + fcb $1b,$46,1,178,0,65,$1b,$46,1,66,0,65 + fcb $1b,$46,1,66,0,60 + +B414 fcb $1b,$40,0,82,0,87,$1b,$48,0,138,0,92 + +B415 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B416 fcb $1b,$40,1,242,0,87,$1b,$48,2,42,0,92 + +B417 fcb $1b,$40,0,162,0,96,$1b,$48,0,202,0,110 + +B418 fcb $1b,$40,0,226,0,105,$1b,$46,1,154,0,105 + fcb $1b,$46,1,154,0,110,$1b,$46,1,74,0,110 + fcb $1b,$46,1,74,0,128,$1b,$46,1,50,0,128 + fcb $1b,$46,1,50,0,110,$1b,$46,0,226,0,110 + fcb $1b,$46,0,226,0,105 + +B419 fcb $1b,$40,1,178,0,96,$1b,$48,1,218,0,110 + +B420 fcb $1b,$40,0,66,0,123,$1b,$48,0,138,0,128 + +B421 fcb $1b,$40,0,226,0,123,$1b,$48,1,26,0,128 + +B422 fcb $1b,$40,1,98,0,123,$1b,$48,1,154,0,128 + +B423 fcb $1b,$40,1,242,0,123,$1b,$48,2,58,0,128 + +B424 fcb $1b,$40,0,162,0,123,$1b,$46,0,202,0,123 + fcb $1b,$46,0,202,0,164,$1b,$46,0,162,0,164 + fcb $1b,$46,0,162,0,146,$1b,$46,0,114,0,146 + fcb $1b,$46,0,114,0,141,$1b,$46,0,162,0,141 + fcb $1b,$46,0,162,0,123 + +B425 fcb $1b,$40,1,178,0,123,$1b,$46,1,218,0,123 + fcb $1b,$46,1,218,0,141,$1b,$46,2,10,0,141 + fcb $1b,$46,2,10,0,146,$1b,$46,1,218,0,146 + fcb $1b,$46,1,218,0,164,$1b,$46,1,178,0,164 + fcb $1b,$46,1,178,0,123 + +B426 fcb $1b,$40,0,226,0,141,$1b,$48,1,154,0,146 + +B427 fcb $1b,$40,0,66,0,159,$1b,$48,0,138,0,164 + +B428 fcb $1b,$40,0,226,0,159,$1b,$48,1,58,0,164 + +B429 fcb $1b,$40,1,82,0,159,$1b,$48,1,154,0,164 + +B430 fcb $1b,$40,1,242,0,159,$1b,$48,2,58,0,164 + +B4END equ *-B4STRT + + + +* (board #5) +B5STRT fcb $1b,$32,1 + fcb $1b,$40,0,36,0,83,$1b,$46,0,36,0,8 + fcb $1b,$46,2,88,0,8,$1b,$46,2,88,0,83 + fcb $1b,$46,1,242,0,83,$1b,$46,1,242,0,78 + fcb $1b,$46,2,82,0,78,$1b,$46,2,82,0,11 + + fcb $1b,$46,1,74,0,11,$1b,$46,1,74,0,29 + fcb $1b,$46,1,50,0,29,$1b,$46,1,50,0,11 + + fcb $1b,$46,0,42,0,11,$1b,$46,0,42,0,78 + fcb $1b,$46,0,138,0,78,$1b,$46,0,138,0,83 + fcb $1b,$46,0,36,0,83 +* Bottom half of board + fcb $1b,$40,0,36,0,96,$1b,$46,0,36,0,180 + fcb $1b,$46,2,88,0,180,$1b,$46,2,88,0,96 + fcb $1b,$46,2,34,0,96,$1b,$46,2,34,0,101 + fcb $1b,$46,2,82,0,101,$1b,$46,2,82,0,177 + + fcb $1b,$46,1,74,0,177,$1b,$46,1,74,0,159 + + fcb $1b,$46,1,50,0,159,$1b,$46,1,50,0,177 + fcb $1b,$46,0,42,0,177,$1b,$46,0,42,0,101 + fcb $1b,$46,0,90,0,101,$1b,$46,0,90,0,96 + fcb $1b,$46,0,36,0,96 + +B51 fcb $1b,$40,0,114,0,24,$1b,$48,1,26,0,29 + +B52 fcb $1b,$40,1,98,0,24,$1b,$48,2,10,0,29 + +B53 fcb $1b,$40,0,66,0,24,$1b,$46,0,90,0,24 + fcb $1b,$46,0,90,0,42,$1b,$46,0,138,0,42 + fcb $1b,$46,0,138,0,47,$1b,$46,0,90,0,47 + fcb $1b,$46,0,90,0,65,$1b,$46,0,66,0,65 + fcb $1b,$46,0,66,0,24 + +B54 fcb $1b,$40,0,114,0,60,$1b,$46,0,162,0,60 + fcb $1b,$46,0,162,0,42,$1b,$46,0,202,0,42 + fcb $1b,$46,0,202,0,60,$1b,$46,1,26,0,60 + fcb $1b,$46,1,26,0,65,$1b,$46,0,202,0,65 + fcb $1b,$46,0,202,0,74,$1b,$46,0,162,0,74 + fcb $1b,$46,0,162,0,65,$1b,$46,0,114,0,65 + fcb $1b,$46,0,114,0,60 + +B55 fcb $1b,$40,1,98,0,60,$1b,$46,1,178,0,60 + fcb $1b,$46,1,178,0,42,$1b,$46,1,218,0,42 + fcb $1b,$46,1,218,0,60,$1b,$46,2,10,0,60 + fcb $1b,$46,2,10,0,65,$1b,$46,1,218,0,65 + fcb $1b,$46,1,218,0,74,$1b,$46,1,178,0,74 + fcb $1b,$46,1,178,0,65,$1b,$46,1,98,0,65 + fcb $1b,$46,1,98,0,60 + +B56 fcb $1b,$40,1,242,0,42,$1b,$46,2,34,0,42 + fcb $1b,$46,2,34,0,24,$1b,$46,2,58,0,24 + fcb $1b,$46,2,58,0,65,$1b,$46,2,34,0,65 + fcb $1b,$46,2,34,0,47,$1b,$46,1,242,0,47 + fcb $1b,$46,1,242,0,42 + +B57 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B58 fcb $1b,$40,0,114,0,96,$1b,$48,0,138,0,110 + + +B59 fcb $1b,$40,0,66,0,114,$1b,$46,0,90,0,114 + fcb $1b,$46,0,90,0,141,$1b,$46,0,138,0,141 + fcb $1b,$46,0,138,0,146,$1b,$46,0,66,0,146 + fcb $1b,$46,0,66,0,114 + +B510 fcb $1b,$40,0,114,0,123,$1b,$46,0,162,0,123 + fcb $1b,$46,0,162,0,87,$1b,$46,0,202,0,87 + fcb $1b,$46,0,202,0,105,$1b,$46,0,250,0,105 + fcb $1b,$46,0,250,0,110,$1b,$46,0,202,0,110 + fcb $1b,$46,0,202,0,146,$1b,$46,0,162,0,146 + fcb $1b,$46,0,162,0,128,$1b,$46,0,114,0,128 + fcb $1b,$46,0,114,0,123 + +B511 fcb $1b,$40,0,226,0,123,$1b,$46,1,18,0,123 + fcb $1b,$46,1,18,0,105,$1b,$46,1,106,0,105 + fcb $1b,$46,1,106,0,123,$1b,$46,1,154,0,123 + fcb $1b,$46,1,154,0,128,$1b,$46,1,98,0,128 + fcb $1b,$46,1,98,0,110,$1b,$46,1,26,0,110 + fcb $1b,$46,1,26,0,128,$1b,$46,0,226,0,128 + fcb $1b,$46,0,226,0,123 + +B512 fcb $1b,$40,1,130,0,105,$1b,$46,1,178,0,105 + fcb $1b,$46,1,178,0,87,$1b,$46,1,218,0,87 + fcb $1b,$46,1,218,0,123,$1b,$46,2,10,0,123 + fcb $1b,$46,2,10,0,128,$1b,$46,1,218,0,128 + fcb $1b,$46,1,218,0,146,$1b,$46,1,178,0,146 + fcb $1b,$46,1,178,0,110,$1b,$46,1,130,0,110 + fcb $1b,$46,1,130,0,105 + + +B513 fcb $1b,$40,1,242,0,96,$1b,$48,2,10,0,110 + +B514 fcb $1b,$40,1,242,0,141,$1b,$46,2,34,0,141 + fcb $1b,$46,2,34,0,114,$1b,$46,2,58,0,114 + fcb $1b,$46,2,58,0,146,$1b,$46,1,242,0,146 + fcb $1b,$46,1,242,0,141 + +B515 fcb $1b,$40,0,66,0,159,$1b,$48,1,26,0,164 + +B516 fcb $1b,$40,1,98,0,159,$1b,$48,2,58,0,164 + +B517 fcb $1b,$40,0,226,0,42,$1b,$46,1,154,0,42 + fcb $1b,$46,1,154,0,47,$1b,$46,1,74,0,47 + fcb $1b,$46,1,74,0,65,$1b,$46,1,50,0,65 + fcb $1b,$46,1,50,0,47,$1b,$46,0,226,0,47 + fcb $1b,$46,0,226,0,42 + +B518 fcb $1b,$40,0,226,0,141,$1b,$46,1,50,0,141 + fcb $1b,$46,1,50,0,123,$1b,$46,1,74,0,123 + fcb $1b,$46,1,74,0,141,$1b,$46,1,154,0,141 + fcb $1b,$46,1,154,0,146,$1b,$46,0,226,0,146 + fcb $1b,$46,0,226,0,141 + +B5END equ *-B5STRT + + + +* These fcb's are for board #6 + +B6STRT fcb $1b,$32,1 + fcb $1b,$40,1,42,0,8,$1b,$46,0,36,0,8 + fcb $1b,$46,0,36,0,180,$1b,$46,1,58,0,180 + fcb $1b,$46,1,58,0,177,$1b,$46,0,42,0,177 + fcb $1b,$46,0,42,0,11,$1b,$46,1,42,0,11 + fcb $1b,$46,1,42,0,8 + + fcb $1b,$40,1,66,0,8,$1b,$46,2,88,0,8 + fcb $1b,$46,2,88,0,180,$1b,$46,1,82,0,180 + fcb $1b,$46,1,82,0,177,$1b,$46,2,82,0,177 + fcb $1b,$46,2,82,0,11,$1b,$46,1,66,0,11 + fcb $1b,$46,1,66,0,8 + +B61 fcb $1b,$40,0,66,0,24,$1b,$46,0,138,0,24 + fcb $1b,$46,0,138,0,47,$1b,$46,0,114,0,47 + fcb $1b,$46,0,114,0,29,$1b,$46,0,66,0,29 + fcb $1b,$46,0,66,0,24 + +B62 fcb $1b,$40,0,162,0,24,$1b,$46,0,234,0,24 + fcb $1b,$46,0,234,0,29,$1b,$46,0,186,0,29 + fcb $1b,$46,0,186,0,47,$1b,$46,0,162,0,47 + fcb $1b,$46,0,162,0,24 + +B63 fcb $1b,$40,1,2,0,24,$1b,$48,1,42,0,29 + +B64 fcb $1b,$40,1,66,0,24,$1b,$48,1,122,0,29 + +B65 fcb $1b,$40,1,146,0,24,$1b,$46,1,218,0,24 + fcb $1b,$46,1,218,0,47,$1b,$46,1,194,0,47 + fcb $1b,$46,1,194,0,29,$1b,$46,1,146,0,29 + fcb $1b,$46,1,146,0,24 + +B66 fcb $1b,$40,1,242,0,24,$1b,$46,2,58,0,24 + fcb $1b,$46,2,58,0,29,$1b,$46,2,10,0,29 + fcb $1b,$46,2,10,0,47,$1b,$46,1,242,0,47 + fcb $1b,$46,1,242,0,24 + +B67 fcb $1b,$40,0,66,0,42,$1b,$46,0,90,0,42 + fcb $1b,$46,0,90,0,60,$1b,$46,0,138,0,60 + fcb $1b,$46,0,138,0,65,$1b,$46,0,66,0,65 + fcb $1b,$46,0,66,0,42 + +B68 fcb $1b,$40,0,210,0,42,$1b,$46,0,234,0,42 + fcb $1b,$46,0,234,0,65,$1b,$46,0,162,0,65 + fcb $1b,$46,0,162,0,60,$1b,$46,0,210,0,60 + fcb $1b,$46,0,210,0,42 + +B69 fcb $1b,$40,1,2,0,42,$1b,$46,1,122,0,42 + fcb $1b,$46,1,122,0,47,$1b,$46,1,74,0,47 + fcb $1b,$46,1,74,0,65,$1b,$46,1,50,0,65 + fcb $1b,$46,1,50,0,47,$1b,$46,1,2,0,47 + fcb $1b,$46,1,2,0,42 + +B610 fcb $1b,$40,1,2,0,60,$1b,$48,1,26,0,65 + +B611 fcb $1b,$40,1,98,0,60,$1b,$48,1,122,0,65 + +B612 fcb $1b,$40,1,146,0,42,$1b,$46,1,170,0,42 + fcb $1b,$46,1,170,0,60,$1b,$46,1,218,0,60 + fcb $1b,$46,1,218,0,65,$1b,$46,1,146,0,65 + fcb $1b,$46,1,146,0,42 + +B613 fcb $1b,$40,2,34,0,42,$1b,$46,2,58,0,42 + fcb $1b,$46,2,58,0,65,$1b,$46,1,242,0,65 + fcb $1b,$46,1,242,0,60,$1b,$46,2,34,0,60 + fcb $1b,$46,2,34,0,42 + +B614 fcb $1b,$40,0,66,0,78,$1b,$48,0,90,0,83 + +B615 fcb $1b,$40,0,114,0,78,$1b,$46,0,202,0,78 + fcb $1b,$46,0,202,0,83,$1b,$46,0,154,0,83 + fcb $1b,$46,0,154,0,92,$1b,$46,0,114,0,92 + fcb $1b,$46,0,114,0,78 + +B616 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B617 fcb $1b,$40,1,178,0,78,$1b,$46,2,10,0,78 + fcb $1b,$46,2,10,0,92,$1b,$46,1,226,0,92 + fcb $1b,$46,1,226,0,83,$1b,$46,1,178,0,83 + fcb $1b,$46,1,178,0,78 + +B618 fcb $1b,$40,2,34,0,78,$1b,$48,2,58,0,83 + +B619 fcb $1b,$40,0,66,0,96,$1b,$48,0,90,0,110 + +B620 fcb $1b,$40,0,114,0,105,$1b,$46,0,178,0,105 + fcb $1b,$46,0,178,0,96,$1b,$46,0,202,0,96 + fcb $1b,$46,0,202,0,110,$1b,$46,0,114,0,110 + fcb $1b,$46,0,114,0,105 + +B621 fcb $1b,$40,0,226,0,105,$1b,$46,1,154,0,105 + fcb $1b,$46,1,154,0,110,$1b,$46,1,74,0,110 + fcb $1b,$46,1,74,0,128,$1b,$46,1,50,0,128 + fcb $1b,$46,1,50,0,110,$1b,$46,0,226,0,110 + fcb $1b,$46,0,226,0,105 + +B622 fcb $1b,$40,1,178,0,96,$1b,$46,1,202,0,96 + fcb $1b,$46,1,202,0,105,$1b,$46,2,10,0,105 + fcb $1b,$46,2,10,0,110,$1b,$46,1,178,0,110 + fcb $1b,$46,1,178,0,96 + +B623 fcb $1b,$40,2,34,0,96,$1b,$48,2,58,0,110 + +B624 fcb $1b,$40,0,66,0,123,$1b,$46,0,138,0,123 + fcb $1b,$46,0,138,0,128,$1b,$46,0,90,0,128 + fcb $1b,$46,0,90,0,146,$1b,$46,0,66,0,146 + fcb $1b,$46,0,66,0,123 + +B625 fcb $1b,$40,0,162,0,123,$1b,$46,0,234,0,123 + fcb $1b,$46,0,234,0,146,$1b,$46,0,210,0,146 + fcb $1b,$46,0,210,0,128,$1b,$46,0,162,0,128 + fcb $1b,$46,0,162,0,123 + +B626 fcb $1b,$40,1,2,0,123,$1b,$48,1,26,0,128 + +B627 fcb $1b,$40,1,98,0,123,$1b,$48,1,122,0,128 + +B628 fcb $1b,$40,1,146,0,123,$1b,$46,1,218,0,123 + fcb $1b,$46,1,218,0,128,$1b,$46,1,170,0,128 + fcb $1b,$46,1,170,0,146,$1b,$46,1,146,0,146 + fcb $1b,$46,1,146,0,123 + +B629 fcb $1b,$40,1,242,0,123,$1b,$46,2,58,0,123 + fcb $1b,$46,2,58,0,146,$1b,$46,2,34,0,146 + fcb $1b,$46,2,34,0,128,$1b,$46,1,242,0,128 + fcb $1b,$46,1,242,0,123 + +B630 fcb $1b,$40,0,66,0,159,$1b,$46,0,114,0,159 + fcb $1b,$46,0,114,0,141,$1b,$46,0,138,0,141 + fcb $1b,$46,0,138,0,164,$1b,$46,0,66,0,164 + fcb $1b,$46,0,66,0,159 + +B631 fcb $1b,$40,0,162,0,141,$1b,$46,0,186,0,141 + fcb $1b,$46,0,186,0,159,$1b,$46,0,234,0,159 + fcb $1b,$46,0,234,0,164,$1b,$46,0,162,0,164 + fcb $1b,$46,0,162,0,141 + +B632 fcb $1b,$40,1,2,0,141,$1b,$48,1,122,0,146 + +B633 fcb $1b,$40,1,2,0,159,$1b,$48,1,58,0,164 + +B634 fcb $1b,$40,1,82,0,159,$1b,$48,1,122,0,164 + +B635 fcb $1b,$40,1,146,0,159,$1b,$46,1,194,0,159 + fcb $1b,$46,1,194,0,141,$1b,$46,1,218,0,141 + fcb $1b,$46,1,218,0,164,$1b,$46,1,146,0,164 + fcb $1b,$46,1,146,0,159 + +B636 fcb $1b,$40,1,242,0,141,$1b,$46,2,10,0,141 + fcb $1b,$46,2,10,0,159,$1b,$46,2,58,0,159 + fcb $1b,$46,2,58,0,164,$1b,$46,1,242,0,164 + fcb $1b,$46,1,242,0,141 + +B6END equ *-B6STRT + + +* (board #7) +B7STRT fcb $1b,$32,1 + fcb $1b,$40,0,36,0,83,$1b,$46,0,36,0,8 + fcb $1b,$46,2,88,0,8,$1b,$46,2,88,0,83 + fcb $1b,$46,2,50,0,83,$1b,$46,2,50,0,74 + fcb $1b,$46,2,18,0,74,$1b,$46,2,18,0,69 + fcb $1b,$46,2,82,0,69,$1b,$46,2,82,0,11 + fcb $1b,$46,1,90,0,11,$1b,$46,1,90,0,29 + fcb $1b,$46,1,34,0,29,$1b,$46,1,34,0,11 + fcb $1b,$46,0,42,0,11,$1b,$46,0,42,0,69 + fcb $1b,$46,0,106,0,69,$1b,$46,0,106,0,74 + fcb $1b,$46,0,74,0,74,$1b,$46,0,74,0,83 + fcb $1b,$46,0,36,0,83 +* Bottom half of board + fcb $1b,$40,0,36,0,96,$1b,$46,0,36,0,180 + fcb $1b,$46,2,88,0,180,$1b,$46,2,88,0,96 + fcb $1b,$46,2,50,0,96,$1b,$46,2,50,0,105 + fcb $1b,$46,2,18,0,105,$1b,$46,2,18,0,110 + fcb $1b,$46,2,82,0,110,$1b,$46,2,82,0,177 + + + fcb $1b,$46,0,42,0,177,$1b,$46,0,42,0,110 + fcb $1b,$46,0,106,0,110,$1b,$46,0,106,0,105 + fcb $1b,$46,0,74,0,105,$1b,$46,0,74,0,96 + fcb $1b,$46,0,36,0,96 + +B71 fcb $1b,$40,0,66,0,24,$1b,$46,0,106,0,24 + fcb $1b,$46,0,106,0,38,$1b,$46,0,74,0,38 + fcb $1b,$46,0,74,0,56,$1b,$46,0,66,0,56 + fcb $1b,$46,0,66,0,24 + +B72 fcb $1b,$40,0,130,0,24,$1b,$46,0,138,0,24 + fcb $1b,$46,0,138,0,56,$1b,$46,0,98,0,56 + fcb $1b,$46,0,98,0,51,$1b,$46,0,130,0,51 + fcb $1b,$46,0,130,0,24 + +B73 fcb $1b,$40,0,162,0,24,$1b,$46,1,10,0,24 + fcb $1b,$46,1,10,0,29,$1b,$46,0,202,0,29 + fcb $1b,$46,0,202,0,38,$1b,$46,0,162,0,38 + fcb $1b,$46,0,162,0,24 + +B74 fcb $1b,$40,1,114,0,24,$1b,$46,1,218,0,24 + fcb $1b,$46,1,218,0,38,$1b,$46,1,178,0,38 + fcb $1b,$46,1,178,0,29,$1b,$46,1,114,0,29 + fcb $1b,$46,1,114,0,24 + +B75 fcb $1b,$40,1,242,0,24,$1b,$46,1,250,0,24 + fcb $1b,$46,1,250,0,51,$1b,$46,2,26,0,51 + fcb $1b,$46,2,26,0,56,$1b,$46,1,242,0,56 + fcb $1b,$46,1,242,0,24 + +B76 fcb $1b,$40,2,18,0,24,$1b,$46,2,58,0,24 + fcb $1b,$46,2,58,0,56,$1b,$46,2,50,0,56 + fcb $1b,$46,2,50,0,38,$1b,$46,2,18,0,38 + fcb $1b,$46,2,18,0,24 + +B77 fcb $1b,$40,0,162,0,51,$1b,$46,0,202,0,51 + fcb $1b,$46,0,202,0,60,$1b,$46,1,10,0,60 + fcb $1b,$46,1,10,0,65,$1b,$46,0,162,0,65 + fcb $1b,$46,0,162,0,51 + +B78 fcb $1b,$40,0,226,0,42,$1b,$46,1,154,0,42 + fcb $1b,$46,1,154,0,47,$1b,$46,1,90,0,47 + fcb $1b,$46,1,90,0,65,$1b,$46,1,34,0,65 + fcb $1b,$46,1,34,0,47,$1b,$46,0,226,0,47 + fcb $1b,$46,0,226,0,42 + +B79 fcb $1b,$40,1,114,0,60,$1b,$46,1,178,0,60 + fcb $1b,$46,1,178,0,51,$1b,$46,1,218,0,51 + fcb $1b,$46,1,218,0,65,$1b,$46,1,114,0,65 + fcb $1b,$46,1,114,0,60 + +B710 fcb $1b,$40,0,98,0,87,$1b,$46,0,130,0,87 + fcb $1b,$46,0,130,0,69,$1b,$46,0,138,0,69 + fcb $1b,$46,0,138,0,92,$1b,$46,0,98,0,92 + fcb $1b,$46,0,98,0,87 + +B711 fcb $1b,$40,0,162,0,78,$1b,$48,0,202,0,83 + +B712 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B713 fcb $1b,$40,1,178,0,78,$1b,$48,1,218,0,83 + +B714 fcb $1b,$40,1,242,0,69,$1b,$46,1,250,0,69 + fcb $1b,$46,1,250,0,87,$1b,$46,2,26,0,87 + fcb $1b,$46,2,26,0,92,$1b,$46,1,242,0,92 + fcb $1b,$46,1,242,0,69 + +B715 fcb $1b,$40,0,130,0,105,$1b,$46,0,162,0,105 + fcb $1b,$46,0,162,0,96,$1b,$46,0,202,0,96 + fcb $1b,$46,0,202,0,110,$1b,$46,0,130,0,110 + fcb $1b,$46,0,130,0,105 + +B716 fcb $1b,$40,1,178,0,96,$1b,$46,1,218,0,96 + fcb $1b,$46,1,218,0,105,$1b,$46,1,250,0,105 + fcb $1b,$46,1,250,0,110,$1b,$46,1,178,0,110 + fcb $1b,$46,1,178,0,96 + +B717 fcb $1b,$40,0,66,0,123,$1b,$46,0,138,0,123 + fcb $1b,$46,0,138,0,128,$1b,$46,0,90,0,128 + fcb $1b,$46,0,90,0,146,$1b,$46,0,66,0,146 + fcb $1b,$46,0,66,0,123 + +B718 fcb $1b,$40,0,162,0,123,$1b,$46,0,226,0,123 + fcb $1b,$46,0,226,0,105,$1b,$46,0,250,0,105 + fcb $1b,$46,0,250,0,123,$1b,$46,1,26,0,123 + fcb $1b,$46,1,26,0,128,$1b,$46,0,162,0,128 + fcb $1b,$46,0,162,0,123 + +B719 fcb $1b,$40,1,98,0,123,$1b,$46,1,130,0,123 + fcb $1b,$46,1,130,0,105,$1b,$46,1,154,0,105 + fcb $1b,$46,1,154,0,123,$1b,$46,1,218,0,123 + fcb $1b,$46,1,218,0,128,$1b,$46,1,98,0,128 + fcb $1b,$46,1,98,0,123 + +B720 fcb $1b,$40,1,242,0,123,$1b,$46,2,58,0,123 + fcb $1b,$46,2,58,0,146,$1b,$46,2,34,0,146 + fcb $1b,$46,2,34,0,128,$1b,$46,1,242,0,128 + fcb $1b,$46,1,242,0,123 + +B721 fcb $1b,$40,0,66,0,159,$1b,$46,0,114,0,159 + fcb $1b,$46,0,114,0,141,$1b,$46,0,154,0,141 + fcb $1b,$46,0,154,0,164,$1b,$46,0,66,0,164 + fcb $1b,$46,0,66,0,159 + +B722 fcb $1b,$40,0,178,0,141,$1b,$46,0,202,0,141 + fcb $1b,$46,0,202,0,159,$1b,$46,1,26,0,159 + fcb $1b,$46,1,26,0,164,$1b,$46,0,178,0,164 + fcb $1b,$46,0,178,0,141 + +B723 fcb $1b,$40,1,98,0,159,$1b,$46,1,178,0,159 + fcb $1b,$46,1,178,0,141,$1b,$46,1,202,0,141 + fcb $1b,$46,1,202,0,164,$1b,$46,1,98,0,164 + fcb $1b,$46,1,98,0,159 + +B724 fcb $1b,$40,1,226,0,141,$1b,$46,2,10,0,141 + fcb $1b,$46,2,10,0,159,$1b,$46,2,58,0,159 + fcb $1b,$46,2,58,0,164,$1b,$46,1,226,0,164 + fcb $1b,$46,1,226,0,141 + +B725 fcb $1b,$40,1,74,0,164,$1b,$46,1,74,0,146 + fcb $1b,$46,1,154,0,146,$1b,$46,1,154,0,141 + fcb $1b,$46,1,74,0,141,$1b,$46,1,74,0,123 + fcb $1b,$46,1,50,0,123,$1b,$46,1,50,0,141 + fcb $1b,$46,0,226,0,141,$1b,$46,0,226,0,146 + fcb $1b,$46,1,50,0,146,$1b,$46,1,50,0,164 + fcb $1b,$46,1,74,0,164 + +B726 fcb $1b,$40,1,18,0,105,$1b,$48,1,106,0,110 + +B7END equ *-B7STRT + +B8STRT fcb $1b,$32,1 + fcb $1b,$40,1,42,0,8,$1b,$46,0,36,0,8 + fcb $1b,$46,0,36,0,180,$1b,$46,1,58,0,180 + fcb $1b,$46,1,58,0,159,$1b,$46,1,50,0,159 + fcb $1b,$46,1,50,0,177,$1b,$46,0,42,0,177 + fcb $1b,$46,0,42,0,146,$1b,$46,0,90,0,146 + fcb $1b,$46,0,90,0,141,$1b,$46,0,42,0,141 + fcb $1b,$46,0,42,0,11,$1b,$46,1,34,0,11 + fcb $1b,$46,1,34,0,29,$1b,$46,1,42,0,29 + fcb $1b,$46,1,42,0,8 + + fcb $1b,$40,1,66,0,8,$1b,$46,2,88,0,8 + fcb $1b,$46,2,88,0,180,$1b,$46,1,82,0,180 + fcb $1b,$46,1,82,0,159,$1b,$46,1,90,0,159 + fcb $1b,$46,1,90,0,177,$1b,$46,2,82,0,177 + fcb $1b,$46,2,82,0,146,$1b,$46,2,34,0,146 + fcb $1b,$46,2,34,0,141,$1b,$46,2,82,0,141 + fcb $1b,$46,2,82,0,11,$1b,$46,1,74,0,11 + fcb $1b,$46,1,74,0,29,$1b,$46,1,66,0,29 + fcb $1b,$46,1,66,0,8 + +B81 fcb $1b,$40,0,66,0,24,$1b,$48,0,90,0,38 + +B82 fcb $1b,$40,0,114,0,24,$1b,$48,0,138,0,29 + +B83 fcb $1b,$40,0,242,0,24,$1b,$46,1,10,0,24 + fcb $1b,$46,1,10,0,42,$1b,$46,1,42,0,42 + fcb $1b,$46,1,42,0,47,$1b,$46,0,210,0,47 + fcb $1b,$46,0,210,0,42,$1b,$46,0,242,0,42 + fcb $1b,$46,0,242,0,24 + +B84 fcb $1b,$40,1,98,0,24,$1b,$46,1,122,0,24 + fcb $1b,$46,1,122,0,42,$1b,$46,1,154,0,42 + fcb $1b,$46,1,154,0,47,$1b,$46,1,66,0,47 + fcb $1b,$46,1,66,0,42,$1b,$46,1,98,0,42 + fcb $1b,$46,1,98,0,24 + +B85 fcb $1b,$40,1,242,0,24,$1b,$48,2,10,0,29 + +B86 fcb $1b,$40,2,34,0,24,$1b,$48,2,58,0,38 + +B87 fcb $1b,$40,0,66,0,51,$1b,$48,0,90,0,56 + +B88 fcb $1b,$40,0,114,0,42,$1b,$48,0,138,0,56 + +B89 fcb $1b,$40,0,162,0,24,$1b,$46,0,218,0,24 + fcb $1b,$46,0,218,0,29,$1b,$46,0,186,0,29 + fcb $1b,$46,0,186,0,60,$1b,$46,0,234,0,60 + fcb $1b,$46,0,234,0,65,$1b,$46,0,162,0,65 + fcb $1b,$46,0,162,0,24 + +B810 fcb $1b,$40,1,2,0,60,$1b,$48,1,106,0,65 + +B811 fcb $1b,$40,1,146,0,24,$1b,$46,1,218,0,24 + fcb $1b,$46,1,218,0,65,$1b,$46,1,130,0,65 + fcb $1b,$46,1,130,0,60,$1b,$46,1,178,0,60 + fcb $1b,$46,1,178,0,29,$1b,$46,1,146,0,29 + fcb $1b,$46,1,146,0,24 + +B812 fcb $1b,$40,1,242,0,42,$1b,$48,2,10,0,56 + +B813 fcb $1b,$40,2,34,0,51,$1b,$48,2,58,0,56 + +B814 fcb $1b,$40,0,66,0,87,$1b,$48,0,106,0,92 + +B815 fcb $1b,$40,0,66,0,69,$1b,$46,0,138,0,69 + fcb $1b,$46,0,138,0,110,$1b,$46,0,66,0,110 + fcb $1b,$46,0,66,0,105,$1b,$46,0,130,0,105 + fcb $1b,$46,0,130,0,74,$1b,$46,0,66,0,74 + fcb $1b,$46,0,66,0,69 + +B816 fcb $1b,$40,0,162,0,78,$1b,$48,0,202,0,83 + +B817 fcb $1b,$40,0,226,0,78,$1b,$48,1,154,0,92 + +B818 fcb $1b,$40,1,178,0,78,$1b,$48,1,218,0,83 + +B819 fcb $1b,$40,1,242,0,69,$1b,$46,2,58,0,69 + fcb $1b,$46,2,58,0,74,$1b,$46,1,250,0,74 + fcb $1b,$46,1,250,0,105,$1b,$46,2,58,0,105 + fcb $1b,$46,2,58,0,110,$1b,$46,1,242,0,110 + fcb $1b,$46,1,242,0,69 + +B820 fcb $1b,$40,2,18,0,87,$1b,$48,2,58,0,92 + +B821 fcb $1b,$40,0,162,0,96,$1b,$48,0,202,0,110 + +B822 fcb $1b,$40,0,226,0,105,$1b,$46,1,154,0,105 + fcb $1b,$46,1,154,0,110,$1b,$46,1,74,0,110 + fcb $1b,$46,1,74,0,128,$1b,$46,1,50,0,128 + fcb $1b,$46,1,50,0,110,$1b,$46,0,226,0,110 + fcb $1b,$46,0,226,0,105 + +B823 fcb $1b,$40,1,178,0,96,$1b,$48,1,218,0,110 + +B824 fcb $1b,$40,0,66,0,123,$1b,$48,0,138,0,128 + +B825 fcb $1b,$40,1,242,0,123,$1b,$48,2,58,0,128 + +B826 fcb $1b,$40,0,114,0,141,$1b,$46,0,162,0,141 + fcb $1b,$46,0,162,0,123,$1b,$46,1,26,0,123 + fcb $1b,$46,1,26,0,128,$1b,$46,0,202,0,128 + fcb $1b,$46,0,202,0,159,$1b,$46,0,234,0,159 + fcb $1b,$46,0,234,0,164,$1b,$46,0,162,0,164 + fcb $1b,$46,0,162,0,146,$1b,$46,0,114,0,146 + fcb $1b,$46,0,114,0,141 + +B827 fcb $1b,$40,0,226,0,141,$1b,$46,1,58,0,141 + fcb $1b,$46,1,58,0,146,$1b,$46,1,26,0,146 + fcb $1b,$46,1,26,0,164,$1b,$46,1,2,0,164 + fcb $1b,$46,1,2,0,146,$1b,$46,0,226,0,146 + fcb $1b,$46,0,226,0,141 + +B828 fcb $1b,$40,1,82,0,141,$1b,$46,1,170,0,141 + fcb $1b,$46,1,170,0,146,$1b,$46,1,138,0,146 + fcb $1b,$46,1,138,0,164,$1b,$46,1,114,0,164 + fcb $1b,$46,1,114,0,146,$1b,$46,1,82,0,146 + fcb $1b,$46,1,82,0,141 + +B829 fcb $1b,$40,1,98,0,123,$1b,$46,1,218,0,123 + fcb $1b,$46,1,218,0,141,$1b,$46,2,10,0,141 + fcb $1b,$46,2,10,0,146,$1b,$46,1,218,0,146 + fcb $1b,$46,1,218,0,164,$1b,$46,1,162,0,164 + fcb $1b,$46,1,162,0,159,$1b,$46,1,194,0,159 + fcb $1b,$46,1,194,0,128,$1b,$46,1,98,0,128 + fcb $1b,$46,1,98,0,123 + +B830 fcb $1b,$40,0,66,0,159,$1b,$48,0,138,0,164 + +B831 fcb $1b,$40,1,242,0,159,$1b,$48,2,58,0,164 + +B8END equ *-B8STRT + +* These fcb bytes are transfered to the score RMB's in MAIN +* they are used to fill SCRPOS,SCRASC,SCORE,POINTS,SHCNT, +* SCRPO2,SCRAS2 and SCORE2. + +SCRSET fcb 2,64,32 + fcb 32,32,32,32,32,48 + fcb 0,0,0,0,0,0,0 + fcb 2,66,32 + fcb 32,32,32,32,32,48 + fcb 0,0,0 + +SCNSET fcb $1b,$32,9 + fcb 2,70,35,76,118 + fcb 2,71,36,32 +* +* Start of BOARD routines +* Using current board number, point to +* board draw fcb's and output them +* +BOARDB: lda BRDNUM Get board number + deca + bne SEL2 + leax B1STRT,pcr + ldy #B1END + bra BRDOUT +SEL2 deca + bne SEL3 + leax B2STRT,pcr + ldy #B2END + bra BRDOUT +SEL3 deca + bne SEL4 + leax B3STRT,pcr + ldy #B3END + bra BRDOUT +SEL4 deca + bne SEL5 + leax B4STRT,pcr + ldy #B4END + bra BRDOUT +SEL5 deca + bne SEL6 + leax B5STRT,pcr + ldy #B5END + bra BRDOUT +SEL6 deca + bne SEL7 + leax B6STRT,pcr + ldy #B6END + bra BRDOUT +SEL7 deca + bne SEL8 + leax B7STRT,pcr + ldy #B7END + bra BRDOUT +SEL8 leax B8STRT,pcr + ldy #B8END + +BRDOUT lda PATH,U + os9 I$Write + lbcs ERR1 + +* Now put board number at bottom of screen + +SCNUMB lda BRDNUM Get current board # + adda #48 Convert to ascii + leax SCNNUM,U Point to string + sta 11,X Put board# in string + ldy #12 Output 12 bytes + lbsr OUTSTR + + rts + +* These routines are used at start of game, after +* being used once then BOARDB is used. + +BOARDC: nop + leax FSCORE,U Point to high score array + leax 15,X Point to highest score + leay HSCASC,U + ldb #6 +HLOOP lda ,X+ Transfer file high score + sta ,Y+ + decb + bne HLOOP + +* These 9 bytes are used to put the board +* number on screen + +SETSCN leax SCNSET,pcr + leay SCNNUM,U + ldb #12 Transfer 12 bytes +SELOOP lda ,X+ Get a byte + sta ,Y+ Transfer it + decb + bne SELOOP Loop till done + + lbsr BOARDB Go select start screen + +* Transfer score set bytes to the rmb's in MAIN + +SETSCR leax SCRSET,pcr Point to bytes to transfer + leay SCRPOS,U Point to where bytes go + ldb #28 Transfer 28 bytes +SLOOP lda ,X+ Get a byte + sta ,Y+ Store it + decb Decrement counter + bne SLOOP Loop till done + +* This routine will place the DOTS and POWER PILLS on the screen +* This routine will also be used to reset the screen when +* pacman gets caught by the ghosts. + +PDOTS: leax ARRAY,U Point to start of array + leax 70,X Set X reg. to first dot location + stx XTEMP,U Save offset + ldd #52 + std PXLOC,U + ldd #16 + std PYLOC +DOTLOP ldx XTEMP,U Get offset from start of array + ldb #56 Prepare to setup for buffer #56 + lda ,X Get a byte from the array + beq STORIT + bmi MOVE + cmpa #1 Is it an intersection ? + beq STORIT + ldb #40 + bita #2 Is it a regular dot ? + bne STORIT + bita #4 Is it a power dot ? + beq MOVE If not, then just move on + ldb #50 Set for buffer # 50 +STORIT stb PBFN,U Store appropriate Putblk buff # + cmpb #49 Is it a power dot ? + bls NOPOW + ldd PXLOC,U Get screen X location + subd #2 Subtract 2 from it + std PXLOC,U put it back +NOPOW lbsr PUTBLK Go output putblk code + lda PBFN,U + cmpa #49 Did we write a power dot ? + bls MOVE + ldd PXLOC,U + addd #2 Return to original count + std PXLOC,U +MOVE ldx XTEMP,U Get current array position + cmpx #ARREND-71 Are we done yet ? + bge PUTGHST If so then leave this routine + leax 2,X Add 2 to offset + stx XTEMP,U Save new offset + ldd PXLOC,U Get current screen X location + addd #16 Add 16 to it + cmpd #596 Have we gone past 580 yet ? + bne NOVERT If not, then go store PXLOC + ldx XTEMP,U + leax 139,X + stx XTEMP,U + ldd PYLOC,U Get current screen Y location + addd #9 Add 9 to it + std PYLOC,U Save new screen Y location + ldd #52 Reset X location to 52 +NOVERT std PXLOC,U Store new screen X location + lbra DOTLOP Keep looping + +* Put ghosts on the screen +PUTGHST leax G1OFST,U Point to ghost #1 table + lda 11,X Get buff # + sta PGBFN,U Give buffer # to PUTGH + ldd 4,X Get screen Y location + std PGYLOC,U Set screen Y location + ldd 2,X Get screen X location + std PGXLOC,U Set screen X location + lbsr PUTGHT Go do putght + leax G2OFST,U Point to ghost #2 table + lda 11,X Get buff # + sta PGBFN,U Set buffer + ldd 2,X + std PGXLOC,U Set screen X location + lbsr PUTGHT Go do putght + leax G3OFST,U Point to ghost #3 table + lda 11,X Get buff # + sta PGBFN,U Set buffer + ldd 2,X + std PGXLOC,U Set screen X location + lbsr PUTGHT Go do putght + leax G4OFST,U Point to ghost #4 table + lda 11,X Get buff # + sta PGBFN,U Set buffer + ldd 2,X + std PGXLOC,U Set screen X location + lbsr PUTGHT Go do putght + +* Put pacman and extra men on screen +PUTPAC ldd #181 + std PYLOC,U Set screen Y location + lda #37 Buff# for blank pacman + sta PBFN,U Set up buffer # for PUTBLK + ldd #450 Set left most extra pacman -30 + std PXLOC,U position + lda #5 Set counter + ldb PACMAN Get # of men left for player + pshs A Save count + pshs B Save for later +PUTLOP puls B Get count + incb Increment it + cmpb #6 + bne FLIPON + lda #28 Set for left facing pacman + sta PBFN,U +FLIPON puls A + deca + beq PUTPC2 + pshs A + pshs B Save new count + ldd PXLOC,U Get last X screen location + addd #30 Move right 30 pixels + std PXLOC,U Give new value to PUTBLK + lbsr PUTBLK Go do putblk + bra PUTLOP + +PUTPC2 ldd #94 + std PYLOC,U Set screen Y location + ldd #308 + std PXLOC,U Set screen X location + lbsr PUTBLK Go do putblk + + rts Return to main + + ENDSECT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/caged90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,366 @@ + + NAM Caged + TTL Routines to Cage and Uncage Ghosts + +* Program segment to be compiled using Level II RMA +* This is not a mainline program segment +* Written by Larry Olson + + IFP1 +* use /dd/defs/os9defs.a + ENDc + + +STACK EQU 100 + + PSECT Caged,0,0,0,STACK,GHCHCK + + VSECT + +* Lcoal Variables + +XSAVE RMB 2 + RMB STACK + + +********************************* +* Global Variables * +* * +* ARRAY --- MAIN * +* * +* Ghost tables. One table * +* for each ghost * +* located in MAIN * +* * +* G1OFST --- MAIN * +* G1XNEW --- MAIN * +* G1YNEW --- MAIN * +* G1XOLD --- MAIN * +* G1YOLD --- MAIN * +* G1STAT --- MAIN * +* G1BUFF --- MAIN * +* G1TIME --- MAIN * +* TIMVAL --- MAIN * +* G1DIR --- MAIN * +* DIROFF --- MAIN * +* G1UPDT --- MAIN * +* UPDATE --- MAIN * +* * +* GCOUNT --- MAIN * +* * +* PBFN --- MAIN * +* * +* PXLOC --- MAIN * +* PYLOC --- MAIN * +* POFSET --- MAIN * +* * +* Global Labels * +* * +* PUTBLK --- MAIN * +* ERR1 --- MAIN * +* GHMOVE --- GHOSTS * +* HUNT --- GHOSTS * +********************************* + + + ENDSECT + + +* Ghost is caged, so check timer value + +CAGED: ldb 10,X Check status + cmpb #-3 Are eyes free of cage? + lbeq MVEYES Go move eyes + ldb 12,X Get timer value for ghost + decb Decrement it + stb 12,X Put it back + beq MOVOUT Start moving ghost out + cmpb #10 Are we close to zero? + bls GHFLSH Go flash ghost + + ldx #2 + os9 F$Sleep + lbcs ERR1 + + rts If not, return to MAIN + +* Ghost is caged and close to coming out so blink it +* or if status=-2 then go blink eyes +* X reg points to start of current ghost table +* A reg contains current ghost status byte + +GHFLSH cmpb #-2 Is ghost dead? Only eyes? + lbeq EYFLSH If so, then go flash eyes + ldd 2,X Get ghost scrn X location + std PGXLOC Put it in PUTGHT string + ldd 4,X Get ghost scrn Y location + std PGYLOC Put it in PUTGHT string + ldb #1 Buffer # for blank ghost + stb PGBFN Put it in PUTGHT string + stx XSAVE Save X register + lbsr PUTGHT Go erase ghost + ldx XSAVE Restore X register + ldb 11,X Get ghost buffer # + stb PGBFN Put it in PUTGHT string + lbsr PUTGHT Put ghost back on screen + lbra RETURN Return to MAIN + +* Ghost is available to come out, so set status +* flags and open cage door +* X reg. points to start of ghost table +* A reg. contains ghost status byte +* B reg. contains ghost timer value + +MOVOUT clra 0=Caged but moving out + sta 10,X Save new ghost status + ldb #22 22=Buff # for blank door + stb PBFN Put it in PUTBLK string + ldd #307 X location of door + std PXLOC Put it in PUTBLK string + ldd #78 Y location of door + std PYLOC Put it in PUTBLK string + lbsr PUTBLK Go erase door + lbra RETURN Return to MAIN + +* Check for direction to move ghost +* X reg. points to start of current ghost table +* A reg. contains current ghost status + +MOVING: ldd 0,X Get array offset for ghost + cmpd #1552 Are we moving up? + lbls MUP If so, then keep moving up + cmpd #1621 Are we on center line? + lbeq MUP If so, then go move up + blo MRIGHT If lower, then move right + subd #1 Move 1 position left in array + std 0,X Save new offset position + ldd 2,X Get ghost scrn X location + subd #8 Move 8 pixels to the left + std 2,X Save new scrn X location + std 6,X Also save in OLD X location + std PGXLOC Also put it in PUTGHT + ldd 4,X Get ghost scrn Y location + std 8,X Also put it in OLD Y location + std PGYLOC Put it in PUTGHT + lda 11,X Get current ghost buffer# + adda #1 Add 1 for left facing ghost + sta PGBFN Put it in PUTGHT string + lbsr PUTGHT Put ghost back on screen + lbra RETURN Return to MAIN + +* Ghost is left of center so move to the right +* X reg. points to start of current ghost table +* D reg. contains array position offset of ghost + +MRIGHT addd #1 Move 1 position to right + std 0,X Save new offset position + ldd 6,X Get G1XOLD + cmpd 2,X Compare it with G1XNEW + beq SKIPMR + addd #8 Add 8 to OLD location + std 6,X Put result back in G1XOLD +SKIPMR ldd 2,X Get new scrn X location + addd #8 Move 8 pixels to the right + std 2,X Save new scrn X location + ldd 6,X Get OLD scrn X location + std PGXLOC Also put it in PUTGHT + ldd 4,X Get NEW scrn Y location + std 8,X G1YOLD=G1YNEW + std PGYLOC Also put it in PUTGHT + lda 11,X Get current ghost buffer # + adda #2 Add 2,for right facing ghost + sta PGBFN Put it in PUTGHT string + lbsr PUTGHT Put ghost back on screen + lbra RETURN Return to MAIN + +* Ghost is on center line so move up +* X reg. points to start of current ghost table +* D reg. contains array position offset of ghost + +MUP cmpd #1345 Are we out of cage? + beq FREEGH Yes? go set ghost free flags + subd #69 Move 1 position up in array + std 0,X Save new array offset + ldd 4,X in the up direction + subd #3 Move up 3 pixels + std 4,X Save new scrn Y location + std 8,X Also put it in OLD Y + std PGYLOC Also load PUTGHT string + ldd 2,X Get G1XNEW + std 6,X G1XOLD=G1XNEW + std PGXLOC Also put it in PUTGHT + lda 11,X Get current ghost buffer# + sta PGBFN Put it in PUTGHT string + lbsr PUTGHT Go put ghost on screen + lbra RETURN Return to MAIN + +* Ghost is out of cage, so close door and set flags +* X reg. points to start of current ghost table +* D reg. contains ghost array position offset + +FREEGH ldb #1 1=Free ghost + stb 10,X Update status for this ghost + + leay ARRAY,U Point to start of array + ldd 0,X Get ghost array ofset + leay D,Y Move Y reg. to that spot + + bsr HUNT Go find direction of pacman + + ldb #23 23=Buffer# for cage door + stb PGBFN Put it in PUTGHT string + ldd #307 307=Scrn X location of door + std PGXLOC Put it in PUTGHT string + ldd #78 78=Scrn Y location of door + std PGYLOC Put it in PUTGHT string + lbsr PUTGHT Go draw cage door +RETURN rts + + + +EYFLSH rts + +* This routine is used to compare the ghosts +* location to pacman's location and then set +* the ghost direction pointers to move away +* from pacman. +* ON ENTRY: +* X reg. points to top of current ghost table + +RUN: ldd 0,X Get ghost array offset + addd #69 Move down 1 line + cmpd POFSET Compare ghost to pacman offset + lblo HUNTUP Pacman is down or to right + subd #69 + cmpd POFSET + blo HUNTLF + subd #69 + cmpd POFSET + lbhi HUNTDN + bra HUNTRT + +* This routine is used to compare the ghosts +* location to pacman's location and then set +* the ghost direction pointers to move toward +* pacman. +* ON ENTRY: +* X reg. points to top of current ghost table +* First run random number generator + +HUNT: lbsr RANDNM Go pick random number + cmpa #30 + bhi HUNT2 + + ldd 0,X Get ghost array offset + addd #69 Move down 1 line + cmpd POFSET Compare ghost to pacman offset + lblo HUNTUP Pacman is down move up + subd #69 Move back to offset location + cmpd POFSET Compare ghost to pacman offset + blo HUNTLF Pacman to right, move left + subd #69 Move up 1 line + cmpd POFSET Compare ghost to pacman offset + bhi HUNTDN Pacman is up, move down + bra HUNTRT go move right + +HUNT2 ldd 0,X Get ghost array offset + addd #69 Move down 1 line + cmpd POFSET Compare ghost to pacman offset + blo HUNTDN Pacman is down or to right + subd #69 Move back to offset location + cmpd POFSET Compare ghost to pacman offset + blo HUNTRT Pacman is to right of ghost + subd #69 Move up 1 line + cmpd POFSET Compare ghost to pacman offset + bhi HUNTUP Pacman is above the ghost + +HUNTLF ldb #1 + cmpb 15,X Did we go right last time? + beq HLFUP + lda #1 Set dir. LEFT + ldb -1,Y + bpl SETDIR +HLFUP lda #0 Set dir. UP + ldb -69,Y + bpl SETDIR + lda #3 SET dir. DOWN + ldb 69,Y + bpl SETDIR + lda #2 SET dir. RIGHT + bra SETDIR + +HUNTRT ldb #-1 + cmpb 15,X Did we go left last time? + beq HRTDN + lda #2 Set dir.offset to right + ldb 1,Y Look 1 space to right in array + bpl SETDIR Found move, Go set direction +HRTDN lda #3 Set dir. DOWN + ldb 69,Y Look 1 line down in array + bpl SETDIR Found move, Go set direction + lda #0 Set dir. offset to UP + ldb -69,Y Look 1 line up in array + bpl SETDIR Found a move, go set direction + lda #1 Set dir. offset to left + bra SETDIR Go set direction +* Look UP,LEFT,RIGHT and DOWN +HUNTUP ldb #69 + cmpb 15,X Did we go down last time? + beq HUPLF + lda #0 Direction offset (UP) + ldb -69,Y Look 1 line up in array + bpl SETDIR Found move,Go set direction +HUPLF lda #1 Direction offset (LEFT) + ldb -1,Y Look 1 space to left in array + bpl SETDIR Found move, Go set direction + lda #2 Direction offset (RIGHT) + ldb 1,Y Look 1 space to right in array + bpl SETDIR Found move, Go set direction + lda #3 Only dir. left (DOWN) + bra SETDIR Go set direction +* Look DOWN,LEFT,RIGHT and UP +HUNTDN ldb #-69 + cmpb 15,X Did we go up last time? + beq HDNRT + lda #3 Direction offset (DOWN) + ldb 69,Y Look 1 space down in array + bpl SETDIR Found move, Go set direction +HDNRT lda #2 Direction offset (RIGHT) + ldb 1,Y Look 1 space to right in array + bpl SETDIR Found move, Go set direction + lda #1 Direction offset (LEFT) + ldb -1,Y Look 1 space to left in array + bpl SETDIR Found move, Go set direction + lda #0 Only dir. left (UP) +* Move found, So set direction flags +SETDIR sta 14,X Save dir.# (0,1,2,3) + bne SETD2 + ldb #-69 -69 + stb 15,X Put it in GARDIR + bra DONE + +SETD2 deca + bne SETD3 + ldb #-1 -1 + stb 15,X Put it in GARDIR + bra DONE + +SETD3 deca + bne SETD4 + ldb #1 +1 + stb 15,X Put it in GARDIR + bra DONE + +SETD4 ldb #69 +69 + stb 15,X Put it in GARDIR + +DONE rts + +* Move ghost eyes + +MVEYES: rts + + + ENDSECT + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/check90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,297 @@ + + NAM Check + TTL Routines to check & react to status + +* Program segment to be compiled using Level II RMA +* This is not a mainline program segment +* Written by Larry Olson + + IFP1 +* use /dd/defs/os9defs.a + ENDc + +STACK EQU 100 + + PSECT Check,0,0,2,STACK,CHECKS + + VSECT + +* Lcoal Variables + + + RMB STACK + + + ENDSECT + + +PALST1: fcb $1b,$31,3,18 + fcb $1b,$31,4,36 + fcb $1b,$31,5,63 + fcb $1b,$31,6,25 + +PALST2: fcb $1b,$31,3,53 + fcb $1b,$31,4,53 + fcb $1b,$31,5,53 + fcb $1b,$31,6,53 + + +CHECKS: lda HITFLG Check hit flag + lbeq CHKGH If 0 the continue + lbpl KILPAC Pacman is hit, so kill him + +* Kill ghost routine +* Make noise + ldd #1550 Set starting frequency + std SNDPR2 Save it in variable +KLOOP ldx #$3201 Set amplitude & duration + ldd SNDPR2 + addd #250 + cmpd #4050 Are we done yet? + beq KILGHT + std SNDPR2 Save new value + tfr D,Y Put value in Y reg. + lbsr SND Go make noise + bra KLOOP + +KILGHT leax G1OFST,U Point to ghost tables + lda GHTHIT Get # of ghost destroyed + leax A,X Move to that ghosts table + stx XSAVE Save ghost table pointer + ldb #-3 + stb 10,X Set status -3(killed) +* Erase ghost + ldd 2,X Get ghost scrn X location + std PGXLOC Give it to PUTGHT + ldd 4,X Get ghost scrn Y location + std PGYLOC Give it to PUTGHT + lda #1 + sta PGBFN Set buff# to blank ghost + lbsr PUTGHT Go erase ghost +* Reset ghost table + lda GHTHIT Get ghost counter + leay GHTABL,U Point to backup tables + leay A,Y Use current ghost data + ldx XSAVE Restore X reg. + ldb #20 Transfer 20 bytes +RSLOOP lda ,Y+ Get a byte + sta ,X+ Transfer it + decb Decrement counter + bne RSLOOP Loop till 20 are done +* Reset palette for ghost + ldx XSAVE Point X reg. to ghost table + ldd 18,X Get palette number & color + std PALBT1+2 Put them in string + leax PALBT1,U Point to bytes to output + ldy #4 Output 4 bytes + lbsr OUTSTR Go output them +* Draw ghost in cage + ldx XSAVE Point X reg. to ghost table + ldd 2,X Get ghost scrn X location + std PGXLOC Put it in PUTGHT string + ldd 4,X Get ghost scrn Y location + std PGYLOC Put it in PUTGHT string + lda 11,X Get ghost buffer number + sta PGBFN Put it in PUTGHT string + lbsr PUTGHT Go put buffer to screen +* Reset hit flag + clr HITFLG Reset hit flag +* Add points to score + lda #50 50 points for ghost + sta POINTS+2 + lbsr ADDUP Go add to score + lbra MAIN1 Return to main + +KILPAC: ldx #$3209 Set amplitude & duration + ldy #2000 Set frequency + lbsr SND Go make sound + ldd PXNEW Get pacman scrn X location + std PXLOC Give it to PUTBLK + ldd PYNEW Get pacman scrn Y location + std PYLOC Give it to PUTBLK + lda #59 Starting buffer -1 + sta PBFN Give it to PUTBLK + ldd #4050 Set frequency + std SNDPR1 +HLOOP inc PBFN Increment buffer number + lbsr PUTBLK Put object on screen + ldx #$3205 Set amplitude & duration + ldd SNDPR1 Get frequency + subd #150 Subtract 150 from it + std SNDPR1 Put it back + tfr D,Y Also put it in Y reg. + lbsr SND Go make sound + lda PBFN Check buffer number + cmpa #67 Are we done ? + bne HLOOP If not, then keep looking + lda #37 37 = Blank pacman + sta PBFN Give it to PUTBLK + lbsr PUTBLK Put it on screen + +* Go to delete pacman routines in MAIN + + lbra DELPAC Go delete pacman + + +* Check if current ghost can be moved, if so then move it +* Two ghost moves will be made for each pacman move +* so the ghosts will be half as slow as pacman. +* If we made 4 ghost moves for each pacman move then the +* ghosts would move at the same speed as pacman. + +CHKGH lda POWFLG Check power pill flag + lbeq MOVGH + deca Decrement flag (counter) + sta POWFLG Put it back + lbeq PALRST If 0 then reset palettes +TIMCHK cmpa #25 Are we close to zero? + lbhi MOVGH If not, go move ghost + leax PALST1,pcr Point to palette reset string + ldy #16 Output 16 bytes + lbsr OUTSTR Go output code bytes + + clrb + stb STRLGH Set string length to 0 + leax STRING,U Point to where string goes + leay G1OFST,U Move to top of ghost tables + lda 10,Y Get status for #1 ghost + cmpa #2 Is ghost chasing ? + bne PLCHG2 If so then branch + ldd #$1b31 + std ,X++ PUT 2 bytes in string + ldd #$043d + std ,X++ Put 2 bytes in string + inc STRLGH Increment counter +PLCHG2 lda 30,Y Get status for ghost #2 + cmpa #2 Is ghost chasing ? + bne PLCHG3 If so then branch + ldd #$1b31 + std ,X++ Put 2 bytes in string + ldd #$063d + std ,X++ Put 2 bytes in string + inc STRLGH Increment counter +PLCHG3 lda 50,Y Get status for ghost #3 + cmpa #2 Is ghost chasing ? + bne PLCHG4 If so then branch + ldd #$1b31 + std ,X++ Put 2 bytes in string + ldd #$053d + std ,X++ Put 2 bytes in string + inc STRLGH Increment counter +PLCHG4 lda 70,Y Get status for ghost #4 + cmpa #2 Is it chasing ? + bne PLTEST If so then branch + ldd #$1b31 + std ,X++ Put 2 bytes in string + ldd #$033d + std ,X Put 2 bytes in string + inc STRLGH Increment counter +PLTEST ldb STRLGH Get counter value + beq PLDONE If 0 then we're done + lda #4 Set multiplier + mul Mul. 4 x STRLGH + tfr D,Y Put result in Y reg. + leax STRING,U Point to start of string + lbsr OUTSTR Go output string +PLDONE bra MOVGH + + +PALRST leax PALST1,pcr Point to palette reset bytes + ldy #16 Output 16 bytes + lbsr OUTSTR Go output bytes +* Now reset ghosts status from running to chasing + leax G1OFST,U + ldb #1 + lda 10,X + cmpa #2 Is ghost running? + bne STRST2 + stb 10,X Set to chasing +STRST2 lda 30,X + cmpa #2 Is ghost running? + bne STRST3 + stb 30,X Set to chasing +STRST3 lda 50,X + cmpa #2 Is ghost running? + bne STRST4 + stb 50,X Set to chasing +STRST4 lda 70,X + cmpa #2 Is ghost running? + bne MOVGH + stb 70,X Set to chasing + +* Make 3 ghost moves for each pacman move +* This means that the 4 ghosts will be a +* little slower on the screen than pacman + +MOVGH lbsr GHCHCK Go check for ghost move + lbsr GHCHCK Do it again + +* Bonus Routines +BONUS lda BONFLG Check bonus flag + beq PUTBON Go put bonus on screen + dec BONTIM Decrement bonus timer + bne MOVGH2 +* Erase bonus from screen +ERSBON ldd #310 + std PXLOC + ldd #95 + std PYLOC + lda #69 + sta PBFN + lbsr PUTBLK Go erase bonus + leax ARRAY,U + ldd #1966 + leax D,X + clr ,X Erase bonus from array + clr BONFLG Reset bonus flag + lda #150 + sta BONTIM Reset bonus timer + bra LEAVE + +* Put bonus on screen +* +PUTBON lda BONCNT Check counter + cmpa #10 Has player got 10 yet ? + beq MOVGH2 If so, then no more + dec BONTIM Decrement timer + bne MOVGH2 + lbsr RANDNM Go pick random number + cmpa #200 + bhi LEAVE + lda BONBUF Get bonus buffer # + inca + cmpa #73 + bne PUTBN2 + lda #70 +PUTBN2 sta BONBUF + sta PBFN + ldd #310 + std PXLOC + ldd #95 + std PYLOC + lbsr PUTBLK Put bonus on screen + leax ARRAY,U + ldd #1966 + leax D,X + lda #6 + sta ,X Put bonus in array + lda #50 + sta BONTIM Set bonus timer + inc BONFLG Set bonus flag + bra LEAVE + +* If power pill flag is set then slow ghosts down + +MOVGH2 lbsr GHCHCK One more time +* tst POWFLG +* bne LEAVE +* lbsr GHCHCK One more time + +* Go return to main loop + +LEAVE lbra MAIN1 Return to MAIN loop + + + ENDSECT + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/ghosts90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,524 @@ + + NAM Ghosts + TTL Routines to move Ghosts + +* Program segment to be compiled using Level II RMA +* This is not a mainline program segment +* Written by Larry Olson + + IFP1 +* use /dd/defs/os9defs.a + ENDc + +STACK EQU 250 + + PSECT Ghosts,0,0,2,STACK,GHCHCK + + VSECT + +* Lcoal Variables + + RMB STACK + + + ENDSECT + + +* Subtract 20 from ghost counter +* Then check ghost status to determine what action +* is to be preformed on ghost. + +GHCHCK: lda GCOUNT Get ghost counter + suba #20 Subtract 20 from it + bpl CKSTAT If =>0 then check status + lda #60 Reset counter to zero +CKSTAT sta GCOUNT Save ghost counter + leax G1OFST,U Point to start of tables + leax A,X Move to current ghost table + lda 10,X Get ghost status + lbeq MOVING If so then move it again + lbmi CAGED Check caged status + +GHMOVE leay ARRAY,U Point to start of array + ldd ,X Get ghost array offset + leay D,Y Move to that spot in array + lda ,Y Get the byte there + bita #1 Check for intersection + beq NOWALL If = then no intersection + + lda 10,X Check status + cmpa #1 Are we chasing pacman? + beq NORUN + lbsr RUN If not, then run + bra NOWALL +NORUN ldd ,X + lbsr HUNT At intersection, so go hunt + +* This routine is used to calc and add the offsets and +* fill the PUTBLK string, in order to move the ghosts +* Old ghost will be erased when new ghost is put on +* the screen. + +NOWALL lda 14,X Get direction flag + bne LEFT +* Move ghost up screen +UP ldd ,X Get ghost array offset + cmpd #33 At top of screen? + bne STGH1 + + pshs X Save X reg. + + lda #1 Set for blank ghost + sta PGBFN + ldd #300 + std PGXLOC + ldd #10 + std PGYLOC + lbsr PUTGHT + + puls X Restore X reg. + + ldd #317 Set new X screen location + std 2,X + std 6,X + std PGXLOC + ldd #169 Set new Y screen location + std 4,X + std 8,X + std PGYLOC + ldd #3692 Set new array location + std ,X + ldb 11,X + stb PGBFN + lbra PUTGH + +STGH1 subd #69 Move up one space in array + std ,X Save new array location + ldd 2,X Get NEW scrn X location + std 6,X G1XOLD = G1XNEW + std PGXLOC Put it in PUTGHT string + ldd 4,X Get NEW scrn Y location + subd #3 Move up 3 scrn lines + std 4,X Save new scrn Y location + std 8,X G1YOLD = G1YNEW + std PGYLOC Also put it in PUTGHS + ldb 11,X Get ghost buffer # + stb PGBFN Put it in PUTGHS string + lbra PUTGH Go put ghost back on scrn +* Move ghost left on screen +LEFT deca Decrement direction flag + bne RIGHT + ldd ,X Get ghost array offset + + cmpd #1725 Off screen to left ? + bne STGH2 + + pshs X Save X reg. + + lda #1 Set for blank ghost + sta PGBFN + ldd #37 + std PGXLOC + ldd #85 + std PGYLOC + lbsr PUTGHT + + puls X Restore X reg. + + ldd #581 + std 2,X + std 6,X + std PGXLOC + ldd #1793 + std ,X + lda 11,X + adda #1 + sta PGBFN + lbra PUTGH + +STGH2 subd #1 Move left 1 space in array + std ,X Save new array location + ldd 2,X Get NEW scrn X location + subd #8 Move 8 pixels left on scrn + std 2,X Save NEW scrn X location + std 6,X G1XOLD = G1XNEW + std PGXLOC Also put it in PUTGHT + ldd 4,X Get ghost scrn Y location + std 8,X G1YOLD = G1YNEW + std PGYLOC Put it in PUTGHT string + ldb 11,X Get ghost buffer # + addb #1 Add direction offset + stb PGBFN Put it in PUTGHT string + lbra PUTGH Go put ghost back on scrn +* Move ghost right on screen +RIGHT deca Decrement direction flag + bne DOWN + ldd ,X Get ghost array offset + + cmpd #1793 Off screen to right ? + bne STGH3 If not, continue + + pshs X Save X reg. + + lda #1 Set for blank ghost + sta PGBFN + ldd #581 + std PGXLOC + ldd #85 + std PGYLOC + lbsr PUTGHT + + puls X Restore X reg. + + ldd #37 + std 2,X + subd #8 + std 6,X + std PGXLOC + ldd #1725 + std ,X + lda 11,X + adda #2 + sta PGBFN + lbra PUTGH + +STGH3 addd #1 Move 1 space right in array + std ,X Save new array location + ldd 6,X Get OLD scrn X location + cmpd 2,X Compare it to NEW + beq SKIPRT + addd #8 Add 8 to it + std 6,X Save in OLD scrn x location +SKIPRT ldd 2,X Get NEW scrn X location + addd #8 Move 8 pixels right on scrn + std 2,X Save NEW scrn X location + ldd 6,X Get OLD scrn X location + std PGXLOC Also put it in PUTGHT + ldd 4,X Get ghost scrn Y location + std 8,X G1YOLD = G1YNEW + std PGYLOC Put it in PUTGHT string + ldb 11,X Get ghost buffer # + addb #2 Add direction offset + stb PGBFN Put it in PUTGHT string + bra PUTGH Go put ghost back on scrn +* Move ghost down on screen +DOWN ldd ,X Get ghost array offset + cmpd #3692 At bottom of screen? + bne STGH4 + + pshs X Save X reg. + + lda #1 + sta PGBFN + ldd #317 + std PGXLOC + ldd #169 + std PGYLOC + lbsr PUTGHT + + puls X Restore X reg. + + ldd #301 + std 2,X + std 6,X + std PGXLOC + ldd #07 + std 8,X + std PGYLOC + addd #3 + std 4,X + ldd #33 + std ,X + ldb 11,X + addb #3 + stb PGBFN + bra PUTGH + +STGH4 addd #69 Move 1 line down in array + std ,X Save new array location + ldd 8,X Get OLD Y location + cmpd 4,X Compare it to NEW Y + beq SKIPDN + addd #3 Add 3 to it + std 8,X Put result back in OLD Y +SKIPDN ldd 4,X Get NEW Y location + addd #3 Add 3 to it + std 4,X Put result back in NEW Y + ldd 8,X Get OLD scrn Y location + std PGYLOC Also put it in PUTGHT + ldd 2,X Get ghost scrn X location + std 6,X G1XOLD = G1XNEW + std PGXLOC Put it in PUTGHT string + ldb 11,X Get ghost buffer # + addb #3 Add direction offset + stb PGBFN Put it in PUTGHT string + +* Before we put ghost back on screen we first +* check to see if we got pacman, if so, set flag +* put any dots back on screen that were erased +* by the ghost when it moved + +PUTGH ldd 2,X Get ghost scrn X location + addd #20 + cmpd PXNEW Compare to left side of pman + ble GOLOOK + ldd PXNEW Get pacman scrn X location + addd #22 + cmpd 2,X Compare to left side of ghost + ble GOLOOK + ldd 4,X Get ghost scrn Y location + addd #10 + cmpd PYNEW Compare to top of pacman + ble GOLOOK + ldd PYNEW Get pacman scrn Y location + addd #10 + cmpd 4,X Compare to top of ghost + ble GOLOOK + + lda #1 + sta HITFLG Set HIT FLAG + ldb 10,X Check status + cmpb #1 + beq GOLOOK + lda #-1 + sta HITFLG + lda GCOUNT + sta GHTHIT + +GOLOOK ldd ,X + cmpd #33 + ble SKIPDT + cmpd #3692 + bge SKIPDT + bsr LOOK Go look for dots to restore + cmpa #0 A will be >0 if dot found + beq SKIPDT Branch if no dot to put back + sta PDBFN Put dot buff# in PUTDOT + +* Put both dot(or pill) and ghost +* This routine will output both DOTCODE & PUTCODE + + leax PUTGHS,U Point to Putghost's rmb's + ldy #16 8 for dot & 8 for ghost + lda PATH Set output path + os9 I$Write Output PUTBLK code + lbcs ERR1 Branch if any errors + rts Return to MAIN + +SKIPDT lbsr PUTGHT Go put ghost back on screen +MAINRT rts Return to MAIN + +* The following routines look for any dots to +* replace after ghosts move on. + +LOOK leay ARRAY,U Point to start of array + lda 14,X Get direction flag + lbeq LOOKDN Ghost moving up, look down + deca + lbeq LOOKRT Ghost moving left, look right + deca + lbeq LOOKLF Ghost moving right, look left +* Moving DOWN, so look UP +LOOKUP ldd ,X Get ghost array offset + subd #69 Move up 1 space in array + leay D,Y Point Y reg. here + ldb ,Y Look at byte there + lbmi NODOT + ldb -69,Y Look at byte 1 line up + lbmi NODOT + cmpb #1 Check for intersection + ble LOOKU3 Go look 3 spaces up + cmpb #3 Is it a power dot? + bhi POWU2 + ldd 2,X Get ghost scrn X location + addd #7 Move right 7 pixels + std PDXLOC Put result in PUTDOT + ldd 4,X Get ghost scrn Y location + subd #3 Move 3 pixel up + std PDYLOC Put result in PUTDOT + lda #42 Set flag(Buff# for dot) + rts Return to PUTGH +POWU2 ldd 2,X Get ghost scrn X location + addd #5 + std PDXLOC Put result in PUTDOT + ldd 4,X Get ghost scrn Y location + subd #3 + std PDYLOC Put result in PUTDOT + lda #52 Set flag(Buff# for power dot) + rts Return to PUTGH + +LOOKU3 ldb -138,Y Get byte there + cmpb #1 + lble NODOT + cmpb #3 Is it a wall? + bhi POWU3 + ldd 2,X Get ghost scrn X location + addd #7 Add offset to dot location + std PDXLOC Put result in PUTDOT string + ldd 4,X Get ghost scrn Y location + subd #6 Subtract offset + std PDYLOC Put result in PUTDOT string + lda #40 Set flag (Also Buff #) + rts + +POWU3 ldd 2,X Get ghost scrn X location + addd #5 Add offset to dot location + std PDXLOC Put result in PUTDOT string + ldd 4,X Get ghost scrn Y location + subd #6 Subtract offset + std PDYLOC Put result in PUTDOT string + lda #50 Set flag (Also Buff #) + rts + +* The following routines are not commented because +* they are all identical to the LOOKUP routines +* except for the use of different buffer numbers +* and different offset values. +* +* Moving UP, so look down + +LOOKDN ldd ,X + addd #69 + leay D,Y + ldb ,Y + lbmi NODOT + ldb 69,Y + lbmi NODOT + cmpb #1 + ble LOOKD3 + cmpb #3 + bhi POWD2 + ldd 2,X + addd #7 + std PDXLOC + ldd 4,X + addd #9 + std PDYLOC + lda #43 + rts + +POWD2 ldd 2,X + addd #5 + std PDXLOC + ldd 4,X + addd #9 + std PDYLOC + lda #53 + rts + +LOOKD3 ldb 138,Y + cmpb #1 + lble NODOT + cmpb #3 + bhi POWD3 + ldd 2,X + addd #7 + std PDXLOC + ldd 4,X + addd #12 + std PDYLOC + lda #40 + rts + +POWD3 ldd 2,X + addd #5 + std PDXLOC + ldd 4,X + addd #12 + std PDYLOC + lda #50 + rts + +* Moving LEFT, so look right + +LOOKRT ldd ,X + leay D,Y + ldb 1,Y + lbmi NODOT + ldb 2,Y + cmpb #1 + lble NODOT + cmpb #3 + bhi POWR2 + ldd 2,X + addd #23 + std PDXLOC + ldd 4,X + addd #3 + std PDYLOC + lda #40 + rts + +POWR2 cmpb #6 + beq BONR2 + ldd 2,X + addd #21 + std PDXLOC + ldd 4,X + addd #3 + std PDYLOC + lda #50 + rts + +BONR2 ldd 2,X + addd #15 + std PDXLOC + ldd 4,X + addd #1 + std PDYLOC + lda BONBUF + rts + +* Moving RIGHT, so look left + +LOOKLF ldd ,X + leay D,Y + ldb -1,Y + bmi NODOT + ldb -2,Y + cmpb #1 + ble NODOT + cmpb #3 + bhi POWL2 + ldd 2,X + subd #9 + std PDXLOC + ldd 4,X + addd #3 + std PDYLOC + lda #40 + rts + +POWL2 cmpb #6 + beq BONL2 + ldd 2,X + subd #11 + std PDXLOC + ldd 4,X + addd #3 + std PDYLOC + lda #50 + rts + +BONL2 ldd 2,X + subd #17 + std PDXLOC + ldd 4,X + addd #1 + std PDYLOC + lda BONBUF + rts + +* This is the common exit for all the LOOK +* routines if no dot was found to replace. +* Clearing the A reg. is a flag for the +* PUTGH routine to let it know that no dot +* needs to be put back on the screen + +NODOT clra Clear flag + rts + + + ENDSECT + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/main90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,1126 @@ + + NAM MAIN + TTL Main pacman routine + +* Program segment to be compiled using Level II RMA +* This is the mainline program segment +* Written by Larry Olson + + IFP1 +* use /dd/defs/os9defs.a + ENDc + +TYPE EQU $11 Prgrm($10)+Objct($01) +ATTR EQU $80 REEntrent +REVS EQU $01 Revision level +ATREV EQU ATTR+REVS +EDITION EQU 2 EDITION #2 +STACK EQU 500 +UPDAT EQU 3 + + PSECT MAIN,TYPE,ATREV,EDITION,STACK,PAC + + VSECT + +* Local and global variables + +SIGCODE RMB 1 Intercept signal RMB +PATH: RMB 1 Screen path number +PATH2: RMB 1 Second screen path number +WINDOW: RMB 1 Holds 0 or 2 to keep track +* of which window is being used +PROCID: RMB 1 Holds process id +RESPON: RMB 2 Holds response bytes + + +PORT: RMB 2 Joystick port (0=right,1=left) +BUTTON: RMB 1 Joystick button status +JOYSTX: RMB 2 Joystick X value +JOYSTY: RMB 2 Joystick Y value + +PLAYRS: RMB 1 Holds 0 or 1 (for 1 or 2 players) + +PACMN1: RMB 1 Holds number of pacmen left(player1) +PACMN2: RMB 1 Holds number of pacmen left(player2) +PLCRNT: RMB 1 Holds current player number(1 or 2) +PACMAN: RMB 1 Holds current number of men left +* this will be either PACMN1 or PACMN2 + +PXNEW: RMB 2 New pacman X position +PYNEW: RMB 2 New pacman Y position +POFSET: RMB 2 Pacman offset from start of array +BUFF: RMB 1 Holds current pacman buffer # + +CYCLE: RMB 1 Used to cycle between buffers + +HITFLG: RMB 1 A 1 here = pacman caught +GHTHIT: RMB 1 Ghost hit flag +POWFLG: RMB 1 When pacman eats a power pill then +* this location holds a timer value + +BONFLG: RMB 1 Bonus on screen flag +BONTIM: RMB 1 Bonus timer +BONBUF: RMB 1 Current bonus buffer +BONUSX: RMB 2 Bonus X location at bottom of scrn +BONUSY: RMB 2 Bonus Y location at bottom of scrn +BONCNT: RMB 1 Bonus counter +BONTAB: RMB 10 Bonus item table + +BONTMP: RMB 2 Temporary storage +BTEMP: RMB 15 Used to hold BONUSX,BONUSY,BONCNT +* and BONTAB for 2 player mode +SNDPR1: RMB 2 +SNDPR2: RMB 2 + +* Ghost tables, One 20 byte table for each ghost + +G1OFST: RMB 2 Ghost position offset from start of array +G1XNEW: RMB 2 Screen X location of ghost +G1YNEW: RMB 2 Screen Y location of ghost +G1XOLD: RMB 2 Pseudo scrn X location of ghost +G1YOLD: RMB 2 Pseudo scrn Y location of ghost +G1STAT: RMB 1 Status flag for ghost +* -2 = Eyes are caged,timer not run out +* -1 = Ghost caged,timer not run out +* 0 = Ghost still in cage but moving out +* 1 = Ghost is free of cage,can move around +* 2 = Ghost has been turned into eyes +G1BUFF: RMB 1 Holds current buffer # for ghost +G1TIME: RMB 1 Ghost time out counter +TIMVAL: RMB 1 Ghost initial time out value +G1DIR: RMB 1 Ghost dir. (0=up,1=lf,2=rt,3=dn) +DIROFF: RMB 1 Direction offset (-69,-1,1,69) +G1UPDT: RMB 1 Holds update value to be count down +UPDATE: RMB 1 Initial update value + RMB 2 Extra bytes + +G2OFST: RMB 20 Table for ghost #2 + +G3OFST: RMB 20 Table for ghost #3 + +G4OFST: RMB 20 Table for ghost #4 + +GCOUNT: RMB 1 Holds num (0,20,40,60) of current ghost + +SCRPOS: RMB 3 Player 1 score xy print position +SCRASC: RMB 6 Score ascii characters put here +SCRBCD: RMB 3 Contains score in BCD +POINTS: RMB 3 Points that will be added to score +SHCNT: RMB 1 Temporary loop counter + +*********** These are used in 2 player mode *********** + +SCRPO2: RMB 3 Player 2 score xy print position +SCRAS2: RMB 6 Score ascii characters put here +SCRBC2: RMB 3 Contains score in BCD + +DOTTOT: RMB 2 Dot eaten total, used to show when +* screen has been cleared +SCNTOT: RMB 2 Total number of dots for +* The current screen +BRDNUM: RMB 1 Holds # of current board(starts at 1) +SCNFLG: RMB 1 Screen flag, starts at 2, is decremented +* when a scrn is cleared. When 0 a new +DOTTMP: RMB 2 Holds dot eaten total in 2 player mode +SCTOT2: RMB 2 Holds scrn dot total in 2 player mode +* screen is issued. +BRDTMP: RMB 1 Holds board # in 2 player mode +SCFTMP: RMB 1 Holds screen flag in 2 player mode + +DOTCNT: RMB 2 Dot counter in transfer routine + +RANNUM RMB 1 Random number variable +ADDEND RMB 1 Used in random number generator +SAVEX RMB 2 Save X reg. in random routine + +RSFLAG: RMB 1 Restart game flag + +PUTPACM: RMB 2 $1b,$2d will be put here +PCGBN: RMB 1 Group buff#, Process ID put here +PCBFN: RMB 1 Buffer number +PCXLOC: RMB 2 Putpacm X location +PCYLOC: RMB 2 Putpacm Y location + +PUTCODE: RMB 2 $1b,$2d will be put here +PGBN: RMB 1 Group buff#, Process ID put here +PBFN: RMB 1 Buffer number +PXLOC: RMB 2 Putblk X location +PYLOC: RMB 2 Putblk Y location + +PUTGHS: RMB 2 $1b,$2d will be put here +PGGBN: RMB 1 Group buff#, Process ID +1 put here +PGBFN: RMB 1 Buffer number +PGXLOC: RMB 2 PUTGHS X location +PGYLOC: RMB 2 PUTGHS Y location + +DOTCODE: RMB 2 $1b,$2d will be put here +PDGBN: RMB 1 Group buff#, Process ID put here +PDBFN: RMB 1 Buffer number +PDXLOC: RMB 2 Putdot X location +PDYLOC: RMB 2 Putdot Y location + +XSAVE: RMB 2 Temp. storage for X reg. + +STRLGH: RMB 1 Length of palette set string to send +STRING: RMB 16 Build palette set string here + +PALBT1: RMB 4 +PALBT2: RMB 4 + +HISPOS: RMB 3 High score screen print position +HSCASC: RMB 6 High score ascii characters + +KILBUF: RMB 4 $1b,$2a,procid,0 will be put here +KILBF2: RMB 4 $1b,$2a,procid +1,0 will be put here + +MOVFLG: RMB 1 Delay flag used in movpac + +EXTPAC: RMB 1 Extra pacman match number + +EXTPC2: RMB 1 Holds match number in 2 player mode + +* 32 byte area for SS.Mouse packet +* only used for Pt.Valid info +MOUSE: RMB 1 Pt. Valid + RMB 31 not used + +GHTABL: RMB 80 Duplicate ghost data table + +TABLE1: RMB 612 Used to save screen info for +* player 1 in 2 player mode +TABLE2: RMB 612 Used to save screen info for +* player 2 in 2 player mode. +SCNNUM: RMB 12 Screen number + + + RMB 150 + +ARRAY: RMB 3726 +ARREND: RMB 4 + RMB 150 + + RMB STACK + + ENDSECT + +PTHLST FCS "/W" +DWSET FCB $1B,$20,08,00,00,40,24,01,02,02 +DWEND FCB $1B,$24 +SELECT: FCB $1b,$21 +CLEAR: FCB $0C +CLREND: FCB $0b +CUROFF FCB $05,$20 +BOLDSW: FCB $1b,$3d,1 +BELCOD: FCB $07 +PLLST1: FCB $1b,$31,7,7,$1b,$33,7,$1b,$34,7 +PLLST2: FCB $1b,$31,6,25,$1b,$31,14,25 +SCNRST: FCB $1b,$25,0,0,40,24 +POPWIN: FCB $07,$1b,$25,7,8,24,9,$1b,$22 + FCB 1,0,0,22,7,2,0,$0c + +POPEND: FCB $07,$1b,$23,$1b,$25,8,9,22,7 + FCB $1b,$32,1,$1b,$33,0 + +BOTWIN: FCB $1b,$25,0,0,40,24,$07 + FCB $1b,$22,1,5,15,28,8,0,2,$0c + FCB $1b,$25,1,1,27,7,$1b,$33,2,$0c + FCB $1b,$25,0,0,27,7,$1b,$33,4,$0c + FCB $1b,$25,1,1,25,5,$1b,$33,0,$0c + +BOTEND: FCB 7,$1b,$23,$1b,$25,8,9,23,8 + FCB $1b,$32,1,$1b,$33,0 + +TITLE: FCB $1b,$33,2,$1b,$25,13,1,11,5 + FCB $0c,$1b,$33,1,$1b,$25,12,0,11 + FCB 5,$0c,$1b,$32,2,$1b,$33,0,$1b + FCB $25,13,1,9,3,$0c,2,33,33,80 + FCB 65,67,45,79,83,57 + +SCRBOX: FCB $1b,$33,2,$1b,$25,7,8,25,10,$0c + FCB $1b,$33,1,$1b,$25,6,7,25,10,$0c + FCB $1b,$32,2,$1b,$33,0,$1b,$25,7,8 + FCB 23,8,$0c,$1b,$25,8,9,22,7 + +* Select Start Screen # ? +STRSCN FCB 2,35,36,83,116,97,114,116,32 + FCB 83,99,114,101,101,110,32,35 + FCB 32,63,2,50,36 +* Select Joystick Port +* (L)eft or (R)ight --> ? +SELJOY FCB 2,33,33,83,101,108,101,99,116,32 + FCB 74,111,121,115,116,105,99,107,32 + FCB 80,111,114,116,2,34,35,66,121,32 + FCB 80,114,101,115,115,105,110,103,32 + FCB 66,117,116,116,111,110 + +* LEFT +LFTSTR FCB $1b,$32,4,2,34,37,76,69,70,84,32 + FCB 80,79,82,84,32 +* RIGHT +RGTSTR FCB $1b,$32,4,2,34,37,82,73,71,72,84 + FCB 32,80,79,82,84 +SLCTED FCB $1b,$32,2,2,44,37,83,101 + FCB 108,101,99,116,101,100 + +* Number of players +* (1 or 2) ? +PLYSTR FCB 2,34,33,78,117,109,98,101,114,32 + FCB 111,102,32,80,108,97,121,101,114,115 + FCB $1b,$32,3,2,33,34,40,106,111,121,115 + FCB 116,105,99,107,32,77,111,118,101,115 + FCB 32,66,111,120,41,$1b,$32,4,2,38,36 + FCB 49,2,47,36,50,$1b,$32,1,2,34,38,83 + FCB 101,108,101,99,116,32,87,105,116 + FCB 104,32,66,117,116,116,111,110 + +CURXY FCB 2,62,54 + +CURXY1 FCB 2,61,54 + +CURXY2 FCB 2,47,50 + +CURXY3 FCB 2,37,23 + +CURXY4 FCB 2,60,55 + +CURXY5 FCB 2,38,52 +* Player #1 +PL1: FCB $1b,$32,4,2,47,50,80,76,65,89,69,82,32,35,49 +* Player #2 +PL2: FCB $1b,$32,4,2,47,50,80,76,65,89,69,82,32,35,50 +* ** Pause ** +PAUSE FCB $1b,$22,1,14,23,13,1,0,10,32 + FCB 42,42,32,80,65,85,83,69,32,42,42 +* Close pause overlay or Hiscore overlay +PAUEND: FCB $1b,$23 +* Get Ready +GETRDY: FCB 2,39,36,71,69,84,32,82,69,65,68,89 +* Get Ready Player 1 +GETRD1: FCB 2,39,34,$1b,$32,1,80,108,97,121,101 + FCB 114,32,49,$1b,$32,2,2,39,36,71,69 + FCB 84,32,82,69,65,68,89 +* Get ready Player 2 +GETRD2: FCB 2,39,34,$1b,$32,1,80,108,97,121,101 + FCB 114,32,50,$1b,$32,2,2,39,36,71,69 + FCB 84,32,82,69,65,68,89 +* Game Over +GMOVER FCB $1b,$22,1,13,8,14,5,10,2,$0c,2,34 + FCB 34,71,65,77,69,32,32,79,86,69,82 +* Play Again (y/n) ? +PLYAGN FCB $1b,$32,4,2,35,34,80,76,65,89,32,65 + FCB 71,65,73,78,32,40,89,47,78,41,32,63 + FCB 2,52,34 +* QUIT PROGRAM (Y/N) ? +BRKKEY: FCB $1b,$32,10,$1b,$22,1,8,9,24,3 + FCB 10,2,2,34,33,81,85,73,84,32 + FCB 80,82,79,71,82,65,77,32 + FCB 40,89,47,78,41,32,63 +* Close +* break overlay +BRKEND: FCB $1b,$23 +* SCREEN BONUS +* 1000 POINTS +SCNBON: FCB $1b,$32,10,$1b,$22,1,12,9,16,4,10 + FCB 2,2,34,33,83,67,82,69,69,78,32 + FCB 66,79,78,85,83,2,34,34,49,48 + FCB 48,48,32,32,80,79,73,78,84,83 +* Close Screen bonus overlay +SCBEND: FCB $1b,$23 +* 100 High Score 0 +HSTRING FCB $1b,$32,10 +HSTRG2 FCB 2,34,32,32,32,49,48,48,48 +SCOR1 FCB $1b,$32,10 + FCB 2,43,32,72,73,71,72,2,55,32 + FCB 83,67,79,82,69,2,69,32,48 +* 0 Player #1 <-UP Player #2 0 +SCOR2 FCB $1b,$32,10,2,32,32,32,32,32 + FCB 32,32,48,32,80,76,65,89,69 + FCB 82,32,35,49,32,$1b,$32,12,60 + FCB 45,$1b,$32,9,85,80,32,32,32 + FCB $1b,$32,10,80,76,65,89,69,82 + FCB 32,35,50,32,32,32,32,32,32,48 +* This will print <-UP +SCR1: FCB $1b,$32,12,2,49,32,60,45,$1b + FCB $32,9,85,80,32,32,$1b,$32,10 +* This will print UP-> +SCR2: FCB $1b,$32,9,2,49,32,32,32,85,80 + FCB $1b,$32,12,45,62,$1b,$32,10 + + +* Open window #1 +PAC lda #UPDAT Set for OPEN with UPDATE + leax PTHLST,pcr Point to addr of Path list + os9 I$Open Open path to window + lbcs ERR2 + sta PATH Save path number + leax DWSET,pcr Point to DWSET code + ldy #10 Output 10 bytes + lda PATH Get path number + os9 I$Write Output DWSET code + lbcs ERR2 + +* Open window #2 + + lda #UPDAT Set for OPEN with UPDATE + leax PTHLST,pcr Point to addr of Path list + os9 I$Open Open path to window + lbcs ERR2 Branch if any errors + sta PATH2 Save path number 2 + leax DWSET,pcr Point to DWSET code + ldy #10 Output 10 bytes + lda PATH2 Get path number + os9 I$Write Output DWSET code + lbcs ERR2 Branch if any errors +* Setup window #2 + leax BOLDSW,pcr + ldy #3 + lbsr OUTST2 + leax CUROFF,pcr Point to cursor OFF code + ldy #2 Output 2 bytes + lbsr OUTST2 Output cursor off string + leax PLLST1,pcr Set grey background + ldy #10 + lbsr OUTST2 + leax CLEAR,pcr Point to clear screen code + ldy #1 Output 1 byte + lbsr OUTST2 Output clear screen string +* Select Window #2 + lda PATH2 Get path number + leax SELECT,pcr Point to SELECT code + ldy #2 Output 2 bytes + os9 I$Write Output select code + lbcs ERR1 + lda #2 + sta WINDOW Selecting window #2 + + leax TITLE,pcr Put title on screen + ldy #43 + lbsr OUTST2 + + leax SCNRST,pcr Reset screen to 40,24 + ldy #6 + lbsr OUTST2 + +* Setup window #1 + leax BOLDSW,pcr + ldy #3 + lbsr OUTSTR + leax CUROFF,pcr Point to cursor OFF code + ldy #2 Output 2 bytes + lbsr OUTSTR Output cursor off string + leax CLEAR,pcr Point to clear screen code + ldy #1 Output 1 byte + lbsr OUTSTR Output clear screen code + +GETID os9 F$ID Get process ID + sta PROCID Will be used for GBN + +* Get system time and use the seconds value to +* seed the random number generator. +* The 2 bytes for the seconds will be put in +* RANNUM and ADDEND + +SEEDER leax PALBT2,U Put time bytes here + os9 F$Time Go get time bytes + lbcs ERR1 Branch if any errors + +*** Set trap for BREAK key *** + +KEYTRAP: leax TRAP,pcr + os9 F$Icpt + lbcs ERR1 + bra FILSTR + +TRAP stb SIGCODE,U + rti Return from interrupt + + +* Preload Dotcode, Putcode and Getcode strings + +FILSTR ldd #$1b2d Code for PUTBLK + std PUTPACM + std PUTGHS + std PUTCODE Put it in Putblk string + std DOTCODE Put it in Putblk string + lda PROCID Get Process I.D. + sta PCGBN + sta PGBN Set Group Buffer # + sta PDGBN Set Group Buffer # + sta PGGBN Set Group Buffer # + + leax KILBUF,U Point to KILBUF string + ldd #$1b2a Kill buffer code + std ,X++ + lda PROCID Get process I.D. + sta ,X+ + lda #$00 + sta ,X + ldd #$1b31 + std PALBT1,U + std PALBT2,U + + leax HSTRG2,pcr + leay HISPOS,U + ldb #9 +HSLOOP lda ,X+ + sta ,Y+ + decb + bne HSLOOP + + clr RSFLAG + clr SIGCODE + clr BUTTON + + lbsr SBEGIN Read & display high scores + +RESTART nop Come here to restart game + +* Setupb will fill all object buffers +************************************** +* For testing +* To see all the objects that are put +* into the buffers, remove the REM's +* at locations #1, #2 and change the +* PATH2 to PATH at location #3 + +************************************** +* leax SELECT,pcr #1 +* ldy #$0002 #1 +* lbsr OUTSTR #1 +* clr WINDOW #1 +************************************** + +SETBUF lda #1 Set board # to 1 + sta BRDNUM + sta BRDTMP + +SKPCL2 lda #2 Set screen count flag to 2 + sta SCNFLG + sta SCFTMP + + tst RSFLAG Check restart flag + bne SETBF2 If no restart then + lbsr SETUPB go draw objects + +SETBF2 lbsr SETUPC + + ldd SCNTOT Get screen dot total + std SCTOT2 Copy to temporary + +************************************** +* lda PATH #2 +* leax RESPON,U #2 +* ldy #1 #2 +* os9 I$Read #2 +* lbcs ERR1 #2 +************************************** +CLSCRN leax CLEAR,pcr Point to clear screen code + ldy #1 Output 1 char. + lbsr OUTSTR Go output clear screen code + + lda RSFLAG Check restart flag + lbne SETVR1 Branch if restarting + + leax SELJOY,pcr Point to joystick select + ldy #44 Output 44 bytes + lbsr POPUP Do popup and output SELJOY + +JYLOOP lda PATH2,U + ldb #$13 + ldx #0 + os9 I$GetStt + lbcs ERR1 + ldb #0 + cmpa #0 + bne PUTPRT + lda PATH2,U + ldb #$13 + ldx #1 + os9 I$GetStt + lbcs ERR1 + ldb #1 + cmpa #0 + beq JYLOOP + +PUTPRT clra + std PORT,U Put value in PORT + leax LFTSTR,pcr + ldy #16 + cmpd #0 + bne PTDSPL + leax RGTSTR,pcr +PTDSPL lbsr OUTST2 + leax SLCTED,pcr + ldy #14 + lbsr OUTST2 + + ldx #100 + lbsr WAIT Pause for 50 ticks + + leax PAUEND,pcr + ldy #2 + lbsr OUTST2 + + ldx #75 + lbsr WAIT + + leax PLYSTR,pcr Point to players string + ldy #81 Output 81 bytes + lbsr POPUP Do popup and output PLYSTR + +* Put square +PUTSQR ldd #$1b32 + std STRING,U + lda #1 + sta STRING+2,U + ldd #$1b40 + std STRING+3,U + ldd #168 + std STRING+5,U + ldd #100 + std STRING+7,U + ldd #$1b48 + std STRING+9,U + ldd #208 + std STRING+11,U + ldd #143 + std STRING+13,U + leax STRING,U + ldy #15 + lbsr OUTST2 + + lda #0 Default = 1 player + sta JOYSTY + +NUMLOP lda PATH2 + ldb #$13 + ldx PORT,U + os9 I$GetStt + lbcs ERR1 + stx JOYSTX + sta BUTTON + bne GOTBUT + tfr X,D + lda #1 + cmpb #42 + bge PUTNUM + lda #0 + +PUTNUM sta JOYSTY + lda #0 + sta STRING+2,U + leax STRING,U + ldy #15 + lbsr OUTST2 + + lda JOYSTY + cmpa #0 + bne PUTLFT + ldd #168 + std STRING+5,U + ldd #208 + std STRING+11,U + bra DRWSQR +PUTLFT ldd #432 + std STRING+5,U + ldd #472 + std STRING+11,U +DRWSQR lda #1 + sta STRING+2,U + leax STRING,U + ldy #15 + lbsr OUTST2 + bra NUMLOP + +GOTBUT lda JOYSTY + sta PLAYRS + + ldx #100 + lbsr WAIT + + leax PAUEND,pcr + ldy #2 + lbsr OUTST2 + +SETVR1 ldd #308 + std PXNEW Pacman starting X location + std PCXLOC + ldd #94 + std PYNEW Pacman starting Y location + std PCYLOC + ldd #1966 Set initial pacman array offset + std POFSET + lda #3 + sta CYCLE Set cycle to 3 + lda #28 + sta BUFF Set starting pacman buffer + lda #80 Setup ghost counter value + sta GCOUNT + clr HITFLG Pacman hit flag + clr POWFLG Power pill flag + lda #3 + sta PACMN1 Set # of players to 3 + sta PACMN2 Set # of players to 3 + sta PACMAN Set current pacman to 3 + lda #1 + sta PLCRNT Set current player to #1 + sta EXTPAC,U Extra pacman goal byte + sta EXTPC2,U Goal for player 2 + ldd #0 + std DOTTOT Dot and pill total + std DOTTMP Dot & pill total, player2 + + lda #69 + sta BONBUF + clr BONFLG + lda #150 + sta BONTIM + leax BTEMP,U + ldd #8 + std BONUSX Set X starting location + std ,X++ + ldd #181 + std BONUSY Set Y starting location + std ,X++ + clr BONCNT Clear bonus counter + clr ,X + + lda PLAYRS Check flag + beq GRDY If 0 then only 1 player + lbsr BELL + leax GETRD1,pcr + ldy #29 + lbsr POPUP + bra DRWBRD +GRDY lbsr BELL + leax GETRDY,pcr Print GET READY + ldy #12 + lbsr POPUP Do popup and output GETRDY + +* Now draw board and place objects + +DRWBRD lbsr BOARDC + + +* Select approprite header for 1 or 2 player mode + +HEADER lda PLAYRS Check for 1 or 2 players + bne HEADR2 + leax SCOR1,pcr Point to 1 player header + ldy #22 Output 22 bytes + lbsr OUTSTR + leax HSTRING,pcr Position curser + ldy #3 Output 3 bytes + lbsr OUTSTR + leax HISPOS,U Point to HIGH score + ldy #9 output 9 bytes + lbsr OUTSTR + bra SELSCN +HEADR2 leax SCRPOS,U Point to score string + lda #32 + sta 1,X Set curser X location + leax SCOR2,pcr Point to 2 player header + ldy #55 Output 55 bytes + lbsr OUTSTR + +* Now select playing screen + +SELSCN lbsr BELL + + leax SELECT,pcr Point to select code + ldy #2 Output 2 bytes + lbsr OUTSTR Go to output routine + clr WINDOW Flag for window 0 + + leax POPEND,pcr + ldy #15 + lbsr OUTST2 + +* Main program loop +* +MAIN: lbra CHECKS Go check & move ghosts +MAIN1: lbsr MVPAC Go move pacman + +* Check for signals (break key) + + ldb SIGCODE,U + cmpb #2 Was it the break key ? + bne NOBRK + leax BRKKEY,pcr Point to string + ldy #35 Output 35 bytes + lbsr OUTSTR + clr RESPON,U + + lbsr READ Flush input buffer + + lbsr READ Go get input + + leax BRKEND,pcr Erase BRKKEY prompt + ldy #2 Output 2 bytes + lbsr OUTSTR + clr SIGCODE,U Clear signal flag + + lda RESPON,U Check input + cmpa #89 Was it a Y ? + beq YESBRK + cmpa #121 Was it a y ? + bne NOBRK + +YESBRK leax SELECT,pcr + ldy #2 + lbsr OUTST2 + + lbsr SCEND + ldx #50 + lbsr WAIT Sleep for 50 ticks + lbra EXIT Quit program + +NOBRK ldd DOTTOT Get dot total + cmpd SCNTOT Cleared the screen yet? + lbne CHKBUT + + ldx #80 + lbsr WAIT Pause for 80 ticks +* Display SCREEN BONUS + leax SCNBON,pcr + ldy #42 + lbsr OUTSTR +* Make noise + ldx #$3f06 + ldy #3000 + lbsr SND + ldy #2000 + lbsr SND + ldy #3000 + lbsr SND + ldy #2000 + lbsr SND +* Pause a few more seconds + ldx #150 + lbsr WAIT +* Close SCREEN BONUS overlay + leax SCBEND,pcr + ldy #2 + lbsr OUTSTR +* Add 1000 points to score for clearing screen + lda #16 + sta POINTS+1 + clr POINTS+2 + lbsr ADDUP + clr POINTS+1 +* Pause some more + ldx #150 + lbsr WAIT +* Add up bonus items at bottom of screen + + lbsr CNTBON + +* Select comment window + + leax SELECT,pcr + ldy #2 + lbsr OUTST2 + + ldx #300 + lbsr WAIT + + ldb PLAYRS Get # of players(1=0,2=1) + beq GTRDY Only one player + lbsr BELL + leax GETRD1,pcr Point player 1 string + ldy #29 Output 29 bytes + ldb PLCRNT Get current pacman number + cmpb #2 Is it player #2 ? + beq PLNUM2 + bra PLOUT + +PLNUM2 leax GETRD2,pcr Point to player #2 string +PLOUT lbsr POPUP Go output string + bra DOREST +GTRDY lbsr BELL + + leax GETRDY,pcr Point to GET READY string + ldy #12 Output 12 bytes + lbsr POPUP Do popup and output GETRDY + +* Reset screen + +DOREST lbsr NEWSCN + + ldx #150 + lbsr WAIT + + lbsr BELL + +* Select game window + + leax SELECT,pcr + ldy #2 + lbsr OUTSTR + + leax POPEND,pcr + ldy #15 + lbsr OUTST2 + +* The following routines are run once +* for every three times pacman moves +* +* First check to see if pacman screen is the +* screen currently being displayed. +* If not, then sleep for 2 ticks. + + +CHKBUT lda CYCLE Check for CYCLE=2 + cmpa #2 + lbne MAIN + +* Update Mouse packet + +CHKBT1 lda PATH + ldb #$89 + leax MOUSE,U + ldy #0 + os9 I$GetStt Do a SS.MOUSE call + lbcs ERR1 + lda MOUSE Get Pt.Valid byte + bne CHKBT2 + ldx #2 + lbsr WAIT Sleep for 2 ticks + bra CHKBT1 Loop till valid + +CHKBT2 lda BUTTON Check for button + lbeq MAIN Loop till button is pushed + leax PAUSE,pcr Point to pause string + ldy #21 Output 21 bytes + lbsr OUTSTR + +PAUBUT ldx #6 Sleep for 6 ticks + lbsr WAIT +* Get joystick data using SS.JOY + lda PATH + ldb #$13 + ldx PORT,U + os9 I$GetStt + lbcs ERR1 + sta BUTTON + + ldb BUTTON Check button + beq PAUBUT + clr BUTTON + + leax PAUEND,pcr Point to pause end + ldy #2 + lbsr OUTSTR + + lbra MAIN + + +WAIT4 lbsr READ Go wait for keypress + rts + +***** Game over ***** +* Used for 1 player mode and for +* player 2 in two player mode +* Ask player if they want to play again + +GAMOVR: leax GMOVER,pcr Point to GAME OVER string + ldy #23 Output 23 bytes + lbsr OUTSTR + + ldx #100 + lbsr WAIT Sleep for 100 ticks + leax PAUEND,pcr + ldy #2 + lbsr OUTSTR + + leax SELECT,pcr + ldy #2 + lbsr OUTST2 + + lbsr SCEND Display high scores + + leax BOTWIN,pcr + ldy #47 + lbsr OUTST2 + + leax PLYAGN,pcr Point to PLAY AGAIN + ldy #27 Output 27 bytes + lbsr OUTST2 Go output string + + lbsr READ2 Go get response + + clrb Clear reset flag + lda RESPON + cmpa #89 Was it a Y ? + bne CKLOW + incb Set flag +CKLOW cmpa #121 Was it a y ? + bne CKFLAG + incb Set flag +CKFLAG cmpb #0 Is flag clear ? + bne NOEX + leax BOTEND,pcr + ldy #15 + lbsr OUTST2 + ldb #0 + lbra EXIT + +NOEX leax BOTEND,pcr + ldy #15 + lbsr OUTST2 + + leax CLEAR,pcr Clear board screen + ldy #1 + lbsr OUTSTR + +* Compare Players score to High score + +COMHGH ldb #7 Set loop counter to 7 + leay HSCASC,U Point to High ascii + leax SCRASC-1,U Point to Player ascii -1 +CMLOOP decb Decrement loop counter + beq COMEND Exit loop + lda ,Y+ + leax 1,X + cmpa ,X + beq CMLOOP + bhi COMEND + + ldb #6 Set new loop counter + leax HSCASC,U + leay SCRASC,U +C2LOOP lda ,Y+ + sta ,X+ + decb + bne C2LOOP + +COMEND ldb #1 Set restart flag + stb RSFLAG + lbra RESTART Go restart + +GAMOV2: leax GMOVER,pcr Point to GAME OVER string + ldy #23 Output 23 bytes + lbsr OUTSTR + + ldx #150 + lbsr WAIT Sleep for 100 ticks + leax PAUEND,pcr Kill overlay window + ldy #2 + lbsr OUTSTR + + leax SELECT,pcr + ldy #2 + lbsr OUTST2 + + lbsr SCEND Display high scores + + rts + +EXIT nop + leax KILBUF,U + ldy #4 Output 4 bytes + lbsr OUTSTR Go kill buffers + leax DWEND,pcr + ldy #2 + bsr OUTSTR End the game screen + ldb #0 +QUIT os9 F$Exit Exit program + +* Do READ from PATH +READ: lda PATH + leax RESPON,U Put read char. here + ldy #1 Get 1 char. + os9 I$Read Go do read + lbcs ERR1 + rts + +* Do READ from PATH2 +READ2: lda PATH2 + leax RESPON,U + ldy #1 Get 1 char. + os9 I$Read Go do read + lbcs ERR1 + rts + +OUTSTR: lda PATH Get path number + os9 I$Write Output string till CR + lbcs ERR1 +OTDONE rts + +POPUP: pshs X + pshs Y + leax POPWIN,pcr + ldy #17 + bsr OUTST2 + puls Y + puls X +OUTST2: lda PATH2 + os9 I$Write + lbcs ERR1 + rts + +* This routine is used to sleep for +* a while. On entry the X reg. holds +* the number of ticks to sleep + +WAIT: os9 F$Sleep + lbcs ERR1 + rts + +PUTBLK: pshs X,Y + leax PUTCODE,U Point to putblk code rmb's + ldy #8 Output 8 bytes + lda PATH Set output path + os9 I$Write Output putblk code bytes + lbcs ERR1 Branch if any errors + puls X,Y + rts Return to calling routine + +PUTGHT: leax PUTGHS,U Point to putghs code rmb's + ldy #8 Output 8 bytes + lda PATH Set output path + os9 I$Write Output putghs code bytes + lbcs ERR1 Branch if any errors + rts Return to calling routine + +* Sound routines +* On entry X & Y regs. are already +* loaded with sound data + +SND: lda PATH + ldb #$98 + os9 I$SetStt + rts + +* Random number routine +* Will return random number in A reg. + +RANDNM: stx SAVEX Save X reg. + leax RANNUM,U Point to random number + lda ,X + rola + eora ,X + rora + inc 1,X + adda 1,X + bvc RDSKIP + inc 1,X +RDSKIP sta ,X + ldx SAVEX Restore X reg. + rts Return, A reg. holds number + +* Ring the bell +BELL: leax BELCOD,pcr + ldy #1 + lbsr OUTST2 + rts + +ERR1: lbra EXIT Do select and dwend +ERR2 lbra QUIT Dont do select or dwend + + + + ENDSECT + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/makefile Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,7 @@ +include $(NITROS9DIR)/rules.mak + +RFILES = main90.r board90.r caged90.r check90.r ghosts90.r movpac90.r \ + score90.r scrns90.r setup90.r + +pacos9: $(RFILES) + rlink $(RFILES) -o=pacos9 -l=/Users/boisy/Projects/c3/lib/sys.l
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/movpac90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,450 @@ + + NAM MOVPAC + TTL Move pacman routines + +* Program segment to be compiled using Level II RMA +* This is not a mainline program segment +* Written by Larry Olson + + IFP1 +* use /dd/defs/os9defs.a + ENDc + + +STACK EQU 100 + + + PSECT MOVPAC,0,0,2,STACK,MVPAC + + VSECT + +* Local variables + + RMB STACK + + ENDSECT + + +MVPAC: nop + +* Read joystick + +JOY lda PATH Set path to window + ldb #$13 Setup for SS.Joy + ldx PORT,U Get selected port + os9 I$GetStt + lbcs ERR1 + stx JOYSTX + sty JOYSTY + sta BUTTON +* Cycle is used to animate pacman + +CYC dec CYCLE Decrement cycle counter + bpl MVRT If >0 continue + lda #2 Reset counter to 2 + sta CYCLE + + clra + sta MOVFLG,U + +* Check direction of joystick & move pacman + +MVRT leay ARRAY,U Point to start of array + ldd POFSET Get pacman offset in array + leax D,Y +* X reg now points to pacman position in array + ldd JOYSTX Get joystick X value + cmpd #37 Is it greater than 37 ? + blo MVLFT Go to move left + + inc MOVFLG,U + + lda 1,X Get adjacent byte from array + lbmi MVDWN If wall then go check for down + ldd PCXLOC GET pseudo screen X location + cmpd PXNEW Is it equal to actual location? + beq SKIPR + addd #8 + std PCXLOC +SKIPR ldd PXNEW Get actual screen X location + addd #8 Add 8 to it + std PXNEW Put it back + ldd PYNEW Get screen Y location + std PCYLOC Set pyold = pynew + ldd POFSET Get pacman array offset + addd #1 Increment it + cmpd #1793 Is it off screen to the right ? + bne STBUF1 +* Erase pacman on right side of screen +* Before moving pacman to left side + lda #37 Set for blank pacman + sta PBFN Put it in putblk code + ldd #572 + std PXLOC + ldd #85 + std PYLOC + lbsr PUTBLK Go erase pacman + + ldd #44 + std PXNEW Reset pac screen X to 36 + subd #8 Set pseudo X location + std PCXLOC + lda #1 + ldd #1726 Move pacman to left side +STBUF1 std POFSET Store pacman array offset + leax D,Y Point to pacman position in array + lda #25 Set pacman direction buffer + sta BUFF for right facing pacman + ldb #1 + lda B,X Get the byte at this spot + bmi MVPAC1 Branch if wall + bita #6 Check for a dot or pill + beq MVPAC1 + lbsr ERPILL Go erase pill or dot + bra MVPAC1 +MVLFT ldd JOYSTX Get joystick X value + cmpd #27 + bhi MVDWN + inc MOVFLG,U + lda -1,X Get byte 1 move to the left + bmi MVDWN Branch if wall + ldd PXNEW Get new pac position + subd #8 Subtract 8 from it + std PXNEW Put it back + std PCXLOC Set pxold = pxnew + ldd PYNEW + std PCYLOC Set pyold = pynew + ldd POFSET Get pacman array offset + subd #1 Decrement it + cmpd #1725 Is it off left side of screen ? + bne STBUF2 If not then store hcount +* Erase pacman on left side of screen +* Before moving pacman to right side + lda #37 Set for blank pacman + sta PBFN Put it in PUTBLK code + ldd #44 + std PXLOC + ldd #85 + std PYLOC + lbsr PUTBLK Go erase pacman + + ldd #572 + std PXNEW Update screen location too. + std PCXLOC + ldd #1792 Move pacman to right side +STBUF2 std POFSET Store pacman array offset + leax D,Y X holds pacman position in array + lda #28 Set pacman direction buffer + sta BUFF for left facing pacman + ldb #-1 + lda B,X Get byte from array + bmi MVPAC1 Branch if wall + bita #6 Check for dot or pill + beq MVPAC1 + lbsr ERPILL Go erase pill or dot +MVPAC1 lda BUFF + adda CYCLE + sta PCBFN + leax PUTPACM,U + ldy #8 + lda PATH + os9 I$Write + lbcs ERR1 + +MVDWN leay ARRAY,U Point to start of array + ldd POFSET Get pacman array offset + leax D,Y X holds pacman array position + ldd JOYSTY Get joystick Y value + cmpd #27 Is it greater than 27 ? + bhi MVUP If not, then check for up move + inc MOVFLG,U + lda 69,X Look at byte one line down + lbmi LEAVE Branch if wall + ldd PCYLOC Get pseudo screen Y location + cmpd PYNEW Are they the same ? + beq SKIPD + addd #3 Add 3 to it + std PCYLOC +SKIPD ldd PYNEW Get actual screen Y location + addd #3 Add 3 to it + std PYNEW Put it back + ldd PXNEW + std PCXLOC +SKIPD2 ldd POFSET Get location in array + addd #69 Move down 1 line + cmpd #3692 Off screen at bottom? + bne STBUF3 + + lda #37 Blank pacman buffer + sta PBFN + ldd #316 + std PXLOC + ldd #166 + std PYLOC + lbsr PUTBLK Go erase pacman at bottom + + ldd #300 + std PXNEW + std PCXLOC + ldd #07 New Y scrn location + std PCYLOC + addd #3 + std PYNEW + ldd #33 Move to top of array +STBUF3 std POFSET + leax D,Y + lda #34 Set pacman direction buffer + sta BUFF for down facing pacman + ldb #69 Look one line down + lda B,X Get byte at this spot + bmi MVPAC2 Branch if wall + bita #6 Check for dot(2) or pill(4) + beq MVPAC2 Go move pacman + lbsr ERPILL Go erase pill or dot + bra MVPAC2 Go move pacman + +MVUP ldd JOYSTY Get joystick Y value + cmpd #37 Is it less than 37 ? + lblo LEAVE + inc MOVFLG,U + lda -69,X Get byte from array, 1 line up + bmi LEAVE Branch if wall + ldd PYNEW Get pac screen Y location + subd #3 Subtract 3 from it + std PYNEW Put it back + std PCYLOC Set pyold = pynew + ldd PXNEW + std PCXLOC Set pxold = pxnew + lda #31 Set direction buffer + sta BUFF to up facing pacman + ldd POFSET Get pacman array offset + subd #69 Move up one line + cmpd #33 At top of screen? + bne STBUF4 + + lda #37 Blank pacman buffer # + sta PBFN + ldd #300 + std PXLOC + ldd #13 + std PYLOC + lbsr PUTBLK Erase pacman at top + + ldd #316 + std PXNEW + std PCXLOC + ldd #169 + std PYNEW + std PCYLOC + ldd #3692 +STBUF4 std POFSET Put it back + leax D,Y X holds pacman array position + ldb #-69 + lda B,X Get byte at this spot + bmi MVPAC2 Branch if wall + bita #6 Check for dot(2) or pill(4) + beq MVPAC2 Go move pacman + lbsr ERPILL Go erase pill or dot +MVPAC2 lda BUFF Get current pac buffer + adda CYCLE Add cycle count + sta PCBFN Set putblk buffer + leax PUTPACM,U + ldy #8 + lda PATH + os9 I$Write + lbcs ERR1 + +LEAVE lda MOVFLG,U + bne EXTCHK + ldx #2 + lbsr WAIT + +EXTCHK ldb PACMAN Get # of pacmen left + cmpb #6 Only a total of 6 allowed + beq MVDONE If already 6, then exit + lda SCRBCD,U + anda #15 %00001111 strip high + cmpa EXTPAC,U Compare it with goal + blo MVDONE If not =, then exit + incb If =, then give bonus- + stb PACMAN pacman to player + inc EXTPAC,U Increment goal + ldd #181 + std PYLOC,U + lda #28 + sta PBFN,U + lda #30 + ldb PACMAN + subb #1 + mul + std PXLOC,U + ldd #600 + subd PXLOC,U + std PXLOC,U + lbsr PUTBLK + +MVDONE rts Return to MAIN + +PALCHG: clrb + stb STRLGH Save counter + leay STRING,U String to output + leax G1OFST,U Point to ghost tables + lda 10,X Get #1 ghost status + cmpa #1 + bne TEST2 + ldd #$1b31 Palette set code + std ,Y++ Put it in string + ldd #$043d + std ,Y++ Put it in string + inc STRLGH + lda #2 + sta 10,X Make ghost run from pacman +TEST2 lda 30,X Get #2 ghost status + cmpa #1 + bne TEST3 + ldd #$1b31 Palette set code + std ,Y++ Put it in string + ldd #$063d + std ,Y++ Put it in string + inc STRLGH + lda #2 + sta 30,X Make ghost run from pacman +TEST3 lda 50,X Get #3 ghost status + cmpa #1 + bne TEST4 + ldd #$1b31 Palette set code + std ,Y++ + ldd #$053d + std ,Y++ Put it in string + inc STRLGH + lda #2 + sta 50,X Make ghost run from pacman +TEST4 lda 70,X Get #4 ghost status + cmpa #1 + bne TESTCK + ldd #$1b31 Palette set code + std ,Y++ + ldd #$033d + std ,Y + inc STRLGH + lda #2 + sta 70,X Make ghost run from pacman +TESTCK ldb STRLGH + beq OTDONE + lda #4 + mul + tfr D,Y + leax STRING,U + lbsr OUTSTR +OTDONE rts + +* erase pill subroutine +* Erases DOT or PILL from array +* and updates score +* On entry, X reg points to spot in array +* B reg holds 1 byte offset 1,-1,96 or -96 +* A reg holds byte at that point in array + +ERPILL cmpa #6 Was it a bonus ? + beq ERBON + bita #4 Was it a power dot ? + beq ERDOT + anda #1 + sta B,X Erase power pill from array + lda #32 Add 20 to score + sta POINTS+2 + + ldd DOTTOT + addd #1 + std DOTTOT + + lda #100 Set timeout counter + sta POWFLG + lbsr PALCHG Go change color of ghosts + bra ADDUP + +ERBON clra + sta B,X + lbsr SETBON Go to Bonus Routines(in SCRNS) + lda #154 Add 100 to score + sta POINTS+2 + bra ADDUP + +ERDOT anda #1 + sta B,X Erase dot from array + lda #1 Add 1 point to score + sta POINTS+2 Put it back + + ldd DOTTOT + addd #1 + std DOTTOT + +* Add points to score + +ADDUP: leax SCRBCD+3,U + leay POINTS+3,U + ldb #3 Set loop counter to 3 + andcc #%11111110 Clear carry +ADLOOP lda ,-X Decrement X and get a byte + adca ,-Y Add new points + daa Decimal adjust bytes + sta ,X Put result back in score byte + decb Decrement loop counter + bne ADLOOP Loop till done + +SHIFT leay SCRASC,U Point to asc string + leax SCRBCD,U Point to score bytes + ldb #3 Set loop counter to 3 + stb SHCNT Set loop counter to 3 + clrb Clear leading zero flag +SFLOOP lda ,X Get a byte of score, bump pointer + lsra + lsra Shift high nibble to low + lsra + lsra + beq TSTFG1 + incb Set leading zero flag +TSTFG1 tstb Is leading zero flag set ? + bne ASCSET1 + lda #-16 48-16 = ascii space +ASCSET1 adda #48 Add ascii offset for number + sta ,Y+ Put result in score string + lda ,X+ Get bcd score byte again + anda #15 Mask off high nibble + beq TSTFG2 + incb +TSTFG2 tstb + bne ASCSET2 + lda #-16 +ASCSET2 adda #48 + sta ,Y+ + dec SHCNT + bne SFLOOP Loop 3 times + +JUST1 leax SCRPOS,U Point to score string + ldy #9 Output 9 characters + lbsr OUTSTR Go output string + + rts + +* Noise maker when pacman eats a dot + + +*WOCWOC lda PATH +* ldb #$98 +* ldx #$3202 +* ldy #3000 +* os9 I$SetStt + +* ldy #2000 +* os9 I$GetStt + +* Return to MAIN + +*SCDONE rts + + + ENDSECT + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/score90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,499 @@ + + NAM Score + TTL Routines to handle high score recording + +* Program segment to be compiled using Level II RMA +* This is not a mainline program segment +* Written by Larry Olson + + IFP1 +* use /dd/defs/os9defs.a + ENDc + +STACK EQU 100 + + PSECT SCORE,0,0,2,STACK,SBEGIN + + VSECT + +* Local Variables + +FPATH: rmb 1 File path number +FSCORE: rmb 126 Names & scores put here +PNAME: rmb 15 Players name +NAMLGH rmb 2 Number of characters in name +ENTCNT rmb 1 Entry counter +ENTPNT rmb 2 Pointer to start of entry +COUNT rmb 1 +SAVEX rmb 2 +CURPOS rmb 3 + + rmb STACK + + ENDSECT + +FILLST: fcc '/dd/sys/pac_scores' + +WRTNBY fcb 2,37,33,87,114,105,116,116 + fcb 101,110,32,66,121,$1b,$32,1,2 + fcb 35,36,76,97,114,114,121,32 + fcb 69,46,32,79,108,115,111,110 + +LDGSCR fcb 2,33,34,76,111,97,100,105,110 + fcb 103,32,72,105,103,104,32,83 + fcb 99,111,114,101,115 + +ENTNAM fcb $1b,$32,1,$1b,$33,0,$0c,2,33,33 + fcb 80,76,69,65,83,69,32 + fcb 69,78,84,69,82,32,89,79 + fcb 85,82,32,78,65,77,69,32 + +ARROW fcb $1b,$32,2,2,34,35,45,45,62 + fcb 32,$1b,$32,3,95,2,38,35 + +QUESTN fcb $1b,$32,9,2,32,35,32,73,115,32 + fcb 78,97,109,101,32,67,111,114,114 + fcb 101,99,116,32,40,89,47,78,41,32,63 + fcb 2,55,35 + +CONGRT fcb 2,37,33,$1b,$32,2,67,79,78 + fcb 71,82,65,84,85,76,65,84,73 + fcb 79,78,83,$1b,$32,4,2,38,35 + +NOTFND fcb $0c,$1b,$32,4,2,37,32,83,99,111 + fcb 114,101,32,70,105,108,101,$1b,$32 + fcb 2,2,34,34,47,100,100,47,115,121 + fcb 115,47,112,97,99,95,115,99,111 + fcb 114,101,115,$1b,$32,4,2,38,36 + fcb 78,79,84,32,70,79,85,78,68 + +CREATE fcb 2,38,36,32,32,32,32,32,32,32,32 + fcb 32,2,37,36,67,114,101,97,116 + fcb 105,110,103,32,73,116 + +CHGWK1 fcb $1b,$25,0,0,40,24 + fcb $1b,$33,7 + +CHGWK2 fcb $1b,$25,8,9,22,7,2,32,32 + +CRLF fcb $0d,$0a + +CLRSCN fcb $0c + +CURXY1 fcb 2,32,32 + +CURXY2 fcb $0c,2,38,33,$1b,$32,4 + +CLNORM fcb $1b,$32,2,$1b,$33,0 + +CLINVT fcb $1b,$32,4,$1b,$33,0 + +CLNRM2 fcb $1b,$32,2,$1b,$33,0 + + +SBEGIN: leax SCRBOX,pcr + ldy #39 + lbsr OUTST2 + leax WRTNBY,pcr + ldy #33 + lbsr OUTST2 + ldx #200 + lbsr WAIT + leax CLRSCN,pcr + ldy #1 + lbsr OUTST2 + leax LDGSCR,pcr + ldy #22 + lbsr OUTST2 + ldx #75 + lbsr WAIT + +OPENFL lda #1 Set for read + leax FILLST,pcr Point to pathlist + os9 I$Open Open file + lbcs OPNERR Go handle any errors + sta FPATH,U +READFL leax FSCORE,U Point to data storage area + ldy #126 Read entire file (126 bytes) + os9 I$Read Go do read + lbcs REDERR Go handle any errors +* Close file + lda FPATH,U + os9 I$Close + lbcs ERR1 + + leax CLRSCN,pcr + ldy #1 + lbsr OUTST2 + + lbsr PRFIL2 Print score data + leax CHGWK1,pcr Reset screen 0,0,40,24 + ldy #9 + lbsr OUTST2 + rts + +SCEND: lda #0 + sta ENTCNT,U + lda #2 + sta CURPOS,U + lda #32 + sta CURPOS+1,U + + lbsr SCRCMP Compare players score + lda ENTCNT,U + cmpa #-1 + beq SCRTN + +OPNFL2 lda #2 Set to write + leax FILLST,pcr + os9 I$Open + lbcs ERR1 + sta FPATH,U +WRITFL leax FSCORE,U + ldy #126 + os9 I$Write + lbcs ERR1 + lda FPATH,U + os9 I$Close + lbcs ERR1 + + ldx #100 + lbsr WAIT +SCRTN rts + +* File data has been put in memory +* now print it on screen +* This is used for path2 +PRFIL2 leax CLNRM2,pcr + ldy #6 + lbsr OUTST2 + leax CURXY1,pcr + ldy #3 + lbsr OUTST2 + leax FSCORE,U + leax -21,X + ldb #7 + pshs B,X +PLOOP2 puls B,X + decb + beq PDONE2 + leax 21,X + pshs B,X + ldy #21 + lbsr OUTST2 + leax CRLF,pcr + ldy #2 + lbsr OUTST2 + bra PLOOP2 + +PDONE2 rts + +SCRCMP lda #0 Set entry count to zero + ldb #0 + sta ENTCNT,U Save it + std ENTPNT,U Set entry pointer + leay FSCORE,U Point to start of data +SCLOOP leay 15,Y Move to first score + leax SCRASC-1,U Point to players score -1 + ldb #7 Set byte counter +SCLOP2 decb Decrement counter + beq NEXTCK If =, go get next score + lda ,Y+ Get hi-score byte + leax 1,X Bump player score pointer + cmpa ,X Compare them + beq SCLOP2 If =, go check next byte + blo MOVE If <, insert players name + +NEXTCK lda ENTCNT,U Get entry counter + inca Bump it + cmpa #6 Done 6 yet ? + bne NEXT Score not higher, Print old data + lda #-1 + sta ENTCNT,U + bra PRFILE + +NEXT sta ENTCNT,U Save count + leay FSCORE,U + ldb #21 + mul + leay D,Y + std ENTPNT,U + bra SCLOOP + +* This routine is used to insert the +* player's score into the hi-scores +* Move name & score data down to allow player's +* name & score to be inserted. This will remove +* the last item from the list + +MOVE lda #5 Set constant + suba ENTCNT,U Subtract entry counter + ldb #21 Set multiplier + mul B reg. holds loop counter + leax FSCORE,U Point to start of data + leax 126,X Move to last byte entry 6 +1 + leay FSCORE,U + leay 105,Y Move to last byte entry 5 +1 + cmpd #0 If on bottom, then don't + beq PUTIT move any down +INLOOP lda ,-Y Get a byte + sta ,-X Move it + decb Decrement counter + bne INLOOP + +* Now zero(underline) out previous entry at this location + +PUTIT ldb #15 Set byte counter + lda #95 ASCII underline chacarter +PUTLOP decb Decrement counter + beq PUTSCR + sta ,Y+ Store a '_' character + bra PUTLOP Loop till 15 are done +* Now transfer players score +PUTSCR lda #32 Space character + sta ,Y+ + ldb #7 Set transfer byte counter + leax SCRASC,U Point to players ascii score +PLOOP decb Decrement counter + beq PRFILE If 0, then exit + lda ,X+ Get byte & increment X + sta ,Y+ Put byte & increment Y + bra PLOOP +* File data has been put in memory +* now print it on screen +* This is used for path +PRFILE leax CLNORM,pcr + ldy #6 + lbsr OUTST2 + leax CHGWK2,pcr + ldy #9 + lbsr OUTST2 + leax FSCORE,U + leax -21,X + lda #-1 + ldb #7 + pshs D,X +PRLOOP puls D,X + decb + beq PRDONE + leax 21,X Point to line to print + inca Increment compare count + pshs D,X + cmpa ENTCNT,U Are we on the new line ? + bne NORMPR + stx SAVEX,U Save X register + leax CLINVT,pcr Invert screen colors + ldy #6 + lbsr OUTST2 + ldx SAVEX,U Get X register value + ldy #21 Output 21 bytes + lbsr OUTST2 + leax CRLF,pcr Do a carriage return + ldy #2 and a line feed + lbsr OUTST2 + leax CLNORM,pcr Reset screen colors + ldy #6 + lbsr OUTST2 + bra PRLOOP + +NORMPR ldy #21 + lbsr OUTST2 + leax CRLF,pcr + ldy #2 + lbsr OUTST2 + bra PRLOOP + +PRDONE lda ENTCNT,U + cmpa #-1 + lbeq RDDONE + +OPNBOT ldx #100 + lbsr WAIT + leax BOTWIN,pcr + ldy #47 + lbsr OUTST2 + +PNAMLP leax ENTNAM,pcr Print 'Please enter your name' + ldy #33 Output 34 bytes + lbsr OUTST2 + + leax ARROW,pcr Print '-->_' + ldy #17 + lbsr OUTST2 + +* Now get players name + +GETNAM leax PNAME,U Fill name storage + lda #32 with spaces + ldb #15 +PNLOOP sta ,X+ + decb + bne PNLOOP + +RDNAME leax PNAME,U Get name from player + ldy #15 14 + CR + lda PATH2,U + os9 I$ReadLn + lbcs ERR1 + tfr Y,D + + leax PNAME,U + subd #1 + leax D,X + std NAMLGH,U + lda #32 + sta ,X Remove CR + +NAMEOK ldd NAMLGH,U + cmpd #0 + beq NAMASK + + leax CURXY2,pcr Clear screen, Move to XY + ldy #7 location 6,0 + lbsr OUTST2 and set color + + leax PNAME,U + ldy NAMLGH,U + lbsr OUTST2 + +NAMASK leax QUESTN,pcr + ldy #33 + lbsr OUTST2 + + lbsr READ2 + lda RESPON,U + cmpa #89 + beq PUTNAM + cmpa #121 + beq PUTNAM + leax CLRSCN,pcr + ldy #1 + lbsr OUTST2 + + lbra PNAMLP + +PUTNAM leax BOTEND,pcr + ldy #15 + lbsr OUTST2 + + leax PNAME,U + leay FSCORE,U + ldd ENTPNT,U + leay D,Y + ldb #14 +PUTNML lda ,X+ + sta ,Y+ + decb + bne PUTNML + + lda ENTCNT,U + adda #32 + sta CURPOS+2,U + + leax CURPOS,U + ldy #3 + lbsr OUTST2 + + leax FSCORE,U + ldd ENTPNT,U + leax D,X + ldy #21 + lbsr OUTST2 + + leax BOTWIN,pcr + ldy #47 + lbsr OUTST2 + + leax CONGRT,pcr + ldy #27 + lbsr OUTST2 + + leax PNAME,U + ldy NAMLGH,U + lbsr OUTST2 + +RDDONE ldx #200 + lda ENTCNT,U + cmpa #-1 + beq RDWAIT + ldx #150 +RDWAIT lbsr WAIT Sleep for 150 or 200 ticks + lda ENTCNT,U + cmpa #-1 + beq RDEXIT + + leax BOTEND,pcr + ldy #15 + lbsr OUTST2 +RDEXIT rts + +* Handle file errors here +* 214- no permission +* 216- path name not found +* + +OPNERR cmpb #216 Is it PATH NAME NOT FOUND ? + lbne ERR1 +* Print Creating score file + leax NOTFND,pcr + ldy #56 + lbsr OUTST2 + ldx #75 + lbsr WAIT +FILLSC leax FSCORE,U Point to data area + ldb #7 Set counter + stb COUNT,U +DMLOOP lda COUNT,U + deca + beq CRFILE + sta COUNT,U Save new count + ldb #15 + lda #46 '.' +DLOOP2 decb + beq SPACE + sta ,X+ Put 14 '.' in data area + bra DLOOP2 +SPACE lda #32 ' ' + sta ,X+ Put a space in data area + lda #32 Space + ldb #6 +DLOOP3 decb + beq DZERO + sta ,X+ Put 5 spaces in data area + bra DLOOP3 +DZERO lda #48 '0' + sta ,X+ + bra DMLOOP + +* File doesn't exist, so create it + +CRFILE leax CREATE,pcr + ldy #26 + lbsr OUTST2 + leax FILLST,pcr Point to path list + lda #2 Access mode (2=write) + ldb #47 Attributes (00101111) + os9 I$Create Go create file + lbcs ERR1 + sta FPATH,U Save path # +* Write data to file +WRTFIL leax FSCORE,U Point to data + ldy #126 Write 126 bytes + lda FPATH,U Set path # + os9 I$Write Do write + lbcs ERR1 +* Now close file +CLSFIL lda FPATH,U + os9 I$Close + lbcs ERR1 + ldx #75 + lbsr WAIT + + rts + +REDERR lbra ERR1 + + + ENDSECT + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/scrns90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,490 @@ + + + NAM SCRNS + TTL Screen handling routines + +* Program segment to be compiled using Level II RMA +* This is not a mainline program segment +* Written by Larry Olson + + IFP1 +* use /dd/defs/os9defs.a + ENDc + +STACK EQU 100 + + PSECT SCRNS,0,0,2,STACK,DELPAC + + VSECT + +* Local variables + + RMB STACK + + ENDSECT + + +ERSCRN fcb 2,32,33,$0B + +SETCOL fcb $1b,$32,10 + +DELPAC: lda PLAYRS Check for 1 or 2 players + bne CHKTWO + lda PACMAN Get # of pacmen + deca Subtract 1 + sta PACMAN Save new player count + lbeq GAMOVR If 0 then END GAME + lbra NEWSC1 + +* 2 players, so check who's up + +CHKTWO lda PLCRNT Get current player + cmpa #1 Is it player #1 ? + bne PLAY2 +* Player 1 was up so kill one of his pacmen + lda PACMN1 Get number of pacmen + deca Subtract 1 + sta PACMN1 Save new total + bne TFRTWO + lbsr GAMOV2 Game over for player 1 + +* Transfer player2 variables +TFRTWO lda PACMN2 Get player 2 pacmen total + sta PACMAN Put it in current pacman + lda #2 + sta PLCRNT Set current player to 2 + leax SCR2,pcr Point arrow at player 2 + bra TFRSCR Go transfer score & run NEWSCREEN + +PLAY2 lda PACMN2 Get player 2 pacmen + deca Subtract 1 + sta PACMN2 Save new pacmen count + lbeq GAMOVR Game over + lda PACMN1 Get player 1 pacmen + sta PACMAN Put it in current pacman + lda #1 + sta PLCRNT Set current player to 1 + leax SCR1,pcr Point arrow at player 1 + +* Transfer score variables + +TFRSCR ldy #18 Output 18 characters to screen + lbsr OUTSTR Go output arrow + leax SCRPOS,U Point to score string + leay SCRPO2,U Point to score save area + ldb #12 Set count to 12 bytes + stb DOTCNT Save counter +SRLOOP lda ,X + ldb ,Y + sta ,Y+ + stb ,X+ + dec DOTCNT + bne SRLOOP Loop till 12 bytes done + + ldd EXTPAC,U + pshs d + ldd EXTPC2,U + std EXTPAC,U + puls D + std EXTPC2,U + +* Transfer board variables + + leax DOTTOT,U + leay DOTTMP,U + ldb #6 Transfer 6 bytes + stb DOTCNT Save counter +SBLOOP lda ,X + ldb ,Y + sta ,Y+ + stb ,X+ + dec DOTCNT + bne SBLOOP + +****************************** +NEWSC1 leax SELECT,pcr *---- Remark out for testing + ldy #2 * + lbsr OUTST2 * +****************************** + + ldx #75 + lbsr WAIT + lda PLAYRS Check for 1 or 2 players + beq ONEPLR + lbsr BELL + leax GETRD1,pcr + lda PLCRNT Get current player + cmpa #1 + beq PUTPLR + leax GETRD2,pcr +PUTPLR ldy #29 Output 29 bytes + lbsr POPUP + bra NEWSC2 + + ldx #75 + lbsr WAIT + + lbsr BELL + +ONEPLR leax GETRDY,pcr + ldy #12 + lbsr POPUP Do popup and output GETRDY + +NEWSC2 bsr NEWSCN Erase ghosts & pacman + lda PLAYRS Check for 1 or 2 players + beq SKIPTR + + lbsr TRANSF Transfer table to array + +SKIPTR nop + ldx #50 + lbsr WAIT + + lbsr BELL + + leax SELECT,pcr + ldy #2 + lbsr OUTSTR + + leax POPEND,pcr + ldy #15 + lbsr OUTST2 + + lbra MAIN + +* New screen routines + +NEWSCN: ldd PXNEW First erase pacman + std PXLOC + ldd PYNEW + std PYLOC + lda #37 Blank round pacman + sta PBFN + lbsr PUTBLK +* Now erase ghosts + lda #1 + sta PGBFN + lda #80 + sta GCOUNT +GHRSET lda GCOUNT + suba #20 + bmi GHRST2 + sta GCOUNT + leax G1OFST,U + leax A,X + ldd 2,X + std PGXLOC + ldd 4,X + std PGYLOC + lbsr PUTGHT + bra GHRSET +GHRST2 lbsr GHDATA +* Reset palette registers + leax PALST1,pcr + ldy #16 + lbsr OUTSTR + +* Clear and setup array +* Only clear array and dot total at start of game + + ldd DOTTOT Check dot total + cmpd SCNTOT Cleared screen ? + beq NEWBRD + + lda PLAYRS Check for 2 player mode + beq PTDOTS + + lda BRDNUM + cmpa BRDTMP Are players on same board? + beq SETVR2 + + leax ERSCRN,pcr Erase scrn, leave score + ldy #4 Output 4 bytes + lbsr OUTSTR + lbsr BOARDB Go draw players board + leax SETCOL,pcr Reset foreground color + ldy #3 Output 3 bytes + lbsr OUTSTR + bra SETVR2 + +NEWBRD: dec SCNFLG + bne NEWBR2 + lda #2 + sta SCNFLG Reset screen flag to 2 + lda BRDNUM Get board number + inca + cmpa #9 Only 8 boards + bne GETBRD + lda #1 Reset board to #1 +GETBRD sta BRDNUM Save new board number + leax ERSCRN,pcr Erase scrn, leave score + ldy #4 Output 4 bytes + lbsr OUTSTR + lbsr BOARDB Go draw new board + leax SETCOL,pcr Reset forgroung color + ldy #3 + lbsr OUTSTR +NEWBR2 lbsr CLRARR Clear array, fill with dots + ldd #0 + std DOTTOT Reset dot total + +* Redraw DOTS and PILLS that may have been +* partially erased by ghosts or pacman + +PTDOTS lbsr PDOTS + +RSTBON lbsr RESBON Go reset bonus + +* Reset pacman variables +SETVR2 ldd #308 + std PXNEW + std PCXLOC + std PXLOC,U + ldd #94 + std PYNEW + std PCYLOC + std PYLOC,U + lda #28 + sta BUFF + sta PBFN,U + lbsr PUTBLK Put starting pacman + ldd #1966 + std POFSET + lda #3 + sta CYCLE + lda #80 + sta GCOUNT + clr HITFLG + clr POWFLG + +RETURN rts Return to main loop + +* Transfer player table to array & array to table +* Used to save one players screen when switching +* to second player. + + +TRANSF leay TABLE1,U Point to player 1 table + lda PLCRNT,U + cmpa #2 Is new player #2 ? + beq TRFPUT + leay TABLE2,U Point to player 2 table +TRFPUT leax ARRAY,U Point to start of array + leax 70,X Move to first dot location + clr DOTCNT +TRLOOP inc DOTCNT Bump dot counter + lda ,X Get a byte from array + ldb ,Y Get a byte from table + sta ,Y+ Put array byte in table + stb ,X++ Put byte in array,bump pointer + lda DOTCNT Get dot counter + cmpa #34 Done 34 yet? + bne TRLOOP + cmpx #ARREND-69 Are we done? + bge TRCLR + leax 139,X Move down 2 lines in array + clr DOTCNT + bra TRLOOP + +TRCLR lbsr CLRARR Go clear and setup array + + leay TABLE1,U Point to player 1 table + lda PLCRNT,U + cmpa #1 Is new player #1 ? + beq TFRPT2 + leay TABLE2,U Point to player 2 table +TFRPT2 leax ARRAY,U Point to start of array + leax 70,X + clr DOTCNT +TRLOP2 inc DOTCNT + lda ,X + ldb ,Y + sta ,Y+ + stb ,X++ + lda DOTCNT + cmpa #34 + bne TRLOP2 + cmpx #ARREND-69 + bge TRDONE + leax 139,X + clr DOTCNT + bra TRLOP2 + +TRDONE lbsr PDOTS Go put dots on screen + +* Transfer players bonus variables (2 player mode only) +* Erase last players bonus items from screen + +TRFBON lda #69 Blank Bonus + sta PBFN,U + ldd BONUSX Get scrn x value + std PXLOC,U + ldd BONUSY Get scrn Y value + std PYLOC,U + lda BONCNT Get count of items + inca + sta BONTMP +TBLOOP dec BONTMP + beq TRBON2 Leave routine if 0 + lbsr PUTBLK Go erase item + ldd PXLOC,U + subd #28 + std PXLOC,U + bra TBLOOP + +* Now transfer bonus variables + +TRBON2 lda #15 Transfer 15 bytes + sta BONTMP + leax BONUSX,U Point to first block + leay BTEMP,U Point to second block +TLOOP2 lda ,X + ldb ,Y + sta ,Y+ + stb ,X+ + dec BONTMP + bne TLOOP2 + +* Now put new players bonus items on screen + +PBONUS ldd #8 + std PXLOC,U + ldd #181 + std PYLOC,U + leax BONTAB,U Point to table + stx BONTMP Save table pointer + lda BONCNT + beq PBDONE +PBLOOP pshs A Save count + ldd PXLOC,U + addd #28 + std PXLOC,U + ldx BONTMP Get pointer + ldb ,X+ Get next table item + stb PBFN,U + stx BONTMP Save pointer + lbsr PUTBLK Go put item on screen + puls A + deca Decrement counter + bne PBLOOP + +* Pacman may have to be put back on screen here + +PBDONE rts + +* Reset bonus variables + +RESBON: lda BONFLG Check flag + beq RESBN2 If 0, bonus not on screen + ldd #310 + std PXLOC + ldd #95 + std PYLOC + lda #69 + sta PBFN + lbsr PUTBLK Erase bonus from screen + leax ARRAY,U + ldd #1966 + leax D,X + clr ,X Erase bonus from array + clr BONFLG +RESBN2 lda #69 + sta BONBUF Reset bonus buffer # + lda #250 + sta BONTIM Reset bonus timer + rts + +* Bonus was eaten by pacman, so erase it +* and put it at bottom of screen + +SETBON: ldd #310 X scrn location of bonus + std PXLOC,U + ldd #95 Y scrn location of bonus + std PYLOC,U + lda #69 Number for blank bonus + sta PBFN,U + lbsr PUTBLK Go erase bonus +* Restore pacman (if erased) + leax PUTPACM,U + ldy #8 + lda PATH + OS9 I$Write + lbcs ERR1 +* Make noise + + ldx #$3f01 + ldy #3850 + lbsr SND + ldx #$3401 + ldy #4000 + lbsr SND + + leax BONTAB,U Point to item table + lda BONCNT + leax A,X Move to next table location + ldb BONBUF Get buffer number + stb ,X Put it in table + + ldd BONUSX + addd #28 Move to next location + std BONUSX Save new location + std PXLOC,U + ldd BONUSY + std PYLOC,U + lda BONBUF Get Bonus buffer number + sta PBFN,U + lbsr PUTBLK Put bonus at bottom of scrn + inc BONCNT Bump bonus counter + rts + +* When screen has been cleared, give an additional +* 100 points for each bonus at bottom of screen. +* Erase bonus item at bottom as it is added up. + +CNTBON: lda BONCNT Check for 0 bonus's + beq CTRTS If zero, then return + ldd BONUSY + std PYLOC,U + lda #69 Blank Bonus + sta PBFN,U + ldd BONUSX + std PXLOC,U +CTLOOP lbsr PUTBLK Go erase bonus item + +* Make noise + + ldx #$3f02 + ldy #4000 + lbsr SND + ldx #$3f03 + ldy #3800 + lbsr SND + ldx #$3f02 + ldy #4000 + lbsr SND + +* Bump score + + lda #1 Add 100 points to score + sta POINTS+1 + clr POINTS+2 + lbsr ADDUP + dec BONCNT Decrement bonus counter + beq CTDONE + ldd PXLOC,U + subd #28 Move to next item + std PXLOC,U + bra CTLOOP + +CTDONE clr POINTS+1 + ldd #8 + std BONUSX + +CTRTS rts + + + + ENDSECT + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/setup90.a Tue Jul 26 01:17:24 2005 +0000 @@ -0,0 +1,847 @@ + + NAM SETUP + TTL Routine to put objects in buffers + + IFP1 +* use /h0/defs/os9defs.a + ENDc + +STACK EQU 100 + + + PSECT SETUP,0,0,0,STACK,SETUPB + + VSECT + +* Local variables + +TABCNT RMB 1 +XVALUE RMB 2 +YVALUE RMB 2 +DOTCNT RMB 1 +BYTE RMB 1 +READCT RMB 2 + RMB STACK + + + ENDSECT + + +* The following fcb's,(up to SETLEN), will be put +* in Group Buffer #= (Process ID) + +* Change palette colors +PALSET fcb $1b,$31,0,54 Bright Yellow + fcb $1b,$31,1,9 Blue + fcb $1b,$31,2,0 Black + fcb $1b,$31,3,18 Green + fcb $1b,$31,4,36 Bright Red + fcb $1b,$31,5,63 White + fcb $1b,$31,6,25 Medium Blue + fcb $1b,$31,7,52 Medium Yellow-Orange + fcb $1b,$31,8,32 Medium Red + fcb $1b,$31,9,16 Medium Green + fcb $1b,$31,10,36 Bright Red + fcb $1b,$31,11,48 Medium Yellow + fcb $1b,$31,12,63 White + fcb $1b,$31,13,43 Medium Blue-Magenta + +* Draw and save dot +BLDOT fcb $1b,$2c,254,46,0,50,0,1,0,6,0,4 + +DOT fcb $1b,$32,7 + fcb $1b,$40,0,50,0,2 + fcb $1b,$4a,0,55,0,3 + fcb $1b,$40,0,52,0,1 + fcb $1b,$4a,0,53,0,4 + fcb $1b,$2c,254,40,0,50,0,1,0,6,0,4 + +DOT2 fcb $1b,$2c,254,42,0,50,0,1,0,6,0,3 + fcb $1b,$2d,254,42,0,25,0,5 + +DOT3 fcb $1b,$2c,254,43,0,50,0,2,0,6,0,3 + fcb $1b,$2d,254,43,0,25,0,10 + +* Draw and save power pill +BLPILL fcb $1b,$2c,254,56,0,60,0,10,0,10,0,4 + +POWPIL fcb $1b,$32,8 + fcb $1b,$40,0,60,0,11 + fcb $1b,$4a,0,69,0,12 + fcb $1b,$40,0,62,0,10 + fcb $1b,$4a,0,67,0,13 + fcb $1b,$2c,254,50,0,60,0,10,0,10,0,4 + +POW2 fcb $1b,$2c,254,52,0,60,0,10,0,10,0,3 + fcb $1b,$2d,254,52,0,25,0,55 + +POW3 fcb $1b,$2c,254,53,0,60,0,11,0,10,0,3 + fcb $1b,$2d,254,53,0,25,0,60 +* Blank bonus +BLBON fcb $1b,$2c,254,69,0,50,0,170,0,20,0,8 + +BONUS1 fcb $1b,$32,10 + fcb $1b,$40,0,50,0,174 + fcb $1b,$4a,0,57,0,175 + fcb $1b,$40,0,52,0,173 + fcb $1b,$4a,0,55,0,176 + fcb $1b,$40,0,60,0,175 + fcb $1b,$4a,0,67,0,176 + fcb $1b,$40,0,62,0,174 + fcb $1b,$4a,0,65,0,177 + fcb $1b,$32,9 + fcb $1b,$40,0,56,0,173 + fcb $1b,$42,0,56,0,173 + fcb $1b,$40,0,58,0,172 + fcb $1b,$4a,0,61,0,174 + fcb $1b,$40,0,60,0,171 + fcb $1b,$44,0,62,0,171 + fcb $1b,$40,0,62,0,170 + fcb $1b,$44,0,64,0,170 + fcb $1b,$2c,254,70,0,50,0,170,0,18,0,8 + +BONUS2 fcb $1b,$32,10 + fcb $1b,$40,0,88,0,170 + fcb $1b,$48,0,90,0,171 + fcb $1b,$32,12 + fcb $1b,$40,0,80,0,172 + fcb $1b,$4a,0,98,0,176 + fcb $1b,$32,2 + fcb $1b,$44,0,82,0,72 + fcb $1b,$40,0,96,0,172 + fcb $1b,$44,0,98,0,172 + fcb $1b,$42,0,80,0,173 + fcb $1b,$42,0,98,0,173 + fcb $1b,$32,13 + fcb $1b,$40,0,82,0,176 + fcb $1b,$4a,0,96,0,177 + fcb $1b,$40,0,86,0,176 + fcb $1b,$44,0,88,0,176 + fcb $1b,$2c,254,71,0,80,0,170,0,20,0,8 + +BONUS3 fcb $1b,$32,0 + fcb $1b,$40,0,114,0,175 + fcb $1b,$4a,0,122,0,177 + fcb $1b,$32,10 + fcb $1b,$40,0,110,0,171 + fcb $1b,$4a,0,126,0,174 + fcb $1b,$32,12 + fcb $1b,$40,0,116,0,171 + fcb $1b,$44,0,118,0,171 + fcb $1b,$42,0,124,0,171 + fcb $1b,$42,0,126,0,173 + fcb $1b,$40,0,110,0,173 + fcb $1b,$44,0,112,0,173 + fcb $1b,$40,0,118,0,173 + fcb $1b,$44,0,120,0,173 + fcb $1b,$32,2 + fcb $1b,$42,0,110,0,171 + fcb $1b,$42,0,126,0,171 + fcb $1b,$2c,254,72,0,110,0,170,0,20,0,8 + +* Get blank pacman +BLPAC fcb $1b,$2c,254,37,0,50,0,25,0,22,0,10 +* Draw and save round full pacman +RFPAC fcb $1b,$32,0 + fcb $1b,$40,0,50,0,29 + fcb $1b,$4a,0,71,0,32 + fcb $1b,$40,0,52,0,28 + fcb $1b,$4a,0,69,0,33 + fcb $1b,$40,0,54,0,27 + fcb $1b,$4a,0,67,0,34 + fcb $1b,$40,0,58,0,26 + fcb $1b,$4a,0,62,0,35 + fcb $1b,$2c,254,38,0,50,0,26,0,22,0,10 +* Right facing pacman cycle #1 +RFPAC1 fcb $1b,$2d,254,38,0,90,0,1 + fcb $1b,$40,0,98,0,5 + fcb $1b,$32,2 + fcb $1b,$4a,0,111,0,6 + fcb $1b,$2c,254,25,0,82,0,1,0,30,0,10 +* Right facing pacman cycle #2 +RFPAC2 fcb $1b,$2d,254,25,0,82,0,25 + fcb $1b,$40,0,106,0,28 + fcb $1b,$4a,0,111,0,31 + fcb $1b,$2c,254,26,0,82,0,25,0,30,0,10 +* Right facing pacman cycle #3 +RFPAC3 fcb $1b,$2d,254,26,0,82,0,50 + fcb $1b,$40,0,102,0,53 + fcb $1b,$4a,0,105,0,56 + fcb $1b,$40,0,106,0,52 + fcb $1b,$4a,0,109,0,57 + fcb $1b,$2c,254,27,0,82,0,50,0,30,0,10 +* Left facing pacman cycle #1 +LFPAC1 fcb $1b,$2d,254,38,0,130,0,1 + fcb $1b,$40,0,130,0,5 + fcb $1b,$4a,0,143,0,6 + fcb $1b,$2c,254,28,0,130,0,1,0,30,0,10 +* Left facing pacman cycle #2 +LFPAC2 fcb $1b,$2d,254,28,0,130,0,25 + fcb $1b,$40,0,130,0,28 + fcb $1b,$4a,0,135,0,31 + fcb $1b,$2c,254,29,0,130,0,25,0,30,0,10 +* Left facing pacman cycle #3 +LFPAC3 fcb $1b,$2d,254,29,0,130,0,50 + fcb $1b,$40,0,130,0,53 + fcb $1b,$4a,0,139,0,56 + fcb $1b,$40,0,132,0,52 + fcb $1b,$4a,0,135,0,57 + fcb $1b,$2c,254,30,0,130,0,50,0,30,0,10 +* Up facing pacman cycle #1 +UFPAC1 fcb $1b,$2d,254,38,0,170,0,1 + fcb $1b,$40,0,180,0,1 + fcb $1b,$4a,0,181,0,6 + fcb $1b,$2c,254,31,0,170,0,1,0,22,0,13 +* Up facing pacman cycle #2 +UFPAC2 fcb $1b,$2d,254,31,0,170,0,25 + fcb $1b,$40,0,178,0,25 + fcb $1b,$4a,0,183,0,29 + fcb $1b,$2c,254,32,0,170,0,25,0,22,0,13 +* Up facing pacman cycle #3 +UFPAC3 fcb $1b,$2d,254,32,0,170,0,50 + fcb $1b,$40,0,176,0,51 + fcb $1b,$4a,0,185,0,52 + fcb $1b,$2c,254,33,0,170,0,50,0,22,0,13 +* Down facing pacman cycle #1 +DFPAC1 fcb $1b,$2d,254,38,0,170,0,75 + fcb $1b,$40,0,180,0,79 + fcb $1b,$4a,0,181,0,84 + fcb $1b,$2c,254,34,0,170,0,72,0,22,0,13 +* Down facing pacman cycle #2 +DFPAC2 fcb $1b,$2d,254,34,0,170,0,96 + fcb $1b,$40,0,178,0,105 + fcb $1b,$4a,0,183,0,109 + fcb $1b,$2c,254,35,0,170,0,96,0,22,0,13 +* Down facing pacman cycle #3 +DFPAC3 fcb $1b,$2d,254,35,0,170,0,121 + fcb $1b,$40,0,176,0,132 + fcb $1b,$4a,0,185,0,133 + fcb $1b,$2c,254,36,0,170,0,121,0,22,0,13 + +* The following are used when pacman is killed +* #1 + fcb $1b,$2d,254,33,0,200,0,1 + fcb $1b,$2c,254,60,0,200,0,1,0,22,0,10 +* #2 + fcb $1b,$2d,254,60,0,200,0,25 + fcb $1b,$40,0,204,0,26 + fcb $1b,$4a,0,216,0,28 + fcb $1b,$40,0,206,0,29 + fcb $1b,$44,0,214,0,29 + fcb $1b,$2c,254,61,0,200,0,25,0,22,0,10 +* #3 + fcb $1b,$2d,254,61,0,200,0,50 + fcb $1b,$40,0,204,0,54 + fcb $1b,$4a,0,216,0,55 + fcb $1b,$40,0,208,0,56 + fcb $1b,$44,0,212,0,56 + fcb $1b,$42,0,204,0,58 + fcb $1b,$42,0,216,0,58 + fcb $1b,$2c,254,62,0,200,0,50,0,22,0,10 +* #4 + fcb $1b,$2d,254,62,0,200,0,70 + fcb $1b,$40,0,200,0,72 + fcb $1b,$4a,0,220,0,73 + fcb $1b,$42,0,200,0,76 + fcb $1b,$42,0,220,0,76 + fcb $1b,$42,0,202,0,77 + fcb $1b,$42,0,218,0,77 + fcb $1b,$42,0,206,0,78 + fcb $1b,$42,0,214,0,78 + fcb $1b,$42,0,208,0,79 + fcb $1b,$42,0,212,0,79 + fcb $1b,$2c,254,63,0,200,0,70,0,22,0,10 +* #5 + fcb $1b,$2d,254,63,0,200,0,90 + fcb $1b,$40,0,200,0,94 + fcb $1b,$44,0,220,0,94 + fcb $1b,$42,0,202,0,96 + fcb $1b,$42,0,218,0,96 + fcb $1b,$40,0,204,0,97 + fcb $1b,$44,0,206,0,97 + fcb $1b,$40,0,214,0,97 + fcb $1b,$44,0,216,0,97 + fcb $1b,$42,0,210,0,99 + fcb $1b,$2c,254,64,0,200,0,90,0,22,0,10 +* #6 + fcb $1b,$2d,254,64,0,200,0,110 + fcb $1b,$40,0,200,0,115 + fcb $1b,$44,0,220,0,115 + fcb $1b,$40,0,208,0,118 + fcb $1b,$44,0,212,0,118 + fcb $1b,$32,0 + fcb $1b,$42,0,202,0,116 + fcb $1b,$42,0,218,0,116 + fcb $1b,$2c,254,65,0,200,0,110,0,22,0,10 +* #7 + fcb $1b,$40,0,210,0,135 + fcb $1b,$44,0,210,0,139 + fcb $1b,$40,0,206,0,137 + fcb $1b,$44,0,214,0,137 + fcb $1b,$42,0,206,0,135 + fcb $1b,$42,0,214,0,135 + fcb $1b,$42,0,206,0,139 + fcb $1b,$42,0,214,0,139 + fcb $1b,$2c,254,66,0,200,0,130,0,22,0,10 +* #8 + fcb $1b,$2d,254,66,0,200,0,150 + fcb $1b,$32,2 + fcb $1b,$40,0,206,0,157 + fcb $1b,$44,0,214,0,157 + fcb $1b,$40,0,210,0,155 + fcb $1b,$44,0,210,0,159 + fcb $1b,$32,0 + fcb $1b,$42,0,210,0,157 + fcb $1b,$2c,254,67,0,200,0,150,0,22,0,10 + +* Blank cage door +BLCGDR fcb $1b,$2c,254,22,0,170,0,180,0,24,0,1 +* Cage door +CAGDOR fcb $1b,$32,8 + fcb $1b,$40,0,170,0,180 + fcb $1b,$44,0,199,0,180 + fcb $1b,$2c,254,23,0,170,0,180,0,24,0,1 + + +* The following fcb's will draw the ghost objects +* which will be put in Group buffer #= (Process ID +1) + +* Get blank ghost +BLGHST fcb $1b,$2c,254,1,0,50,0,50,0,20,0,10 +* Draw and save basic ghost (no eyes) +BCGHST fcb $1b,$32,4 Set color to red + fcb $1b,$40,0,50,0,50 Set draw pointer + fcb $1b,$4a,0,69,0,59 Draw bar rectangle + fcb $1b,$40,0,50,0,50 Set draw pointer + fcb $1b,$32,2 Set color to black + fcb $1b,$4a,0,51,0,51 Draw bar rectangle + fcb $1b,$44,0,53,0,50 Draw line + fcb $1b,$40,0,69,0,50 Set draw pointer + fcb $1b,$4a,0,68,0,51 Draw bar rectangle + fcb $1b,$44,0,66,0,50 Draw line + fcb $1b,$40,0,54,0,59 Set draw pointer + fcb $1b,$44,0,57,0,59 Draw line + fcb $1b,$40,0,62,0,59 Set draw pointer + fcb $1b,$44,0,65,0,59 Draw line + fcb $1b,$2c,254,18,0,50,0,50,0,20,0,10 +* Get blank eyes +*BLKEYE fcb $1b,$2c,254,21,0,60,0,1,0,14,0,3 +* Draw and save one eye +EYE fcb $1b,$40,0,62,0,2 + fcb $1b,$32,5 + fcb $1b,$44,0,63,0,2 + fcb $1b,$2c,254,19,0,60,0,1,0,6,0,3 +* Put second eye an save +EYES fcb $1b,$2d,254,19,0,68,0,1 + fcb $1b,$2c,254,20,0,60,0,1,0,14,0,3 +* Draw and save RED ghost up +RGHUP fcb $1b,$2d,254,18,0,50,0,75 + fcb $1b,$2d,254,19,0,52,0,78 + fcb $1b,$2d,254,19,0,62,0,78 + fcb $1b,$2c,254,2,0,50,0,75,0,20,0,13 + fcb $1b,$2d,254,2,0,50,0,150 +* WHITE ghost up +WGHUP fcb $1b,$32,5 + fcb $1b,$40,0,52,0,77 + fcb $1b,$4f + fcb $1b,$2c,254,6,0,50,0,75,0,20,0,13 + fcb $1b,$2d,254,6,0,50,0,125 +* GREEN ghost up +GGHUP fcb $1b,$32,3 + fcb $1b,$4f + fcb $1b,$2c,254,10,0,50,0,75,0,20,0,13 + fcb $1b,$2d,254,10,0,50,0,100 +* BLUE ghost up +BGHUP fcb $1b,$32,6 + fcb $1b,$4f + fcb $1b,$2c,254,14,0,50,0,75,0,20,0,13 +* RED ghost facing left +RDGHL fcb $1b,$2d,254,18,0,80,0,75 + fcb $1b,$2d,254,19,0,82,0,78 + fcb $1b,$2d,254,19,0,90,0,78 + fcb $1b,$2c,254,3,0,80,0,75,0,28,0,10 + fcb $1b,$2d,254,3,0,80,0,150 +* WHITE ghost facing left +WTGHL fcb $1b,$32,5 + fcb $1b,$40,0,82,0,77 + fcb $1b,$4f + fcb $1b,$2c,254,7,0,80,0,75,0,28,0,10 + fcb $1b,$2d,254,7,0,80,0,125 +* GREEN ghost facing left +GRGHL fcb $1b,$32,3 + fcb $1b,$4f + fcb $1b,$2c,254,11,0,80,0,75,0,28,0,10 + fcb $1b,$2d,254,11,0,80,0,100 +* BLUE ghost facing left +BLGHL fcb $1b,$32,6 + fcb $1b,$4f + fcb $1b,$2c,254,15,0,80,0,75,0,28,0,10 +* RED ghost facing right +RDGHR fcb $1b,$2d,254,18,0,110,0,75 + fcb $1b,$2d,254,19,0,114,0,78 + fcb $1b,$2d,254,19,0,122,0,78 + fcb $1b,$2c,254,4,0,102,0,75,0,28,0,10 + fcb $1b,$2d,254,4,0,102,0,150 +* WHITE ghost facing right +WTGHR fcb $1b,$32,5 + fcb $1b,$40,0,112,0,77 + fcb $1b,$4f + fcb $1b,$2c,254,8,0,102,0,75,0,28,0,10 + fcb $1b,$2d,254,8,0,102,0,125 +* GREEN ghost facing right +GRGHR fcb $1b,$32,3 + fcb $1b,$4f + fcb $1b,$2c,254,12,0,102,0,75,0,28,0,10 + fcb $1b,$2d,254,12,0,102,0,100 +* BLUE ghost facing right +BLGHR fcb $1b,$32,6 + fcb $1b,$4f + fcb $1b,$2c,254,16,0,102,0,100,0,28,0,10 + + fcb $1b,$2d,254,16,1,94,0,25 + fcb $1b,$40,1,102,0,27 + fcb $1b,$32,6 + fcb $1b,$4f + fcb $1b,$2c,254,16,1,94,0,25,0,28,0,10 + +* Red ghost facing down +RGHDN fcb $1b,$2d,254,18,0,140,0,75 + fcb $1b,$2d,254,19,0,142,0,78 + fcb $1b,$2d,254,19,0,152,0,78 + fcb $1b,$2c,254,5,0,140,0,72,0,20,0,13 + fcb $1b,$2d,254,5,0,140,0,148 +* White ghost facing down +WGHDN fcb $1b,$32,5 + fcb $1b,$40,0,142,0,77 + fcb $1b,$4f + fcb $1b,$2c,254,9,0,140,0,72,0,20,0,13 + fcb $1b,$2d,254,9,0,140,0,123 +* Green ghost facing down +GGHDN fcb $1b,$32,3 + fcb $1b,$4f + fcb $1b,$2c,254,13,0,140,0,72,0,20,0,13 + fcb $1b,$2d,254,13,0,140,0,98 +* Blue ghost facing down +BGHDN fcb $1b,$32,6 + fcb $1b,$4f + fcb $1b,$2d,254,5,1,100,0,48 + fcb $1b,$40,1,110,0,56 + fcb $1b,$32,6 + fcb $1b,$4f + fcb $1b,$2c,254,17,1,100,0,48,0,20,0,13 + + fcb 255 +SETLEN EQU *-PALSET + + +DOTAB1 fdb 284 + fcb 21,1,1,14,41,1,14,13,7,22,1,10,7 + fcb 55,10,7,21,13,4,41,13,4,1,16,7 + fcb 55,16,7,21,19,14,1,25,11,47,25,11 + fcb 21,28,14,1,34,14,41,34,14,7,40,28 + fcb 1,46,4,21,46,4,41,46,4,61,46,4 + fcb 1,52,34 + + fcb 1,1,6,1,34,7,7,40,3,9,16,7,13,1,6 + fcb 13,34,3,21,7,3,21,19,6,21,40,3 + fcb 27,1,3,27,13,3,27,34,3,27,46,3 + fcb 41,1,3,41,13,3,41,34,3,41,46,3 + fcb 47,7,3,47,19,6,47,40,3,55,1,6 + fcb 55,34,3,59,16,7,61,40,3,67,1,6 + fcb 67,34,7,0,0 + + fcb 1,7,4,67,7,4,1,40,5,67,40,5 + fcb 1,25,0,67,25,0,33,28,0,35,28,0 + fcb 0,25,0,68,25,0,0,0 + +DOTAB2 fdb 302 + fcb 24,1,1,7,55,1,7,13,4,22,1,7,7 + fcb 55,7,7,1,13,7,21,13,6,37,13,6 + fcb 55,13,7,1,19,7,21,19,14,55,19,7 + fcb 13,25,5,47,25,5,21,28,14,1,34,16 + fcb 37,34,16,1,40,3,13,40,22,63,40,3 + fcb 1,46,7,21,46,14,55,46,7,1,52,34 + + fcb 1,1,14,1,46,3,5,40,3,7,19,6,13,1,5 + fcb 13,19,10,21,4,4,21,19,6,21,40,3 + fcb 31,13,3,31,34,3,33,1,2,35,46,3 + fcb 37,13,3,37,34,3,47,4,4,47,19,6 + fcb 47,40,3,55,1,5,55,19,10,61,19,6 + fcb 63,40,3,67,1,14,67,46,3,0,0 + + fcb 1,7,5,67,7,5,1,40,5,67,40,5 + fcb 33,0,0,33,1,0,35,52,0,35,53,0 + fcb 33,28,0,35,28,0,0,0 + +DOTAB3 fdb 294 + fcb 23,1,1,16,37,1,16,13,7,22,1,10,7 + fcb 55,10,7,21,13,6,37,13,6,1,16,7 + fcb 55,16,7,21,19,14,1,25,11,47,25,11 + fcb 21,28,14,1,34,16,37,34,16,1,40,3 + fcb 13,40,22,63,40,3,1,46,7,21,46,6 + fcb 37,46,6,55,46,7,1,52,34 + + fcb 1,1,6,1,34,3,1,46,3,5,40,3 + fcb 13,1,16,21,7,3,21,19,6,21,40,3 + fcb 31,1,3,31,13,3,31,34,3,31,46,3 + fcb 37,1,3,37,13,3,37,34,3,37,46,3 + fcb 47,7,3,47,19,6,47,40,3,55,1,16 + fcb 63,40,3,67,1,6,67,34,3,67,46,3 + fcb 0,0 + + fcb 1,7,4,67,7,4,1,40,5,67,40,5 + fcb 0,25,0,1,25,0,3,25,0,5,25,0 + fcb 7,25,0,9,25,0,11,25,0 + fcb 57,25,0,59,25,0,61,25,0 + fcb 63,25,0,65,25,0,67,25,0 + fcb 68,25,0,33,28,0,35,28,0 + fcb 0,0 + +DOTAB4 fdb 327 + fcb 24,1,1,34,21,7,14,1,10,7,55,10,7 + fcb 13,13,22,1,16,7,55,16,7,21,19,14 + fcb 3,22,6,55,22,6,13,25,5,47,25,5 + fcb 3,28,6,21,28,14,55,28,6,1,34,16 + fcb 37,34,16,1,40,7,21,40,14,55,40,7 + fcb 1,46,7,21,46,14,55,46,7,1,52,34 + + fcb 1,1,6,1,34,3,1,46,3,3,22,3,7,1,4 + fcb 7,40,3,13,1,14,13,46,3,21,1,3 + fcb 21,19,12,25,7,3,31,34,3,33,1,3 + fcb 33,13,3,35,46,3,37,34,3,43,7,3 + fcb 47,1,3,47,19,12,55,1,14,55,46,3 + fcb 61,1,4,61,40,3,65,22,3,67,1,6 + fcb 67,34,3,67,46,3,0,0 + + fcb 1,7,4,67,7,4,1,40,5,67,40,5 + fcb 33,28,0,35,28,0,33,1,0,35,52,0 + fcb 33,0,0,35,53,0,0,0 + +DOTAB5 fdb 310 + fcb 29,1,1,16,37,1,16,7,7,28,7,13,4 + fcb 21,13,6,37,13,6,55,13,4,1,19,7 + fcb 21,19,14,55,19,7,13,22,5,47,22,5 + fcb 1,25,7,55,25,7,21,28,14,1,31,4 + fcb 61,31,4,7,34,4,21,34,4,31,34,4 + fcb 41,34,4,55,34,4,7,40,4,21,40,6 + fcb 37,40,6,55,40,4,1,46,34 + fcb 1,52,16,37,52,16 + + fcb 1,1,7,1,31,8,7,1,3,7,13,3,7,25,6 + fcb 13,7,3,13,19,6,13,40,3,21,7,3 + fcb 21,19,4,21,34,5,27,28,3,31,1,3 + fcb 31,13,3,31,34,3,31,46,3,37,1,3 + fcb 37,13,3,37,34,3,37,46,3,41,28,3 + fcb 47,7,3,47,19,4,47,34,5,55,7,3 + fcb 55,19,6,55,40,3,61,1,3,61,13,3 + fcb 61,25,6,67,1,7,67,31,8,0,0 + + fcb 1,7,4,67,7,4,1,40,5,67,40,5 + fcb 1,25,0,67,25,0,33,28,0,35,28,0 + fcb 0,25,0,68,25,0,0,0 + +DOTAB6 fdb 336 + fcb 25,1,1,34,1,7,4,19,7,16,61,7,4 + fcb 7,13,7,25,13,4,37,13,4,49,13,7 + fcb 1,19,34,1,25,4,15,25,4,47,25,4 + fcb 61,25,4,7,28,5,21,28,14,53,28,5 + fcb 1,34,16,37,34,16,7,40,7,25,40,10 + fcb 49,40,7,1,46,4,19,46,16,61,46,4 + fcb 1,52,34 + + fcb 1,1,18,7,7,3,7,19,6,7,40,3,13,1,7 + fcb 13,34,7,15,25,2,19,7,3,19,40,3 + fcb 21,19,6,25,1,7,25,34,7,31,13,3 + fcb 31,34,3,33,1,3,35,46,3,37,13,3 + fcb 37,34,3,43,1,7,43,34,7,47,19,6 + fcb 49,7,3,49,40,3,53,25,2,55,1,7 + fcb 55,34,7,61,7,3,61,19,6,61,40,3 + fcb 67,1,18,0,0 + + fcb 1,7,5,67,7,5,1,40,4,67,40,4 + fcb 33,1,0,35,52,0,33,28,0,35,28,0 + fcb 33,0,0,35,53,0,0,0 + +DOTAB7 fdb 318 + fcb 31,1,1,15,39,1,15,21,7,14,5,10,3 + fcb 13,10,5,47,10,5,59,10,3,21,13,5 + fcb 39,13,5,1,16,7,55,16,7,13,19,22 + fcb 5,22,3,59,22,3,1,25,3,13,25,5 + fcb 47,25,5,63,25,3,5,28,5,21,28,14 + fcb 55,28,5,1,34,11,27,34,8,47,34,11 + fcb 7,40,13,37,40,13,1,46,4,21,46,6 + fcb 37,46,6,61,46,4,1,52,34 + + fcb 1,1,6,1,34,7,5,10,3,5,22,3,7,40,3 + fcb 9,1,4,9,16,3,9,28,3,13,1,10,13,34,3 + fcb 15,40,5,21,7,3,21,19,6,21,40,3 + fcb 27,28,3,29,1,3,29,13,3,31,34,3 + fcb 31,46,3,37,34,3,37,46,3,39,1,3 + fcb 39,13,3,41,28,3,47,7,3,47,19,6 + fcb 47,40,3,53,40,5,55,1,10,55,34,3 + fcb 59,1,4,59,16,3,59,28,3,61,40,3 + fcb 63,10,3,63,22,3,67,1,6,67,34,7,0,0 + + fcb 1,7,4,67,7,4,1,40,5,67,40,5 + fcb 1,25,0,67,25,0,33,28,0,35,28,0 + fcb 0,25,0,68,25,0,0,0 + +DOTAB8 fdb 332 + fcb 32,1,1,15,37,1,16,7,7,4,19,7,3 + fcb 29,7,5,43,7,3,55,7,4,1,10,4,61,10,4 + fcb 19,13,15,1,16,7,55,16,7,13,19,22 + fcb 1,22,5,59,22,5,13,25,5,47,25,5 + fcb 1,28,5,21,28,14,59,28,5,1,34,16 + fcb 37,34,16,1,40,7,21,40,15,55,40,7 + fcb 1,46,7,21,46,3,31,46,5,45,46,3 + fcb 55,46,7,1,52,16,39,52,15 + + fcb 1,1,14,1,46,3,7,1,6,7,40,3,9,22,3 + fcb 13,1,14,13,46,3,19,7,3,21,19,6 + fcb 21,40,3,23,1,3,25,13,3,25,46,3,29,1,3 + fcb 31,34,3,31,46,3,33,1,5,35,40,5 + fcb 37,1,3,37,34,3,39,46,3,41,13,3 + fcb 43,1,3,45,46,3,47,7,3,47,19,6 + fcb 49,40,3,55,1,14,55,46,3,59,22,3 + fcb 61,1,6,61,40,3,67,1,14,67,46,3,0,0 + + fcb 1,7,4,67,7,4,1,40,5,67,40,5 + fcb 33,0,0,33,1,0,35,52,0,35,53,0 + fcb 33,28,0,35,28,0,0,0 + + +GHSET + fcb 6,77,0,245,0,79,0,245,0,79 + fcb -1,2,150,150,0,0,4,4,4,36 + + fcb 6,93,1,117,0,79,1,117,0,79 + fcb -1,14,100,100,0,0,4,4,6,25 + + fcb 6,82,1,29,0,79,1,29,0,79 + fcb -1,6,50,50,0,0,4,4,5,63 + + fcb 6,88,1,77,0,79,1,77,0,79 + fcb -1,10,10,10,0,0,4,4,3,18 + + +* +* The SETUPB routine is used to insert the PROCESS I.D. number into +* the GROUP BUFFER numbers of the GETBLK and PUTBLK strings. +* This had me stumped for a while because the draw codes are in FCB's +* in the program area, which legally in OS9 can't be changed. The way I +* found to get around this is that since the memory area for the board array +* has already been allocated (3726 bytes), but it has not yet been filled, +* all the object draw fcb's can be transfered to this memory area and as +* the data is transfered I change the dummy GROUP BUFFER (254) number in +* the GETBLK and PUTBLK commands, to the PROCESS I.D. number. +* + +SETUPB: leay ARRAY,U Point to where data is to go + leax PALSET,pcr Point to FCB's to read +TRLOOP lda ,X+ Get a byte from program area + cmpa #255 255 = end of data + beq WRTOUT If so, then go write it out + cmpa #254 Do we put I.D. here ? + bne TRSTOR If not, then store this byte + lda PROCID If so, then get process I.D. byte +TRSTOR sta ,Y+ Store byte in data area + bra TRLOOP Loop till end of FCB's (255) + +* The fcb's have been transfered so now output them to path + +WRTOUT leax ARRAY,U Point to where FCB data was put + ldy #SETLEN-1 Get byte count to output + lda PATH Set output path + os9 I$Write Go output data + lbcs ERR1 Branch if any errors + rts + +* Initially we clear the array then put the array data +* in the screen save table, in case there are more than +* one players. The array will be filled with $ff s. + +SETUPC: bsr CLRARR Go setup the array & variables + +FILTAB leay TABLE2,U Point to player 2 table + sty YVALUE Save temporary pointer + leay TABLE1,U Point to player 1 table + sty XVALUE,U Save temporary value + leax ARRAY,U Point X reg. at array + leax 68,X Move to first dot location -2 + clr DOTCNT +FLOOP leax 2,X Bump X reg. 2 times + inc DOTCNT + lda ,X Get a byte from the array + ldy XVALUE,U + sta ,Y+ Put it in table 1,bump pointer + sty XVALUE,U + ldy YVALUE,U + sta ,Y+ Put it in table 2,bump pointer + sty YVALUE,U + lda DOTCNT + cmpa #34 + bne FLOOP + cmpx #ARREND-73 Are we done ? + bge FILEND If so then get out + leax 139,X Move down 3 lines + clr DOTCNT + bra FLOOP + +FILEND lbra RETURN Leave setup routine + +* This routine fills the entire array with -1's +* The -1's will represent walls when the rest of the array is filled + +CLRARR: leax ARRAY,U Point to array + ldd #$ffff +CLRLOP std ,X++ Fill 2 bytes in array + cmpx #ARREND End of array yet? + ble CLRLOP + leax ARRAY,U + ldd #$0000 + std -36,X + std -105,X + std 3761,X + std 3830,X + +* This routine will put DOTS (=2) and SPACES (=0) in array + +FILARR lda BRDNUM Get board number + deca + bne SEL2 + leay DOTAB1,pcr + bra SELEND +SEL2 deca + bne SEL3 + leay DOTAB2,pcr + bra SELEND +SEL3 deca + bne SEL4 + leay DOTAB3,pcr + bra SELEND +SEL4 deca + bne SEL5 + leay DOTAB4,pcr + bra SELEND +SEL5 deca + bne SEL6 + leay DOTAB5,pcr + bra SELEND +SEL6 deca + bne SEL7 + leay DOTAB6,pcr + bra SELEND +SEL7 deca + bne SEL8 + leay DOTAB7,pcr + bra SELEND +SEL8 leay DOTAB8,pcr + +SELEND ldd ,Y++ Get Dot total + std SCNTOT + lda ,Y+ Get number of entries + sta TABCNT +LOOP ldd ,Y++ Get 2 bytes & bump Y reg. twice + beq PUTLOP End of DOT table=0000,Go do PILLS + sta XVALUE Save xvalue, B holds yvalue + lda ,Y+ Get # of dots to put on line + sta DOTCNT Save this number +CALC lda #69 + mul Multiply yvalue by 69 + addb XVALUE Add xvalue to result + adca #$00 Add any carry to result + leax ARRAY,U Point to start of array + leax D,X Add offset to spot in array + lda #$02 a 2 in array signifies a dot + clrb a 0 in array signifies a space + cmpb TABCNT Done all dots on line yet ? + beq DNLOOP If so then do the down lines + +* This loop writes dots and spaces across +ACLOOP sta ,X+ Put a dot in array + lda #1 + cmpa DOTCNT If dotcnt=1 then + beq SKIP don't put spaces + stb ,X+ Put 1 space in array +SKIP lda #$02 + dec DOTCNT Decrement dot counter + bne ACLOOP Loop till zero + dec TABCNT Decrement table item counter + bra LOOP Loop till tabcnt=0 + +* This loop writes dots and spaces down +* When it puts a dot it also checks to see +* if where it puts the dot, it is an +* intersection. If so it adds 1 to number +* to flag that spot as an intersection. + +DNLOOP tst -1,X Look at spot to left + bmi TEST2 Branch if wall + adda #1 Intersection, add 1 to it + bra PUTIT Go put byte in array +TEST2 tst 1,X Look at spot to right + bmi PUTIT + adda #1 Intersection + +PUTIT sta ,X Put a dot in array + lda #1 + cmpa DOTCNT If dotcnt=1 then + beq SKIP2 don't put spaces + leax 69,X Add 69 to index reg. + stb ,X Store a space + leax 69,X Add 69 to index reg. + stb ,X Store a space + leax 69,X Add 69 to index reg. +SKIP2 lda #$02 + dec DOTCNT Decrement dot counter + bne DNLOOP Loop till zero + bra LOOP Go get another table item + +* This routine will put POWER PILLS (=4) in array +* Y reg. already points to power pill table +*PUTPOW leay POWDOT,pcr Point to power pill table + +PUTLOP ldd ,Y++ Get xvalue and yvalue + cmpd #$0000 End of table yet? + beq DONE + sta XVALUE Save for later + lda ,Y+ Get byte to put in array + sta BYTE Save it + lda #69 + mul Multiply (yvalue-1) by 69 + addb XVALUE Add xvalue to result + adca #$00 Add in any carry + leax ARRAY,U Point to start of array + leax D,X Add offset to spot in array + lda BYTE Get byte to put in array + sta ,X Put byte in array + bra PUTLOP Loop till done + +DONE nop +* ldd DTOTAL,pcr Get total # of dots +* std SCNTOT Give it to screen total + +* Fill tables with ghost data + +GHFILL leax GHSET,pcr Point to bytes to transfer + leay GHTABL,U Point to where bytes go + ldb #80 Transfer 80 bytes +FLLOOP lda ,X+ Get a byte + sta ,Y+ Store it + decb Decrement loop counter + bne FLLOOP Loop till done + +GHDATA: leax GHSET,pcr Point to bytes to transfer + leay G1OFST,U Point to where bytes go + ldb #80 Transfer 80 bytes +GHLOOP lda ,X+ Get a byte + sta ,Y+ Store it + decb Decrement counter + bne GHLOOP Loop till done + +RETURN rts + + + + ENDSECT +