#include "crash82.inc" .db "Mr. Happy :)",0 BOXX = TEXT_MEM BOXY = TEXT_MEM+1 BEGIN: ROM_CALL(CLEARLCD) call CR_GRBCopy ;Clears Graph Buffer 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 CR_GRBCopy 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 CR_GRBCopy jp DONE quit: ROM_CALL(CLEARLCD) call _grbufclr ret _grbufclr: ld hl,$88B8 ld de,$88B9 ld bc,768 ld (hl),0 ldir 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,$88B8 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