mirror of
https://github.com/mi57730/a2d.git
synced 2024-12-01 05:50:24 +00:00
Macros: add/sub16in to use indirect indexed, with integrated INY
This commit is contained in:
parent
a12a8d3739
commit
3b085738aa
@ -1203,23 +1203,9 @@ L9B48: bit L9C75
|
|||||||
L9B52: MGTK_CALL MGTK::FramePoly, drag_outline_buffer
|
L9B52: MGTK_CALL MGTK::FramePoly, drag_outline_buffer
|
||||||
copy16 #drag_outline_buffer, $08
|
copy16 #drag_outline_buffer, $08
|
||||||
L9B60: ldy #2
|
L9B60: ldy #2
|
||||||
L9B62: lda ($08),y
|
L9B62: add16in ($08),y, L9C96, ($08),y
|
||||||
clc
|
|
||||||
adc L9C96
|
|
||||||
sta ($08),y
|
|
||||||
iny
|
iny
|
||||||
lda ($08),y
|
add16in ($08),y, L9C98, ($08),y
|
||||||
adc L9C96+1
|
|
||||||
sta ($08),y
|
|
||||||
iny
|
|
||||||
lda ($08),y
|
|
||||||
clc
|
|
||||||
adc L9C98
|
|
||||||
sta ($08),y
|
|
||||||
iny
|
|
||||||
lda ($08),y
|
|
||||||
adc L9C98+1
|
|
||||||
sta ($08),y
|
|
||||||
iny
|
iny
|
||||||
cpy #icon_poly_size
|
cpy #icon_poly_size
|
||||||
bne L9B62
|
bne L9B62
|
||||||
@ -1823,14 +1809,7 @@ icon_poly_size := (8 * .sizeof(MGTK::Point)) + 2
|
|||||||
|
|
||||||
;; Bottom edge of icon (v2, v7)
|
;; Bottom edge of icon (v2, v7)
|
||||||
ldy #10 ; bitmap y2
|
ldy #10 ; bitmap y2
|
||||||
lda (bitmap_ptr),y
|
add16in (bitmap_ptr),y, poly::v0::ycoord, poly::v2::ycoord
|
||||||
clc
|
|
||||||
adc poly::v0::ycoord
|
|
||||||
sta poly::v2::ycoord
|
|
||||||
iny
|
|
||||||
lda ($08),y
|
|
||||||
adc poly::v0::ycoord+1
|
|
||||||
sta poly::v2::ycoord+1
|
|
||||||
|
|
||||||
lda poly::v2::ycoord ; 2px down
|
lda poly::v2::ycoord ; 2px down
|
||||||
clc
|
clc
|
||||||
@ -2315,41 +2294,13 @@ LA56F: pla
|
|||||||
tax
|
tax
|
||||||
copy16 icon_ptrs,x, $06
|
copy16 icon_ptrs,x, $06
|
||||||
ldy #3
|
ldy #3
|
||||||
lda ($06),y
|
add16in ($06),y, LA567, ($06),y
|
||||||
clc
|
|
||||||
adc LA567
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
add16in ($06),y, LA569, ($06),y
|
||||||
adc LA568
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
clc
|
|
||||||
adc LA569
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
adc LA56A
|
|
||||||
sta ($06),y
|
|
||||||
ldy #3
|
ldy #3
|
||||||
lda ($06),y
|
sub16in ($06),y, LA56B, ($06),y
|
||||||
sec
|
|
||||||
sbc LA56B
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
sub16in ($06),y, LA56D, ($06),y
|
||||||
sbc LA56C
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sec
|
|
||||||
sbc LA56D
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sbc LA56E
|
|
||||||
sta ($06),y
|
|
||||||
jsr pop_zp_addrs
|
jsr pop_zp_addrs
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -2361,41 +2312,13 @@ LA5CB: pla
|
|||||||
tax
|
tax
|
||||||
copy16 icon_ptrs,x, $06
|
copy16 icon_ptrs,x, $06
|
||||||
ldy #3
|
ldy #3
|
||||||
lda ($06),y
|
sub16in ($06),y, LA567, ($06),y
|
||||||
sec
|
|
||||||
sbc LA567
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
sub16in ($06),y, LA569, ($06),y
|
||||||
sbc LA568
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sec
|
|
||||||
sbc LA569
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sbc LA56A
|
|
||||||
sta ($06),y
|
|
||||||
ldy #3
|
ldy #3
|
||||||
lda ($06),y
|
add16in ($06),y, LA56B, ($06),y
|
||||||
clc
|
|
||||||
adc LA56B
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
add16in ($06),y, LA56D, ($06),y
|
||||||
adc LA56C
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
clc
|
|
||||||
adc LA56D
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
adc LA56E
|
|
||||||
sta ($06),y
|
|
||||||
jsr pop_zp_addrs
|
jsr pop_zp_addrs
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -233,14 +233,7 @@ L415B: sta active_window_id
|
|||||||
jsr window_lookup
|
jsr window_lookup
|
||||||
stax $06
|
stax $06
|
||||||
ldy #$16
|
ldy #$16
|
||||||
lda ($06),y
|
sub16in ($06),y, grafport2::viewloc::ycoord, L4242
|
||||||
sec
|
|
||||||
sbc grafport2::viewloc::ycoord
|
|
||||||
sta L4242
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sbc grafport2::viewloc::ycoord+1
|
|
||||||
sta L4243
|
|
||||||
cmp16 L4242, #15
|
cmp16 L4242, #15
|
||||||
bpl L41CB
|
bpl L41CB
|
||||||
jsr offset_grafport2
|
jsr offset_grafport2
|
||||||
@ -4000,24 +3993,9 @@ L60DE: lda active_window_id
|
|||||||
sta ($06),y
|
sta ($06),y
|
||||||
L6112: ldy #$14
|
L6112: ldy #$14
|
||||||
|
|
||||||
lda ($06),y
|
sub16in ($06),y, port_copy+MGTK::GrafPort::viewloc+MGTK::Point::xcoord, L6197
|
||||||
sec
|
|
||||||
sbc port_copy+MGTK::GrafPort::viewloc+MGTK::Point::xcoord
|
|
||||||
sta L6197
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
sub16in ($06),y, port_copy+MGTK::GrafPort::viewloc+MGTK::Point::ycoord, L6199
|
||||||
sbc port_copy+MGTK::GrafPort::viewloc+MGTK::Point::xcoord+1
|
|
||||||
sta L6197+1
|
|
||||||
iny
|
|
||||||
|
|
||||||
lda ($06),y
|
|
||||||
sec
|
|
||||||
sbc port_copy+MGTK::GrafPort::viewloc+MGTK::Point::ycoord
|
|
||||||
sta L6199
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sbc port_copy+MGTK::GrafPort::viewloc+MGTK::Point::ycoord+1
|
|
||||||
sta L6199+1
|
|
||||||
|
|
||||||
ldx active_window_id
|
ldx active_window_id
|
||||||
dex
|
dex
|
||||||
@ -4043,23 +4021,9 @@ L6161: txa
|
|||||||
jsr icon_entry_lookup
|
jsr icon_entry_lookup
|
||||||
stax $06
|
stax $06
|
||||||
ldy #$03
|
ldy #$03
|
||||||
lda ($06),y
|
add16in ($06),y, L6197, ($06),y
|
||||||
clc
|
|
||||||
adc L6197
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
add16in ($06),y, L6199, ($06),y
|
||||||
adc L6198
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
clc
|
|
||||||
adc L6199
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
adc L619A
|
|
||||||
sta ($06),y
|
|
||||||
pla
|
pla
|
||||||
tax
|
tax
|
||||||
inx
|
inx
|
||||||
@ -8305,47 +8269,19 @@ port_copy:
|
|||||||
|
|
||||||
;; iconx
|
;; iconx
|
||||||
ldy #IconEntry::iconx
|
ldy #IconEntry::iconx
|
||||||
lda (entry_ptr),y
|
add16in (entry_ptr),y, pos_screen, (entry_ptr),y
|
||||||
clc
|
|
||||||
adc pos_screen
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
adc pos_screen+1
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
iny
|
||||||
|
|
||||||
;; icony
|
;; icony
|
||||||
lda (entry_ptr),y
|
add16in (entry_ptr),y, pos_screen+2, (entry_ptr),y
|
||||||
clc
|
|
||||||
adc pos_screen+2
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
adc pos_screen+3
|
|
||||||
sta (entry_ptr),y
|
|
||||||
|
|
||||||
;; iconx
|
;; iconx
|
||||||
ldy #IconEntry::iconx
|
ldy #IconEntry::iconx
|
||||||
lda (entry_ptr),y
|
sub16in (entry_ptr),y, pos_win, (entry_ptr),y
|
||||||
sec
|
|
||||||
sbc pos_win
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
sbc pos_win+1
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
iny
|
||||||
|
|
||||||
;; icony
|
;; icony
|
||||||
lda (entry_ptr),y
|
sub16in (entry_ptr),y, pos_win+2, (entry_ptr),y
|
||||||
sec
|
|
||||||
sbc pos_win+2
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
sbc pos_win+3
|
|
||||||
sta (entry_ptr),y
|
|
||||||
|
|
||||||
jsr pop_zp_addrs
|
jsr pop_zp_addrs
|
||||||
rts
|
rts
|
||||||
@ -8397,47 +8333,19 @@ pos_win: .word 0, 0
|
|||||||
|
|
||||||
;; iconx
|
;; iconx
|
||||||
ldy #IconEntry::iconx
|
ldy #IconEntry::iconx
|
||||||
lda (entry_ptr),y
|
sub16in (entry_ptr),y, pos_screen, (entry_ptr),y
|
||||||
sec
|
|
||||||
sbc pos_screen
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
sbc pos_screen+1
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
iny
|
||||||
|
|
||||||
;; icony
|
;; icony
|
||||||
lda (entry_ptr),y
|
sub16in (entry_ptr),y, pos_screen+2, (entry_ptr),y
|
||||||
sec
|
|
||||||
sbc pos_screen+2
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
sbc pos_screen+3
|
|
||||||
sta (entry_ptr),y
|
|
||||||
|
|
||||||
;; iconx
|
;; iconx
|
||||||
ldy #IconEntry::iconx
|
ldy #IconEntry::iconx
|
||||||
lda (entry_ptr),y
|
add16in (entry_ptr),y, pos_win, (entry_ptr),y
|
||||||
clc
|
|
||||||
adc pos_win
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
adc pos_win+1
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
iny
|
||||||
|
|
||||||
;; icony
|
;; icony
|
||||||
lda (entry_ptr),y
|
add16in (entry_ptr),y, pos_win+2, (entry_ptr),y
|
||||||
clc
|
|
||||||
adc pos_win+2
|
|
||||||
sta (entry_ptr),y
|
|
||||||
iny
|
|
||||||
lda (entry_ptr),y
|
|
||||||
adc pos_win+3
|
|
||||||
sta (entry_ptr),y
|
|
||||||
jsr pop_zp_addrs
|
jsr pop_zp_addrs
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -25,41 +25,13 @@ L853B: lda ($08),y
|
|||||||
cpx #$04
|
cpx #$04
|
||||||
bne L853B
|
bne L853B
|
||||||
ldy #$03
|
ldy #$03
|
||||||
lda ($06),y
|
sub16in ($06),y, L8590, ($06),y
|
||||||
sec
|
|
||||||
sbc L8590
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
sub16in ($06),y, L8592, ($06),y
|
||||||
sbc L8591
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sec
|
|
||||||
sbc L8592
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
sbc L8593
|
|
||||||
sta ($06),y
|
|
||||||
ldy #$03
|
ldy #$03
|
||||||
lda ($06),y
|
add16in ($06),y, L8594, ($06),y
|
||||||
clc
|
|
||||||
adc L8594
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
iny
|
||||||
lda ($06),y
|
add16in ($06),y, L8596, ($06),y
|
||||||
adc L8595
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
clc
|
|
||||||
adc L8596
|
|
||||||
sta ($06),y
|
|
||||||
iny
|
|
||||||
lda ($06),y
|
|
||||||
adc L8597
|
|
||||||
sta ($06),y
|
|
||||||
jsr $83A5
|
jsr $83A5
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
82
macros.inc
82
macros.inc
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
.define _is_immediate(arg) (.match (.mid (0, 1, {arg}), #))
|
.define _is_immediate(arg) (.match (.mid (0, 1, {arg}), #))
|
||||||
.define _is_register(arg) (.match ({arg}, x) .or .match ({arg}, y))
|
.define _is_register(arg) (.match ({arg}, x) .or .match ({arg}, y))
|
||||||
|
.define _is_y_register(arg) (.match ({arg}, y))
|
||||||
.define _immediate_value(arg) (.right (.tcount ({arg})-1, {arg}))
|
.define _immediate_value(arg) (.right (.tcount ({arg})-1, {arg}))
|
||||||
|
|
||||||
.macro _op_lo op, arg
|
.macro _op_lo op, arg
|
||||||
@ -315,6 +316,79 @@ end:
|
|||||||
.endif
|
.endif
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
;;; Core for add16in/sub16in
|
||||||
|
.macro _addsub16in op, opc, arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
|
.if _is_y_register {arg2} && _is_y_register {arg4} && _is_y_register {arg6}
|
||||||
|
;; xxx16in $1111,y, $2222,y, $3333,y
|
||||||
|
lda (arg1),y
|
||||||
|
opc
|
||||||
|
op (arg3),y
|
||||||
|
sta (arg5),y
|
||||||
|
iny
|
||||||
|
lda (arg1),y
|
||||||
|
op (arg3),y
|
||||||
|
sta (arg5),y
|
||||||
|
.elseif _is_y_register {arg2} && _is_y_register {arg4}
|
||||||
|
;; xxx16in $1111,y, $2222,y, $3333
|
||||||
|
lda (arg1),y
|
||||||
|
opc
|
||||||
|
op (arg3),y
|
||||||
|
sta arg5
|
||||||
|
iny
|
||||||
|
lda (arg1),y
|
||||||
|
op (arg3),y
|
||||||
|
sta arg5+1
|
||||||
|
.elseif _is_y_register {arg2} && _is_y_register {arg5}
|
||||||
|
;; xxx16in $1111,y, $2222, $3333,y
|
||||||
|
;; xxx16in $1111,y, #$2222, $3333,y
|
||||||
|
lda (arg1),y
|
||||||
|
opc
|
||||||
|
_op_lo op, {arg3}
|
||||||
|
sta (arg4),y
|
||||||
|
iny
|
||||||
|
lda (arg1),y
|
||||||
|
_op_hi op, {arg3}
|
||||||
|
sta (arg4),y
|
||||||
|
.elseif _is_y_register {arg2}
|
||||||
|
;; xxx16in $1111,x, $2222, $3333
|
||||||
|
;; xxx16in $1111,x, #$2222, $3333
|
||||||
|
lda (arg1),y
|
||||||
|
opc
|
||||||
|
_op_lo op, {arg3}
|
||||||
|
sta arg4
|
||||||
|
iny
|
||||||
|
lda (arg1),y
|
||||||
|
_op_hi op, {arg3}
|
||||||
|
sta arg4+1
|
||||||
|
.elseif _is_y_register {arg3}
|
||||||
|
;; xxx16in $1111, $2222,y $3333
|
||||||
|
;; xxx16in #$1111, $2222,y $3333
|
||||||
|
_op_lo lda, {arg1}
|
||||||
|
opc
|
||||||
|
op (arg2),y
|
||||||
|
sta arg4
|
||||||
|
iny
|
||||||
|
_op_hi lda, {arg1}
|
||||||
|
op (arg2),y
|
||||||
|
sta arg4+1
|
||||||
|
.elseif _is_y_register {arg4}
|
||||||
|
;; xxx16in $1111, $2222, $3333,y
|
||||||
|
;; xxx16in #$1111, $2222, $3333,y
|
||||||
|
;; xxx16in $1111, #$2222, $3333,y
|
||||||
|
;; xxx16in #$1111, #$2222, $3333,y
|
||||||
|
_op_lo lda, {arg1}
|
||||||
|
opc
|
||||||
|
_op_lo op, {arg2}
|
||||||
|
sta (arg3),y
|
||||||
|
iny
|
||||||
|
_op_hi lda, {arg1}
|
||||||
|
_op_hi op, {arg2}
|
||||||
|
sta (arg3),y
|
||||||
|
.else
|
||||||
|
.error "Indirect indexed required at least one use of y reg"
|
||||||
|
.endif
|
||||||
|
.endmacro
|
||||||
|
|
||||||
;;; Add arg1 to arg2, store to arg3
|
;;; Add arg1 to arg2, store to arg3
|
||||||
;;; add16 $1111, $2222, $3333 ; absolute, absolute, absolute
|
;;; add16 $1111, $2222, $3333 ; absolute, absolute, absolute
|
||||||
;;; add16 $1111, #$2222, $3333 ; absolute, immediate, absolute
|
;;; add16 $1111, #$2222, $3333 ; absolute, immediate, absolute
|
||||||
@ -330,6 +404,10 @@ end:
|
|||||||
.macro add16lc arg1, arg2, arg3, arg4, arg5, arg6
|
.macro add16lc arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
_addsub16lc adc, clc, arg1, arg2, arg3, arg4, arg5, arg6
|
_addsub16lc adc, clc, arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
.endmacro
|
.endmacro
|
||||||
|
;;; (as above, but indirect indexed, y register is incremented)
|
||||||
|
.macro add16in arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
|
_addsub16in adc, clc, arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
;;; Add arg1 (absolute) to arg2 (8-bit absolute), store to arg3
|
;;; Add arg1 (absolute) to arg2 (8-bit absolute), store to arg3
|
||||||
@ -374,6 +452,10 @@ end:
|
|||||||
.macro sub16lc arg1, arg2, arg3, arg4, arg5, arg6
|
.macro sub16lc arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
_addsub16lc sbc, sec, arg1, arg2, arg3, arg4, arg5, arg6
|
_addsub16lc sbc, sec, arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
.endmacro
|
.endmacro
|
||||||
|
;;; (as above, but indirect indexed, y register incremented)
|
||||||
|
.macro sub16in arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
|
_addsub16in sbc, sec, arg1, arg2, arg3, arg4, arg5, arg6
|
||||||
|
.endmacro
|
||||||
|
|
||||||
;;; Subtract arg2 from arg1, store to arg3
|
;;; Subtract arg2 from arg1, store to arg3
|
||||||
;;; sub16_8 #$1111, #$22, $3333 ; immediate, immediate, absolute
|
;;; sub16_8 #$1111, #$22, $3333 ; immediate, immediate, absolute
|
||||||
|
Loading…
Reference in New Issue
Block a user