reduse a STA instruction in circle code
This commit is contained in:
parent
38070296d0
commit
49a330d24c
3 changed files with 85 additions and 86 deletions
|
@ -5,16 +5,15 @@
|
||||||
;; and others from pixel.inc
|
;; and others from pixel.inc
|
||||||
;; private args
|
;; private args
|
||||||
t1 = $E0
|
t1 = $E0
|
||||||
t2 = $E1
|
|
||||||
X_math = radius
|
X_math = radius
|
||||||
Y_math = $E2
|
Y_math = $E1
|
||||||
byte_to_paint_qaa = $E3
|
byte_to_paint_qaa = $E2
|
||||||
byte_to_paint_qcb = $E4
|
byte_to_paint_qcb = $E3
|
||||||
byte_to_paint_qca = $E5
|
byte_to_paint_qca = $E4
|
||||||
byte_to_paint_qdb = $E6
|
byte_to_paint_qdb = $E5
|
||||||
|
|
||||||
btp_mem_pos_qaa = btp_mem_pos
|
btp_mem_pos_qaa = btp_mem_pos
|
||||||
btp_mem_pos_qcb = $E7 ; 16bit value (uses E8)
|
btp_mem_pos_qcb = $E6 ; 16bit value (uses E7)
|
||||||
; E9 - EA is used by pixel.inc
|
; E9 - EA is used by pixel.inc
|
||||||
btp_mem_pos_qdb = $EB ; 16bit value (uses EC)
|
btp_mem_pos_qdb = $EB ; 16bit value (uses EC)
|
||||||
btp_mem_pos_qda = $ED ; 16bit value (uses EE)
|
btp_mem_pos_qda = $ED ; 16bit value (uses EE)
|
||||||
|
@ -24,9 +23,9 @@
|
||||||
btp_mem_pos_qbb = $D6 ; 16bit value (uses D7)
|
btp_mem_pos_qbb = $D6 ; 16bit value (uses D7)
|
||||||
|
|
||||||
Y_qda = $EF
|
Y_qda = $EF
|
||||||
Y_qdb = $D8
|
Y_qdb = $E8
|
||||||
Y_qbb = $D9
|
Y_qbb = $D8
|
||||||
Y_qaa = $DA
|
Y_qaa = $D9
|
||||||
;;Reuse addresses, be carful here!
|
;;Reuse addresses, be carful here!
|
||||||
temp__ = Y_qaa
|
temp__ = Y_qaa
|
||||||
temp_ = Y_qda
|
temp_ = Y_qda
|
||||||
|
|
|
@ -229,7 +229,7 @@ qcb_x_end:
|
||||||
;; t2 = t1 - x
|
;; t2 = t1 - x
|
||||||
SEC
|
SEC
|
||||||
SBC X_math
|
SBC X_math
|
||||||
STA t2
|
;t2 do not need to be saved :)
|
||||||
;; if t2 < 0 then skip to endif
|
;; if t2 < 0 then skip to endif
|
||||||
;; we can skipp CMP #$00 because SBC above do the same
|
;; we can skipp CMP #$00 because SBC above do the same
|
||||||
BPL if
|
BPL if
|
||||||
|
|
150
wip-hugo/routines/memory/memset_alt.s
Executable file → Normal file
150
wip-hugo/routines/memory/memset_alt.s
Executable file → Normal file
|
@ -1,75 +1,75 @@
|
||||||
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
|
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
|
||||||
|
|
||||||
;; Sets memory in 'A'-registry to all addresses from 'A_start' until 'A_start' + 'length'
|
;; Sets memory in 'A'-registry to all addresses from 'A_start' until 'A_start' + 'length'
|
||||||
;; Modifies A, X and A_start
|
;; Modifies A, X and A_start
|
||||||
.proc memset
|
.proc memset
|
||||||
.include "mem.inc"
|
.include "mem.inc"
|
||||||
|
|
||||||
;; big_set sets the memory in $ff chunks.
|
;; big_set sets the memory in $ff chunks.
|
||||||
;; skipp if length >= $ff
|
;; skipp if length >= $ff
|
||||||
LDX length +1
|
LDX length +1
|
||||||
BNE big_set
|
BNE big_set
|
||||||
JMP small_set
|
JMP small_set
|
||||||
|
|
||||||
big_set: ;sets $ff of memory
|
big_set: ;sets $ff of memory
|
||||||
;; Y value do not matter, will go through all anyway!
|
;; Y value do not matter, will go through all anyway!
|
||||||
.repeat $ff
|
.repeat $ff
|
||||||
STA (A_start), Y
|
STA (A_start), Y
|
||||||
DEY
|
DEY
|
||||||
.endrepeat
|
.endrepeat
|
||||||
STA (A_start), Y ; dont forget Y =0
|
STA (A_start), Y ; dont forget Y =0
|
||||||
big_set_end:
|
big_set_end:
|
||||||
;;set all hole $ff memory chunks!
|
;;set all hole $ff memory chunks!
|
||||||
INC A_start + 1
|
INC A_start + 1
|
||||||
DEX ;; length +1 --
|
DEX ;; length +1 --
|
||||||
BEQ small_set
|
BEQ small_set
|
||||||
JMP big_set
|
JMP big_set
|
||||||
|
|
||||||
|
|
||||||
small_set:
|
small_set:
|
||||||
STA data_to_write
|
STA data_to_write
|
||||||
LDA length
|
LDA length
|
||||||
STA length_copy
|
STA length_copy
|
||||||
|
|
||||||
;; calculate rts-position
|
;; calculate rts-position
|
||||||
LDX #$00
|
LDX #$00
|
||||||
STX length + 1
|
STX length + 1
|
||||||
;; 3 bytes = STA DEY NOP = seting 1 byte of memory.
|
;; 3 bytes = STA DEY NOP = seting 1 byte of memory.
|
||||||
;; So we need to calculate: length*3
|
;; So we need to calculate: length*3
|
||||||
Mult_16 length, length + 1
|
Mult_16 length, length + 1
|
||||||
; A= length_copy
|
; A= length_copy
|
||||||
ADC length
|
ADC length
|
||||||
TAY
|
TAY
|
||||||
LDA length + 1
|
LDA length + 1
|
||||||
ADC #$00
|
ADC #$00
|
||||||
STA length + 1
|
STA length + 1
|
||||||
|
|
||||||
;; Now RTS_pointer + Y = length*3 + big_set_label
|
;; Now RTS_pointer + Y = length*3 + big_set_label
|
||||||
LDA #<big_set
|
LDA #<big_set
|
||||||
STA RTS_pointer
|
STA RTS_pointer
|
||||||
LDA #>big_set
|
LDA #>big_set
|
||||||
ADC length + 1
|
ADC length + 1
|
||||||
STA RTS_pointer + 1
|
STA RTS_pointer + 1
|
||||||
|
|
||||||
;; read data we will change to RTS
|
;; read data we will change to RTS
|
||||||
STY Y_copy
|
STY Y_copy
|
||||||
LDA (RTS_pointer), Y
|
LDA (RTS_pointer), Y
|
||||||
TAX
|
TAX
|
||||||
|
|
||||||
;; set RTS in big_set
|
;; set RTS in big_set
|
||||||
LDA #$60
|
LDA #$60
|
||||||
STA (RTS_pointer), Y
|
STA (RTS_pointer), Y
|
||||||
|
|
||||||
;; JSR to modified big_set
|
;; JSR to modified big_set
|
||||||
LDY length_copy
|
LDY length_copy
|
||||||
DEY ; because we want to count to Y=0 :)
|
DEY ; because we want to count to Y=0 :)
|
||||||
LDA data_to_write
|
LDA data_to_write
|
||||||
JSR big_set
|
JSR big_set
|
||||||
|
|
||||||
;; revert changes
|
;; revert changes
|
||||||
LDY Y_copy
|
LDY Y_copy
|
||||||
TXA
|
TXA
|
||||||
STA (RTS_pointer), Y
|
STA (RTS_pointer), Y
|
||||||
|
|
||||||
RTS
|
RTS
|
||||||
.endproc
|
.endproc
|
||||||
|
|
Loading…
Add table
Reference in a new issue