Code: ;SNAKE light edition by Alone Coder 19iii2007 ;h - left ;k - right ;l - down ;p - up ;mem-0 is used in mod ;mem-0..2 are used in sin MACRO INCREMENT DB #A1 ;stk-one DB #0F ;addition ENDM
;POKE=7808=#1E80 (gets A from stack, gets BC with keeping) MACRO POKE1ST DB #34 ;stk-data DB %00111101 ;1 b, EXP=#8D DB #74 DB #CB ;st-mem-11 ;const POKE DB #2D ;usr-no ENDM
MACRO POKE DB #EB ;get-mem-11 ;const POKE DB #2D ;usr-no ENDM
MACRO SCRADDR1ST DB #34 ;stk-data ;=32 DB %00110110 ;1 b, EXP=#86 DB #00 DB #C8 ;st-mem-8 ;const 32 DB #04 ;multiply Y*32 DB #0F ;addition DB #34 ;stk-data ;=#5800 DB %00111111 ;1 b, EXP=#8F DB #30 DB #CC ;st-mem-12 ;const #5800 DB #0F ;addition ENDM
MACRO SCRADDR DB #E8 ;get-mem-8 ;const 32 DB #04 ;multiply Y*32 DB #0F ;addition DB #EC ;get-mem-12 ;const #5800 DB #0F ;addition ENDM
ORG #6000 ;attr=0 may be done in BASIC, and these 8 bytes may be killed XOR A LD H,#5B clm0 DEC HL LD (HL),A CP (HL) JZ clm0 RST #28 DB #34 ;stk-data ;=24 DB %00110101 ;1 b, EXP=#85 DB #40 DB #C9 ;st-mem-9 ;const 24 ;ATRRABB DB #C4 ;st-mem-4 ;RABBIT =1 DB #A0 ;stk-zero DB #C5 ;st-mem-5 ;TAIL =0 DB #C6 ;st-mem-6 ;XPOS =0 DB #C3 ;st-mem-3 ;YPOS =0 loop ;stack:HEAD DB #34 ;stk-data ;BUF=#7A00=BUFLEN*4 DB %00111111 ;1 b, EXP=#8F DB #74 DB #CA ;st-mem-10 ;const BUF DB #0F ;addition HEAD+BUF DB #E6 ;get-mem-6 ;XPOS POKE1ST INCREMENT DB #E3 ;get-mem-3 ;YPOS POKE INCREMENT DB #EB ;get-mem-11 ;const BUFLEN DB #32 ;n-mod-m DB #02 ;delete ;BUF/BUFLEN = 4/5 ;stack:HEAD
DB #E5 ;get-mem-5 ;TAIL DB #E4 ;get-mem-4 ;RABBIT DB #30 ;not (1 if RABBIT=0) DB #31 ;duplicate DB #0F ;addition (2 if RABBIT=0) DB #0F ;addition TAIL+0/2 DB #EB ;get-mem-11 ;const BUFLEN DB #32 ;n-mod-m DB #02 ;delete ;TAIL/BUFLEN = 4/5 DB #C5 ;st-mem-5 ;TAIL ;stack:HEAD,TAIL
DB #EA ;get-mem-10 ;const BUF DB #0F ;addition TAIL+BUF DB #31 ;duplicate ;for peek YPOS DB #2B ;peek ;XTAIL DB #01 ;exchange ;XPOS,addr INCREMENT DB #2B ;peek ;YTAIL SCRADDR1ST DB #E4 ;get-mem-4 ;RABBIT POKE DB #02 ;delete ;RABBIT SCRADDR ;stack:HEAD
DB #34 ;stk-data ;=#5C08 DB %01111111 ;2 b, EXP=#8F DB #38,#10 DB #2B ;peek DB #C7 ;st-mem-7 ;KEY DB #20 ;cos DB #E8 ;get-mem-8 ;const 32 DB #A2 ;stk-half DB #0F ;addition DB #0F ;addition DB #27 ;int DB #E6 ;get-mem-6 ;XPOS DB #0F ;addition DB #E8 ;get-mem-8 ;const 32 DB #32 ;n-mod-m DB #02 ;delete ;XPOS/32 = 0/1/2 DB #C6 ;st-mem-6 ;XPOS ;stack:HEAD,XPOS
DB #E7 ;get-mem-7 ;KEY DB #1F ;sin DB #E9 ;get-mem-9 ;const 24 DB #A2 ;stk-half DB #0F ;addition DB #0F ;addition DB #27 ;int DB #E3 ;get-mem-3 ;YPOS DB #0F ;addition DB #E9 ;get-mem-9 ;const 24 DB #32 ;n-mod-m DB #02 ;delete ;YPOS/24 = 0/1/2 DB #C3 ;st-mem-3 ;YPOS SCRADDR ;stack:HEAD,SCRADDR dieloop DB #31 ;duplicate ;for POKE ATRSN DB #2B ;peek DB #C4 ;st-mem-4 ;RABBIT <>0 (if ATRRABB) DB #E8 ;get-mem-8 ;const 32 ;ATRSN DB #0E ;nos-eql ;TRUE if = DB #00 ;jump-true DB dieloop-$ DB #E8 ;get-mem-8 ;const 32 ;ATRSN POKE DB #02 ;delete ;HEAD SCRADDR ;stack:HEAD DB #33 ;jump DB loop-$
|