changeset 1864:f351932fa6cd

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