mirror of
https://github.com/a2-4am/4cade.git
synced 2024-09-30 00:56:24 +00:00
128 lines
2.8 KiB
Plaintext
128 lines
2.8 KiB
Plaintext
;license:MIT
|
|
;(c) 2018-9 by 4am
|
|
;
|
|
!source "src/fx/macros.a"
|
|
|
|
HGRCalc
|
|
; in: A = HGR row (0x00..0xBF)
|
|
; out: A/X clobbered
|
|
; Y preserved
|
|
; ($26) points to first byte of given HGR row on hi-res page 1
|
|
; ($3C) points to same byte on hi-res page 2
|
|
; based on 'Woz Recodes Hi-Res Address Calculations'
|
|
; Apple Assembly Line vol. 7 issue 3 (December 1986)
|
|
; http://www.txbobsc.com/aal/1986/aal8612.html#a9
|
|
+HGR_CALC
|
|
rts
|
|
|
|
HGRBlockCopy
|
|
; in: A = HGR row / 8 (0x00..0x17)
|
|
; Y = HGR column (0x00..0x27)
|
|
; out: Y preserved
|
|
; X = #$00
|
|
; Z set
|
|
; C clear
|
|
; all other flags and registers clobbered
|
|
+HGR_ROW_CALC
|
|
HGRBlockCopyNoRecalc
|
|
clc
|
|
ldx #$08
|
|
@loop
|
|
lda ($3c),y
|
|
sta ($26),y
|
|
+HGR_INC_WITHIN_BLOCK
|
|
dex
|
|
bne @loop
|
|
rts
|
|
|
|
HGRBlockToWhite
|
|
; in: A = HGR row / 8 (0x00..0x17)
|
|
; Y = HGR column (0x00..0x27)
|
|
; out: Y preserved
|
|
; X = #$00
|
|
; Z set
|
|
; C clear
|
|
; all other flags and registers clobbered
|
|
+HGR_ROW_CALC
|
|
clc
|
|
ldx #$08
|
|
@loop
|
|
lda #$7F
|
|
sta ($26),y
|
|
+HGR_INC_WITHIN_BLOCK
|
|
dex
|
|
bne @loop
|
|
rts
|
|
|
|
HGRHalfBlockCopy
|
|
; in: A = HGR row / 4 (0x00..0x2F)
|
|
; Y = HGR column (0x00..0x27)
|
|
; out: Y preserved
|
|
; X = #$00
|
|
; Z set
|
|
; C clear
|
|
; all other flags and registers clobbered
|
|
asl
|
|
asl
|
|
+HGR_CALC
|
|
HGRStaggerCopy
|
|
clc
|
|
ldx #$04
|
|
@loop
|
|
lda ($3c),y
|
|
sta ($26),y
|
|
+HGR_INC_WITHIN_BLOCK
|
|
dex
|
|
bne @loop
|
|
rts
|
|
|
|
HGRHalfBlockToWhite
|
|
; in: A = HGR row / 4 (0x00..0x2F)
|
|
; Y = HGR column (0x00..0x27)
|
|
; out: Y preserved
|
|
; X = #$00
|
|
; Z set
|
|
; C clear
|
|
; all other flags and registers clobbered
|
|
asl
|
|
asl
|
|
+HGR_CALC
|
|
HGRStaggerToWhite
|
|
clc
|
|
ldx #$04
|
|
@loop
|
|
lda #$7F
|
|
sta ($26),y
|
|
+HGR_INC_WITHIN_BLOCK
|
|
dex
|
|
bne @loop
|
|
rts
|
|
|
|
SetCopyMask
|
|
; in: A/Y points to 8-byte array of bit masks used by HGRBlockCopyWithMask
|
|
+ST16 CopyMaskAddr
|
|
rts
|
|
|
|
HGRBlockCopyWithMask
|
|
; in: A = HGR row / 8 (0x00..0x17)
|
|
; Y = HGR column (0x00..0x27)
|
|
; must call SetCopyMask first
|
|
; out: Y preserved
|
|
; A/X clobbered
|
|
; $00 clobbered
|
|
+HGR_ROW_CALC
|
|
HGRBlockCopyWithMaskNoRecalc
|
|
ldx #7
|
|
HGRBlockCopyWithMasksLoop
|
|
lda ($26),y
|
|
eor ($3c),y
|
|
CopyMaskAddr=*+1
|
|
and $FDFD,x ; call SetCopyMask to set
|
|
eor ($26),y
|
|
sta ($26),y
|
|
clc
|
|
+HGR_INC_WITHIN_BLOCK
|
|
dex
|
|
bpl HGRBlockCopyWithMasksLoop
|
|
rts
|