%%HP: T(3)A(R)F(.); DIR SLIDE.A " GOSBVL =SAVPTR ST=0 15 INTOFF *V$ variables: *hnyb, vlin (5,5) (+0,+5) *currow (5) (+10) *posn (10x7) (+15) *imgdat (71) (+85) *hard (5) (+156) *stime (13) (+161) *TOTAL:174 nybbles in V$ LC(5) 174 GOSBVL =MAKE$N A=R0 GOSBVL =GPPushA *push V$ GOSBVL =SAVPTR *update RPL pointers GOSUBL ERAMENU GOSUBL TITLE *V$ initialization GOSUBL GETV$1 *D1 -> 1st var in V$ C=0 A DAT1=C A *hnyb D1=D1+ 5 DAT1=C A *vlin D1=D1+ 5 LC(1) 3 DAT1=C A *currow D1=D1+ 5 *place random data remainder of V$ *posn array: LC(2) 63 * #111111b B=C B D0=(5) (=CRC) LC(2) 14-1 *7x2x5 nybs in posn array ~i1 CD0EX A=DAT0 W CD0EX A=0 W A=DAT0 2 A=A&B B DAT1=A A D1=D1+ 5 C=C-1 B GONC ~i1 *imgdat array: LC(2) 71-1 *64+7 nybs ~i2 CD0EX A=DAT0 W CD0EX A=0 W A=DAT0 1 DAT1=A 1 D1=D1+ 1 C=C-1 B GONC ~i2 *hard GOSUBL FINK C=B A *get difficulty level DAT1=C A *misc. init's GOSUBL ERA56 GOSUBL ERAMENU C=0 A ST=C *zero ST flags 0-11 GOSUBL TABLE *draw goal table C=0 W LC(3) 4095 *.5 sec. GOSUBL DELAY ST=1 9 GOSUBL TABLE *draw play table GOSBVL =GetTimChk R3=C *save TICKS \|> R3 GOSUB GETV$1 AD1EX LC(3) 161 *stime A=A+C X AD1EX C=R3 DAT1=C 13 *actual game play poop LC(5) crsr_n *\|> cursor img. B=C A GOSUBL CURSOR C=0 W LC(3) 819 *.1 sec. GOSUBL DELAY GOSUBL WINK B=0 A * erase cursor img. GOSUBL CURSOR GOSUBL GETV$1 D1=D1+ 10 *D1 -> currow A=DAT1 A *A=currow ?ST=0 0 *\|^ not pressed? GOYES ~t2 ST=0 0 ?A=0 A GOYES ~t2 A=A-1 A DAT1=A A *currow-=1 ~t2 ?ST=0 2 *\|v not pressed? GOYES ~f1 ST=0 2 LC(5) 6 ?A=C A GOYES ~f1 A=A+1 A DAT1=A A *currow+=1 ~f1 D1=D1+ 5 *D1 -> posn arry A=A+A A *currowx2 B=A A A=A+A A *x4 A=A+A A *x8 B=B+A A *x10 B=B+CON A,5 *x10+5 CD1EX C=C+B A D1=C A=DAT1 A *this row's posn ?ST=0 1 *\-> not pressed? GOYES ~f3 ST=0 1 ?A=0 A GOYES ~f3 A=A-1 A DAT1=A A *posn-=1 ~f3 ?ST=0 3 *\<- not pressed? GOYES ~f5 ST=0 3 LC(5) 63 ?A=C A GOYES ~f5 A=A+1 A DAT1=A A *posn+=1 ~f5 ?ST=0 5 GOYES ~win? GOTO quit ~win? ST=1 9 GOSUBL TABLE *draw play table GOSUB WIN? ?ST=1 8 GOYES wquit GOTO poop wquit A=0 W GOSUB GETV$1 AD1EX LC(3) 156 *offset to hard A=A+C X AD1EX A=DAT1 A *get difficulty level R0=A *& save in R0 D1=D1+ 5 *D1 -> stime A=DAT1 13 *get start TICKS -> A.13 R3=A GOSBVL =GetTimChk *get TICKS -> C.13 A=R3 P= 12 C=C-A WP *calculate play time P= 0 R3=C *save in R3 GOSUBL REWARD *bells&whistles C=0 W LC(4) 8192*4 *4 sec. GOSUBL DELAY GOSBVL =GETPTR GOSBVL =PopSavptr GOSBVL =PUSH# GOSBVL =SAVPTR *push to RPL data stack INTON ST=1 15 A=R3 *retrieve play time P= 12 GOSBVL =PUSHhxsLoop *push to RPL data stack;exit to RPL quit C=0 W ST=C LC(4) 819*4 *.4 sec. GOSUBL DELAY INTON ST=1 15 GOSBVL =GETPTR GOVLNG =DropLoop *-------------------- *subroutines GETV$1 GOSBVL =D1=DSKTOP C=DAT1 A *C=addr of V$ D1=C D1=D1+ 10 *past prolog RTN *-------------------- *check goal vs. play table; *set ST8 if match WIN? GOSUB GETV$1 D1=D1+ 15 *D1 -> posn array B=0 A woop A=DAT1 A D1=D1+ 5 C=DAT1 A D1=D1+ 5 ?A#C A RTNYES B=B+1 A LC(2) 7 ?B<C A GOYES woop ST=1 8 RTN *-------------------- INCLUDE LCD.H INCLUDE TBL.H INCLUDE CURSOR.H INCLUDE DELAY.H INCLUDE WINK.H INCLUDE FINK.H INCLUDE REWARD.H INCLUDE TITL.H " TITL.H " *TITLE.H *-------------------- *display title screen *uses routine GETSAD *also uses A,C,D0,D1 TITLE GOSUB PastTS NIBHEX FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 NIBHEX FFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFF70 NIBHEX FFFFFFFFF1FFFFFFA7FFFFFFFFFFFFFF70 NIBHEX FFFFFFFBF4EFFFFFA3FFFBFFFFFFFFFF70 NIBHEX FFFFFFF57ECFFFFFA5F9B17D65FB93DF70 NIBHEX FFFFFBFE2F9FFFFFA7D55B7556D57D5F70 NIBHEX FFFFF57F9B3FFFFFA7F55B7547D13B5F70 NIBHEX FFFFEEAFC97EFFFFA7D55B7577DD575F70 NIBHEX FFF55FD7ECFCFFFFA7F5B7FE4FC3393F70 NIBHEX FFBABFE37EF9FFFFAFFFFFFFFFDFFF7F70 NIBHEX FF7DD7F93FF3FFFFAFFFFFFFFFEFFFBF70 NIBHEX FFBEEBFC9FF7EFFFAFFFFFFFFFFFFFFF70 NIBHEX FF57FD7E3FDFCFFFA9FFFFFFF7FFFDFF70 NIBHEX FFBBFE3F7ECF9FFFA7FFFFBBF7FFFDFF70 NIBHEX FFDD7F9FF4EF3FFFA7F95B11D766DCFF70 NIBHEX FFEEBFC1E9FF7EFFABD595BB57D56DFF70 NIBHEX FF5FD7E1C3F7ECFFABF5D1BB57D47DFF70 NIBHEX FFBFE3FC97E37EFFADD5DDBB57557DFF70 NIBHEX FFD7F93F3FC93FFFA1F9D37737D4FCFF70 NIBHEX FFEBFC7E7E9C9FFFAFFDFFFF7FFFFFFF70 NIBHEX F7FD7EFCFC3ECFFFAFFDFFFFBFFFFFFF70 NIBHEX FBFE37F9F977EFFFAFFFFFFFFFFFFFFF70 NIBHEX F77F93F3F3F3FFFFA9FFFFD7BFFFFF7F70 NIBHEX FFAFC9F7E3F9FFFFA7FFFFE7BFFFFF7F70 NIBHEX FFD7E4EFC3FCFFFFA7F9D545BDF45D6F70 NIBHEX FFE3FFCF937EFFFFABD75D65B577655F70 NIBHEX F7F9FF9F393FFFFFA7F35D65B577754F70 NIBHEX FBFCFF3F7E9FFFFFA7D55D65B577757F70 NIBHEX FD7EFF7EFECFFFFFA9F3BEEC63F4FCCE70 NIBHEX FE3FFFFCF7EFFFFFAFFFFFFFF7FFFFFF70 NIBHEX FD93FFF9F3FFFFFFAFFFFFFFFBFFFFFF70 NIBHEX FBC7EFFBC9FFFFFFAFFFFFFFFFFFFFFF70 NIBHEX F7EFCFF7ECFFFFFFA5FFFFFDFFFEFFFF70 NIBHEX F37F9FF37EFFFFFFA5FFDFFDFBFEFFFF70 NIBHEX F93F3FFB3FFFFFFFA5F37A9DEFCCA43370 NIBHEX FC9F7EFF9FFFFFFFA5DD555DABAAAAEA60 NIBHEX 7ECFFC7ECBFFFFFFA1FB555DABAAAA6A60 NIBHEX 3FCFF937EBFFFFFFA7D7555DABAAAAAA60 NIBHEX 7ECFF393FDFFFFFFA7F9559B9BAA9A6A60 NIBHEX FC9FFFC9F17BFFFFFFFFFFDFBFFFFFFF70 NIBHEX F930CFECFEADFFFFFFFFFFDFDFFFFFFF70 NIBHEX F3702F7EF6BDFFFFFFFFFFFFFFFFFFFF70 NIBHEX F7EF7E3F77DEFFFFFFFFFFFFFFFFFFFF70 NIBHEX FFCF7E9F7BDEFFFFFFFFFFFFFFFFFFFF70 NIBHEX FF9F7ECF7C3FFFFFFFFFFFFFFFFFFFFF70 NIBHEX FF3F37EFFF7FFFFFFFFFFFFFFFFFFFFF70 NIBHEX FF7E93FFFFBFFFFFFFFFFFFFFFFFFFFF70 NIBHEX FFFCD9FFFFFFFFFFFFFFFFFFFFFFFFFF70 NIBHEX FFF9FCFFFFFFFFFFFFFFFFFFFFFFFFFF70 NIBHEX FFF37EFFFF7ED8DF8336881E9113EC6360 NIBHEX FFF72FFFFFBDA6DF6DA5F6BFEBDA5B4D70 NIBHEX FFFF8FFFFFB7BADFADA6CABF2B5B6B2370 NIBHEX FFFFDFFFFFB786DF6DA5F6BF6BDA5B6F60 NIBHEX FFFFFFFFFF74B61E633686BF9113EC6170 NIBHEX FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 NIBHEX 0000000000000000000000000000000000 PastTS C=RSTK D1=C GOSUBL GETSAD LC(5) 119-1 *119x16 = 56x34 T_loop A=DAT1 16 DAT0=A 16 D0=D0+ 16 D1=D1+ 16 C=C-1 A GONC T_loop RTN " REWARD.H " *REWARD.H (subroutine) *-------------------- *flashy screen & sound f/x *uses A,B,C,D0,R4 & 3 RSTK levels minc EQU 3 maxc EQU #13 REWARD GOSBVL =getBPOFF D0=(5) #101 A=DAT0 B R4=A.F B *contrast -> R4 GOSUB pale1 GOSUB dark1 GOSUB pale1 GOSUB dark1 GOSUB pale1 GOSUB dark1 A=R4.F B DAT0=A B *restore contrast RTN pale1 LC(2) minc ?A<=C B RTNYES A=A-1 B DAT0=A B GOSUB ~eep GOTO pale1 dark1 LC(2) maxc ?A>=C B RTNYES A=A+1 B DAT0=A B GOSUB ~eep GOTO dark1 ~eep ?ST=1 4 GOYES ~noeep LC(2) 19 B=C B ~eeploop LC(3) #800 OUT=C C=A B C=C+CON B,16 C=C+CON B,3 ~ee1 C=C-1 B GONC ~ee1 C=0 A OUT=C C=A B C=C+CON B,16 C=C+CON B,3 ~ee2 C=C-1 B GONC ~ee2 B=B-1 B GONC ~eeploop RTN ~noeep LC(3) 20*30*2 *just delay, don't eep ~noeep1 C=C-1 X GONC ~noeep1 RTN " FINK.H " *FINK.H (subroutine) *-------------------- *FINK: first key input *returns value of key *pressed (0-4) in B.A *also uses A,C & 1 RSTK level FINK C=0 A B=0 A floop LCHEX 004 *4 row OUT=C GOSBVL =AINRTN LCHEX 0008 *4 col C=C&A A ?C=0 A GOYES ~fk4 B=B+CON A,4 RTN ~fk4 LCHEX 002 *123 row OUT=C GOSBVL =AINRTN LCHEX 0002 *3 col C=C&A A ?C=0 A GOYES ~fk3 B=B+CON A,3 RTN ~fk3 LCHEX 0004 *2 col C=C&A A ?C=0 A GOYES ~fk2 B=B+CON A,2 RTN ~fk2 LCHEX 0008 *1 col C=C&A A ?C=0 A GOYES ~fk1 B=B+1 A RTN ~fk1 LCHEX 001 *0 row OUT=C GOSBVL =AINRTN LCHEX 0008 *0 col C=C&A A ?C#0 A RTNYES GOTO floop " WINK.H " *WINK.H (subroutine) *-------------------- *WINK: wait for key input *& set an ST flag; *\|^ ST0, \-> ST1, \|v ST2, *\<- ST3, ENTER&BS ST5. *also uses A,C & 1 RSTK level WINK C=0 A kloop LCHEX 080 *\|^ row OUT=C GOSBVL =AINRTN LCHEX 0002 *\|^ col C=C&A A ?C=0 A GOYES ~k1 ST=1 0 RTN ~k1 LCHEX 040 *\<-\|v\-> row OUT=C GOSBVL =AINRTN LCHEX 0001 *\-> col C=C&A A ?C=0 A GOYES ~k2 ST=1 1 RTN ~k2 LCHEX 0002 *\|v col C=C&A A ?C=0 A GOYES ~k3 ST=1 2 RTN ~k3 LCHEX 0004 *\<- col C=C&A A ?C=0 A GOYES ~k5 ST=1 3 RTN ~k5 LCHEX 010 *ENTER,BS row OUT=C GOSBVL =AINRTN LCHEX 0011 *either C=C&A A ?C#0 A GOYES ~kq GOTO kloop ~kq ST=1 5 RTN " TBL.H " *TBL.H (subroutine) *-------------------- *TABLE: 49 images *uses routines GETV$1 and IMAGE *& lots of registers(R1) TABLE D=0 A *row counter ~y1 LC(5) 7-1 *col counter ~y2 R1=C *save col counter GOSUBL GETV$1 C=R1 C=C+C A *colx2 ?ST=0 9 GOYES ~o1 C=C+CON A,16 *+16 nybs for plr's table ~o1 C=C+1 A DAT1=C A *hnyb=colx2 D1=D1+ 5 C=D A *0<C<6 C=C+C A *Cx2 C=C+C A *x4 C=C+C A *x8 C=C-D A *x7 C=C+CON A,4 DAT1=C A *vlin=row D1=D1+ 10 *point to posn arry C=D A C=C+C A *rowx2 B=C A C=C+C A *x4 C=C+C A *x8 B=B+C A *x10 ?ST=0 9 GOYES ~o2 B=B+CON A,5 *x10+5 ~o2 CD1EX C=C+B A D1=C A=DAT1 A *this row's posn GOSUBL GETV$1 CD1EX B=C A LC(5) 85 B=B+C A *point to imgdat arry B=B+A A *add posn offset C=R1 C=C+B A *add col offset D1=C C=0 A C=DAT1 1 C=C+1 A A=C A *A=image# GOSUBL GETV$1 CD1EX B=C A LC(5) 156 C=C+B A *C=addr of hard D1=C C=DAT1 A *C=hard C=C+C A *x2 C=C+C A *x4 C=C+C A *x8 C=C+C A *x16 C=C+A A *x16+image# B=C A GOSUBL IMAGE C=R1 C=C-1 A GOC oC GOTO ~y2 oC D=D+1 A LC(2) 7 ?C<=D B GOYES oD GOTO ~y1 oD RTN " LCD.H " *LCD.H (subroutines) *-------------------- *get grob address into D0 *GETMAD: menu grob addr *GETSAD: screen addr *use A,D0, and new supported entries (equates) aVDISP EQU #1263A *=addrVDISP aVDISP2 EQU #1264A *=addrVDISP2 aADISP EQU #1265A *=addrADISP GETMAD D0=(5) (aVDISP2)+2 GOTO ~g GETSAD D0=(5) (aVDISP)+2 ~g A=DAT0 A *addr of addr of grob D0=A A=DAT0 A *addr of grob D0=A D0=D0+ 10 D0=D0+ 10 *past prolog RTN *-------------------- *erase portions of LCD *ERAMENU: menu grob *ERA56: stack & status areas *use A,C,D0 & 1 RSTK level ERAMENU GOSUB GETMAD LC(5) 17-1 *17x16 = 8x34 GOTO ~e ERA56 GOSUB GETSAD LC(5) 119-1 *119x16 = 56x34 ~e A=0 W A=-A-1 W ERAloop DAT0=A 16 D0=D0+ 16 C=C-1 A GONC ERAloop RTN *-------------------- *OFFSET: add addr offset *to base address in D0 *uses A,C,D0,D1 & 1 RSTK level OFFSET GOSBVL =D1=DSKTOP C=DAT1 A D1=C D1=D1+ 15 A=DAT1 A *A=row A=A+A A *A=rx2 C=A A A=A+A A *A=rx4 A=A+A A *A=rx8 A=A+A A *A=rx16 A=A+A A *A=rx32 A=A+C A *A=rx34 D1=D1- 5 C=DAT1 A A=A+C A *A=rx34+n CD0EX A=A+C A *add offset to D0 D0=A RTN *-------------------- *IMAGE: draw 2nyb x 7row image *at coordinates in V$; *draws image# in B.A *uses A,B,C,D0,D1 & 2 RSTK levels IMAGE GOSUB GETSAD *D0\->screen RAM GOSUB OFFSET *plus offset GOSUB PastData *img 0 NIBHEX FFFFFFFFFFFFFF *imgs 1-4 NIBHEX FFFE7EFEFE7CFF NIBHEX FF7CBBFDFE38FF NIBHEX FF38FDFCBB7CFF NIBHEX FFFA7B38FBFBFF *imgs 5-8 NIBHEX FF38BF3CFBFCFF NIBHEX FFFDFE7CBB7CFF NIBHEX FF38FBFDFEFEFF NIBHEX FF7CBB7CBB7CFF *imgs 9-12 NIBHEX FF7CBB78FBFBFF NIBHEX FF7CBB38BBBBFF NIBHEX FF3CBB3CBB3CFF NIBHEX FF7CBBBFBF7CFF *imgs 13-16 NIBHEX FF3EBDBBBB3CFF NIBHEX FF38BF3CBF38FF NIBHEX FF38BF3CBFBFFF NIBHEX FF7CBBBBBB7CFF *imgs 17-20 NIBHEX 00000000000000 NIBHEX 000000000000FF NIBHEX 0000000000FFFF NIBHEX 00000000FFFFFF *imgs 21-24 NIBHEX 000000FFFFFFFF NIBHEX 0000FFFFFFFFFF NIBHEX 00FFFFFFFFFFFF NIBHEX FFFFFFFFFFFFFF *imgs 25-28 NIBHEX 00FFFFFFFFFF00 NIBHEX FFFFFFFFFFFF00 NIBHEX FFFFFFFFFF0000 NIBHEX FFFFFFFF000000 *imgs 29-32 NIBHEX FFFFFF00000000 NIBHEX FFFF0000000000 NIBHEX FF000000000000 NIBHEX FF0000000000FF *imgs 33-36 NIBHEX 0F0F0F0F0F0F0F NIBHEX F0F0F0F0F0F0F0 NIBHEX FFFFFFFF000000 NIBHEX 000000FFFFFFFF *imgs 37-40 NIBHEX 0000000F0F0F0F NIBHEX 000000F0F0F0F0 NIBHEX 0F0F0F0F000000 NIBHEX F0F0F0F0000000 *imgs 41-44 NIBHEX FFFFFFFFF0F0F0 NIBHEX FFFFFFFF0F0F0F NIBHEX F0F0F0FFFFFFFF NIBHEX 0F0F0FFFFFFFFF *imgs 45-48 NIBHEX FFFFFFFFFFFFFF NIBHEX 00000000000000 NIBHEX 0F0F0FFFF0F0F0 NIBHEX F0F0F0FF0F0F0F *imgs 49-52 NIBHEX 00000000000000 NIBHEX 000000FF000000 NIBHEX 81818181818181 NIBHEX 818181FF818181 *imgs 53-56 NIBHEX 818181FF000000 NIBHEX 8181818F818181 NIBHEX 000000FF818181 NIBHEX 818181F1818181 *imgs 57-60 NIBHEX 818181F1000000 NIBHEX 8181818F000000 NIBHEX 000000F1818181 NIBHEX 0000008F818181 *imgs 61-64 NIBHEX 818181FF818181 NIBHEX 818181FF818181 NIBHEX 818181FF818181 NIBHEX 818181FF818181 *imgs 65-68 NIBHEX 8FCFEFFFF7F3F1 NIBHEX F1F3F7FFEFCF8F NIBHEX 8FCFEFFFF7F3F1 NIBHEX F1F3F7FFEFCF8F *imgs 69-72 NIBHEX 8FCFEFFFFFFFFF NIBHEX F1F3F7FFFFFFFF NIBHEX FFFFFFFFF7F3F1 NIBHEX FFFFFFFFEFCF8F *imgs 73-76 NIBHEX 8FCFEFFFF7F3F1 NIBHEX F1F3F7FFEFCF8F NIBHEX 8FCFEFFFF7F3F1 NIBHEX F1F3F7FFEFCF8F *imgs 77-80 NIBHEX 8FCFEFFFFFFFFF NIBHEX F1F3F7FFFFFFFF NIBHEX FFFFFFFFEFCF8F NIBHEX FFFFFFFFF7F3F1 crsr_n EQU 81 NIBHEX FFFEFCF8FCFEFF PastData C=RSTK * add img#x14 to C B=B+B A C=C+B A B=B+B A C=C+B A B=B+B A C=C+B A D1=C *D1->img data LC(2) 7-1 *7 rows in img IMGCopy A=DAT1 2 DAT0=A 2 *copy 1 row (2 nybs) of img data D0=D0+ 16 D0=D0+ 16 D0=D0+ 2 *next scrn row D1=D1+ 2 *next data row C=C-1 B GONC IMGCopy RTN *-------------------- " CURSOR.H " *CURSOR.H *-------------------- *draw image in B.A in cursor column *uses routines GETV$1 and IMAGE *& lots of registers CURSOR GOSUBL GETV$1 LC(5) 15 DAT1=C A *hnyb=15;between tables D1=D1+ 10 C=DAT1 A *C=currow D1=D1- 5 D=C A C=C+C A *x2 C=C+C A *x4 C=C+C A *x8 C=C-D A *x7 C=C+CON A,4 *x7+4 DAT1=C A *vlin=C GOSUBL IMAGE RTN *-------------------- " DELAY.H " *DELAY.H (subroutine) *-------------------- *by Doug Cannon *DELAY C.W ticks *uses A,B,C,D,P,D1,R1,R2,& 4 RSTK levels DELAY R1=C *R1=ticks to wait GOSBVL =GetTimChk R2=C *R2=start tick ~delay GOSBVL =GetTimChk *C=current tick A=R2 P= 12 *only use 13 nybs C=C-A WP *C=current-start tick A=R1 *A=ticks to wait ?A>=C WP GOYES ~delay P= 0 RTN " END