home *** CD-ROM | disk | FTP | other *** search
- .NOLIST
- #define equ .equ
- #define EQU .equ
- #define end .end
- #include "ti83asm.inc"
- #include "tokens.inc"
- .LIST
- #DEFINE BOXX 8265h
- #DEFINE BOXY 8266h
-
- .org 9327h
-
- nop ;these 2 lines identify the program
- jr prog_start ;as AShell-compatable
- .dw $0000 ;Version of table
- .dw name ;Points to the program description
- .dw $0000
-
- BEGIN:
- call _clrLCDFull ;Clear Screen
- call _runIndicOff ;Stops run indicator
- call _grbufclr ;Clears Graph Buffer
- call _homeup ;Goes to 0,0
- ld a,40 ;Initial X & Y coords
- ld (BOXX),a ;of box
- ld a,55
- ld (BOXY),a
- jp moveloop
-
- moveloop:
- call putbox ;Call put box
- jp getky
-
- getky: ;routine getkey
- ld a,0ffh
- out (1),a
- ld a,0feh
- out (1),a
- in a,(1)
- cp 253 ;Is key Left?
- jp z,left ;Goto Left
- cp 251 ;Is the key right?
- jp z,right ;Goto Right
- cp 254 ;Is key Up?
- jp z,up ;Goto up
- cp 247 ;Is the key down?
- jp z,down ;Goto Down
- ld a,0ffh
- out (1),a
- ld a,0fdh
- out (1),a
- in a,(1)
- cp 191 ;Is the key clear?
- jp z,quit ;If so, goto quit
- jp getky ;No key ? Go back to getkey!
-
- left:
- call putbox
- ld a,(BOXX) ;Load XCoord Variable into A
- dec a ;Decrease A
- cp 0
- jp z,BOOM
- ld (BOXX),a ;Load back into BOXX
- jp moveloop ;goto moveloop
-
- right:
- call putbox
- ld a,(BOXX) ;Load XCoord Variable into A
- inc a ;Increase A
- cp 86
- jp z,BOOM
- ld (BOXX),a ;Load back into BOXX
- jp moveloop ;goto moveloop
-
- down:
- call putbox
- ld a,(BOXY) ;Load YCoord Variable into A
- dec a ;Decrease A
- cp 0
- jp z,BOOM
- ld (BOXY),a ;Load back into BOXY
- jp moveloop ;goto moveloop
-
- up:
- call putbox
- ld a,(BOXY) ;Load YCoord Variable into A
- inc a ;Increase A
- cp 95
- jp z,BOOM
- ld (BOXY),a ;Load back into BOXY
- jp moveloop ;goto moveloop
-
- putbox:
- ld a,(BOXY)
- ld e,a ;Stores 55 -> e , where e = y
- ld a,(BOXX) ;Stores 40 -> x , where x = x
- ld bc,box ;Load sprite name to bc
- call SPRXOR ;Call movax' Sprite Routine
- call _grbufcpy_v
- ret
-
- BOOM:
- ld a,(BOXY)
- ld e,a ;Stores 55 -> e , where e = y
- ld a,(BOXX) ;Stores 40 -> x , where x = x
- ld bc,boompic ;Load sprite name to bc
- call SPRXOR ;Call movax' Sprite Routine
- call _grbufcpy_v
- jp DONE
-
-
-
- quit:
- call _clrLCDFull
- call _grbufclr
- call _dispDone
- ret
-
- SPRXOR:
-
- push bc ; Save sprite address
-
- ;████ Calculate the address in graphbuf ████
-
- ld hl,0 ; Do y*12
- ld d,0
- add hl,de
- add hl,de
- add hl,de
- add hl,hl
- add hl,hl
-
- ld d,0 ; Do x/8
- ld e,a
- srl e
- srl e
- srl e
- add hl,de
-
- ld de,8e29h
- add hl,de ; Add address to graphbuf
-
- ld b,00000111b ; Get the remainder of x/8
- and b
- cp 0 ; Is this sprite aligned to 8*n,y?
- jp z,ALIGN
-
-
- ;████ Non aligned sprite blit starts here ████
-
- pop ix ; ix->sprite
- ld d,a ; d=how many bits to shift each line
-
- ld e,8 ; Line loop
- LILOP: ld b,(ix+0) ; Get sprite data
-
- ld c,0 ; Shift loop
- push de
- SHLOP: srl b
- rr c
- dec d
- jp nz,SHLOP
- pop de
-
- ld a,b ; Write line to graphbuf
- xor (hl)
- ld (hl),a
- inc hl
- ld a,c
- xor (hl)
- ld (hl),a
-
- ld bc,11 ; Calculate next line address
- add hl,bc
- inc ix ; Inc spritepointer
-
- dec e
- jp nz,LILOP ; Next line
-
- jp DONE1
-
-
- ;████ Aligned sprite blit starts here ████
-
- ALIGN: ; Blit an aligned sprite to graphbuf
- pop de ; de->sprite
- ld b,8
- ALOP1: ld a,(de)
- xor (hl)
- ld (hl),a
- inc de
- push bc
- ld bc,12
- add hl,bc
- pop bc
- djnz ALOP1
-
- DONE1:
- ret
-
- DONE:
- ld a,0ffh
- out (1),a
- ld a,0fdh
- out (1),a
- in a,(1)
- cp 191 ;Is the key clear?
- jp z,quit ;If so, goto quit
- jp DONE ;No key ? Go back to getkey!
-
-
- box:
- .db 11111111b
- .db 10000001b
- .db 10100101b
- .db 10000001b
- .db 10011001b
- .db 11000011b
- .db 10111101b
- .db 11111111b
-
- boompic:
- .db 10101010b
- .db 01010101b
- .db 10101010b
- .db 01010101b
- .db 10101010b
- .db 01010101b
- .db 10101010b
- .db 01010101b
-
- name: .db "Mr.Happy =)",$00
-
- .end
- END
-