;#SECTION "MAIN", CODE sub_Axiom2 equ 3F61h sub_Axiom4 equ 3F63h sub_Axiom6 equ 3F65h dw 0C0DEh dw __DrawOrCallerEnd db 00111111b db 0EAh, 0 db 0 ; Inline db 4 ; 4 args rorg 0 DrawOrCaller: pop ix call sub_Axiom2 __DrawOrCallerEnd: dw __DrawOrEnd db 00111111b dw 00h ; No token db 1 ; Subroutine db 0 rorg 0 DrawOr: ; Input ix = Sprite pop af ; Input hl = Buffer pop de ; Input e = Sprite Y Position pop bc ; Input c = Sprite X Position push af ld b, 7 ld a, 127 sub e jr nc, __DrawOrNoClipTop ld a, e add a, b ret nc __DrawOrClipTop: ; xor b ; ld e,a ; add ix,de ; ld e,d ; xor b inc ix inc e jr nz, __DrawOrClipTop __DrawOrNoClipTop: cp b jr nc, __DrawOrNoClipBot ld b, a __DrawOrNoClipBot: inc b ld a, c add a, 7 cp 192 + 7 ret nc ld d, 0 ex de, hl add hl, hl add hl, hl add hl, hl ex de, hl add hl, de rra add hl, de rra add hl, de rra ld d, 0 ld e, a add hl, de ld a, c and 7 jr z, __DrawOrAligned ld c, a xor a sub e sbc a, a ld d, a ld a, e cp 24 sbc a, a ld e, a __DrawOrLoop: push bc ld b, c ld c, (ix + 0) xor a __DrawOrShift: srl c rra djnz __DrawOrShift and e or (hl) ld (hl), a dec hl ld a, c and d or (hl) ld (hl), a ld c, 25 add hl, bc inc ix pop bc djnz __DrawOrLoop ret __DrawOrAligned: ld e, 24 __DrawOrAlignedLoop: ld a, (ix + 0) or (hl) ld (hl), a inc ix add hl, de djnz __DrawOrAlignedLoop ret __DrawOrEnd: dw __DrawAndCallerEnd db 00111111b db 0E9h, 0 db 0 ; Inline db 4 ; 4 args rorg 0 DrawAndCaller: pop ix call sub_Axiom4 __DrawAndCallerEnd: dw __DrawAndEnd db 00111111b dw 00h ; No token db 1 ; Subroutine db 0 rorg 0 DrawAnd: ; Input ix = Sprite pop af ; Input hl = Buffer pop de ; Input e = Sprite Y Position pop bc ; Input c = Sprite X Position push af ld b, 7 ld a, 127 sub e jr nc, __DrawAndNoClipTop ld a, e add a, b ret nc __DrawAndClipTop: ; xor b ; ld e,a ; add ix,de ; ld e,d ; xor b inc ix inc e jr nz, __DrawAndClipTop __DrawAndNoClipTop: cp b jr nc, __DrawAndNoClipBot ld b, a __DrawAndNoClipBot: inc b ld a, c add a, 7 cp 192 + 7 ret nc ld d, 0 ex de, hl add hl, hl add hl, hl add hl, hl ex de, hl add hl, de rra add hl, de rra add hl, de rra ld d, 0 ld e, a add hl, de ld a, c and 7 jr z, __DrawAndAligned ld c, a xor a sub e ccf sbc a, a ld d, a ld a, e add a, -24 sbc a, a ld e, a __DrawAndLoop: push bc ld b, c ld c, (ix + 0) scf sbc a, a __DrawAndShift: rr c rra djnz __DrawAndShift or e and (hl) ld (hl), a dec hl ld a, c or d and (hl) ld (hl), a ld c, 25 add hl, bc inc ix pop bc djnz __DrawAndLoop ret __DrawAndAligned: ld e, 24 __DrawAndAlignedLoop: ld a, (ix + 0) and (hl) ld (hl), a inc ix add hl, de djnz __DrawAndAlignedLoop ret __DrawAndEnd: dw __GetSpriteEnd db %00111111 db 5, 0 db 1 db 3 rorg 0 GetSprite: ld ix,axv_SpriteBuff ;Gets sprite at (c,l) on buffer DE into 8 bytes at IX GetSpriteEntry: pop af pop de ex de, hl pop bc push af push ix ld a,l add a,a add a,l ld l,a add hl,hl add hl,hl add hl,hl add hl,de ld a,c sra c sra c sra c add hl,bc and %00000111 ld b,8 jr nz,___GetSpriteUnaligned ld de,24 ___GetSpriteAligned: ld a,(hl) ld (ix),a add hl,de inc ix djnz ___GetSpriteAligned pop hl ret ___GetSpriteUnaligned: ld d,(hl) inc hl ld e,(hl) ex de,hl ld c,a ___GetSpriteShift: add hl,hl dec c jr nz,___GetSpriteShift ld (ix),h ld hl,23 add hl,de inc ix djnz ___GetSpriteUnaligned pop hl ret __GetSpriteEnd: dw 0 dw 01D2h db 8 db "Pt-And4(" dw 01D4h db 7 db "Pt-On4(" dw 000Ah db 8 db "Pt-Get4("