Mercurial > hg > Members > kono > nitros9-code
changeset 2945:582b5b7232c0
pacos9: Rename assembler files to .as and port makefile to lwtools
And build pacos9 by default again.
Nowadays .a files are library archive files.
According to rules.mak, as. files are to be built as object files
for later linking with lwlink, similar to old RMA/RLINK.
author | Tormod Volden <debian.tormod@gmail.com> |
---|---|
date | Sat, 08 Feb 2014 01:03:26 +0100 |
parents | ab3f9eb5fc5c |
children | 06508da42c98 |
files | 3rdparty/packages/pacos9/board90.a 3rdparty/packages/pacos9/board90.as 3rdparty/packages/pacos9/caged90.a 3rdparty/packages/pacos9/caged90.as 3rdparty/packages/pacos9/check90.a 3rdparty/packages/pacos9/check90.as 3rdparty/packages/pacos9/ghosts90.a 3rdparty/packages/pacos9/ghosts90.as 3rdparty/packages/pacos9/main90.a 3rdparty/packages/pacos9/main90.as 3rdparty/packages/pacos9/makefile 3rdparty/packages/pacos9/movpac90.a 3rdparty/packages/pacos9/movpac90.as 3rdparty/packages/pacos9/score90.a 3rdparty/packages/pacos9/score90.as 3rdparty/packages/pacos9/scrns90.a 3rdparty/packages/pacos9/scrns90.as 3rdparty/packages/pacos9/setup90.a 3rdparty/packages/pacos9/setup90.as |
diffstat | 19 files changed, 5852 insertions(+), 5854 deletions(-) [+] |
line wrap: on
line diff
--- a/3rdparty/packages/pacos9/board90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1248 +0,0 @@ - - - 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/board90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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
--- a/3rdparty/packages/pacos9/caged90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,366 +0,0 @@ - - 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/caged90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 + +
--- a/3rdparty/packages/pacos9/check90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,297 +0,0 @@ - - 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/check90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 + +
--- a/3rdparty/packages/pacos9/ghosts90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,524 +0,0 @@ - - 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/ghosts90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 + +
--- a/3rdparty/packages/pacos9/main90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1126 +0,0 @@ - - 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/main90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 + + +
--- a/3rdparty/packages/pacos9/makefile Mon Jan 27 23:49:14 2014 +0100 +++ b/3rdparty/packages/pacos9/makefile Sat Feb 08 01:03:26 2014 +0100 @@ -1,14 +1,12 @@ include $(NITROS9DIR)/rules.mak -RFILES = main90.r board90.r caged90.r check90.r ghosts90.r movpac90.r \ - score90.r scrns90.r setup90.r +OBJS = main90.o board90.o caged90.o check90.o ghosts90.o movpac90.o \ + score90.o scrns90.o setup90.o -all: - -pacos9: $(RFILES) - rlink $(RFILES) -o=pacos9 -l=$(NITROS9DIR)/lib/sys6809l2.l +pacos9: $(OBJS) + $(LINKER) $^ -opacos9 -L$(NITROS9DIR)/lib -lnos96809l2 clean: - $(RM) $(RFILES) pacos9 + $(RM) $(OBJS) pacos9 info:
--- a/3rdparty/packages/pacos9/movpac90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,450 +0,0 @@ - - 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/movpac90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 + + +
--- a/3rdparty/packages/pacos9/score90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,499 +0,0 @@ - - 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/score90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 + +
--- a/3rdparty/packages/pacos9/scrns90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,490 +0,0 @@ - - - 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/scrns90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 + + +
--- a/3rdparty/packages/pacos9/setup90.a Mon Jan 27 23:49:14 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,847 +0,0 @@ - - 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 -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/packages/pacos9/setup90.as Sat Feb 08 01:03:26 2014 +0100 @@ -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 +