; Program Written in HAL85 #include ti-85.h #define TI85-ZSHELL MAX_X = 127 MAX_Y = 63 MAX_COL = 20 MAX_ROW = 7 .org 0 .db "Sprite Demo/Test",0 SET 0,(IY+03) ; CODE ; line 1 : page 4 LD A,4 OUT (5),A ; line 2 : clrgraph_on SET 0,(IY+03) ; line 3 : byte k var_k = GRAPH_MEM + 0 ; line 4 : byte x var_x = GRAPH_MEM + 1 ; line 5 : byte y var_y = GRAPH_MEM + 2 ; line 6 : k = 0 LD A,0 LD (var_k),A ; line 7 : x = 0 LD A,0 LD (var_x),A ; line 8 : y = 0 LD A,0 LD (var_y),A Main: ; line 10 : cls ROM_CALL(CLEARLCD) ; line 11 : sprite x y Spritetst LD A,(var_x) LD B,A LD A,(var_y) LD C,A LD HL,Spritetst LD DE,(PROGRAM_ADDR) ADD HL,DE CALL_(sys_PUTSPRITE) KeyLoop: ; line 13 : k = (readkey) CALL GET_KEY LD L,A ld A,L LD (var_k),A ; line 14 : if (k == K_EXIT) LD A,(var_k) LD D,A LD A,K_EXIT CALL_(sys_test_equalb) ld A,L CP 0 JUMP_Z(if_not_true_1) ; line 15 : waitkey sys_loop0: HALT CALL GET_KEY OR A jr z,sys_loop0 RET ; line 17 : endif if_not_true_1: ; line 18 : if ((k == K_LEFT) and (x > 0)) LD A,(var_x) LD D,A LD A,0 CALL_(sys_test_greatb) PUSH HL LD A,(var_k) LD D,A LD A,K_LEFT CALL_(sys_test_equalb) ld A,L LD D,A POP HL ld A,L AND D LD L,A ld A,L CP 0 JUMP_Z(if_not_true_2) ; line 19 : x = (x - 1) LD A,(var_x) LD E,A LD A,1 LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_x),A ; line 20 : goto Main JUMP_(Main) ; line 21 : endif if_not_true_2: ; line 22 : if ((k == K_RIGHT) and (x < 120)) LD A,(var_x) LD D,A LD A,120 CALL_(sys_test_lessb) PUSH HL LD A,(var_k) LD D,A LD A,K_RIGHT CALL_(sys_test_equalb) ld A,L LD D,A POP HL ld A,L AND D LD L,A ld A,L CP 0 JUMP_Z(if_not_true_3) ; line 23 : x = (x + 1) LD A,(var_x) LD D,A LD A,1 ADD A,D LD L,A ld A,L LD (var_x),A ; line 24 : goto Main JUMP_(Main) ; line 25 : endif if_not_true_3: ; line 26 : if ((k == K_UP) and (y > 0)) LD A,(var_y) LD D,A LD A,0 CALL_(sys_test_greatb) PUSH HL LD A,(var_k) LD D,A LD A,K_UP CALL_(sys_test_equalb) ld A,L LD D,A POP HL ld A,L AND D LD L,A ld A,L CP 0 JUMP_Z(if_not_true_4) ; line 27 : y = (y - 1) LD A,(var_y) LD E,A LD A,1 LD D,A LD A,E OR A SBC A,D LD H,0 LD L,A ld A,L LD (var_y),A ; line 28 : goto Main JUMP_(Main) ; line 29 : endif if_not_true_4: ; line 30 : if ((k == K_DOWN) and (y < 55)) LD A,(var_y) LD D,A LD A,55 CALL_(sys_test_lessb) PUSH HL LD A,(var_k) LD D,A LD A,K_DOWN CALL_(sys_test_equalb) ld A,L LD D,A POP HL ld A,L AND D LD L,A ld A,L CP 0 JUMP_Z(if_not_true_5) ; line 31 : y = (y + 1) LD A,(var_y) LD D,A LD A,1 ADD A,D LD L,A ld A,L LD (var_y),A ; line 32 : goto Main JUMP_(Main) ; line 33 : endif if_not_true_5: ; line 34 : goto KeyLoop JUMP_(KeyLoop) Spritetst: .db 7,8 .db %1010101 .db %0101010 .db %1010101 .db %0101010 .db %1010101 .db %0101010 .db %1010101 .db %0101010 ; DATA sys_PUTSPRITE: Ld de,VIDEO_MEM Ld a,63 Sub c Ld c,a Push hl Push hl ROM_CALL(FIND_PIXEL) Add hl,de Ex de,hl Pop hl Ld b,(hl) Inc hl Ld c,(hl) Inc hl Push hl Pop ix Ex de,hl sys_PS_NewRow: Push bc Ld d,(ix) Inc ix Push af Push hl sys_PS_NewCol: Rl d Ld e,a Jr nc,sys_PS_NoPixel Or (hl) Ld (hl),a Jr sys_PS_NextPixel sys_PS_NoPixel: Cpl And (hl) Ld (hl),a sys_PS_NextPixel: Ld a,e Rrca Jr nc,sys_PS_SameByte Inc hl sys_PS_SameByte: Djnz sys_PS_NewCol Pop hl Pop af Ld de,16 Add hl,de Pop bc Dec c Jr nz,sys_PS_NewRow Pop hl Ret sys_test_equalb: CP D JR NZ,equalb_no LD L,1 JR equalb_end equalb_no: LD L,0 equalb_end: RET sys_test_greatb: CP D JR C,sys_greatb_no LD L,0 JR sys_greatb_end sys_greatb_no LD L,1 sys_greatb_end RET sys_test_lessb: CP D JR C,sys_lessb_no LD L,1 JR sys_lessb_end sys_lessb_no: LD L,0 sys_lessb_end: RET .end