Let char_draw write with x and y pos

This commit is contained in:
hugova 2025-03-29 15:24:21 +01:00
parent 4f585183ce
commit be3e9582ba

View file

@ -5,6 +5,8 @@
;; And prints it ON X_pos, Y_pos
;; Note that this is the real positions divided by 8
.proc char_draw
Y_pos_offset = $F9F8 ;Reuses from Y_pos
X_pos_offset = $FAF7
X_pos = $FA
Y_pos = $F9
charset = $FB
@ -15,26 +17,58 @@
;#### TEMP INIT DATA ####
LDA #$10
STA code
LDA #$10
LDA #04
STA X_pos
LDA #02
STA Y_pos
;;Do arithimatic to know where to read and write bytes.
initial:
;We first need to clear some memory
LDA #$00
STA <petski_position
STA <Y_pos_offset
STA <X_pos_offset
;;We need the relative offset for bytes to read and write.
;; This is code *10 because 8byte is one character
;; *10 = 2*2*2 + 2
;; This is code *8 because 8byte is one character
;; *8 = 2*2*2
ASL code ;Will never owerflow, therefore 8byte
Mult_16 >petski_position, <petski_position, !
Mult_16 >petski_position, <petski_position, !
Mult_16 >petski_position, <petski_position
Mult_16 >petski_position, <petski_position
;; Add starting position
Add_16 >petski_position, <petski_position, #<Character_generator_ROM , #>Character_generator_ROM, !
;;Calculate screen_position to use
Mov_16 >screen_position, <screen_position, #<VIC_bank, #>VIC_bank
;; Add the X_pos has a offset multiplier of *8 because 1 chunk = 8 addresses
;; *8
Mult_16 >X_pos_offset, <X_pos_offset
Mult_16 >X_pos_offset, <X_pos_offset
Mult_16 >X_pos_offset, <X_pos_offset
;; Add
Add_16 >screen_position, <screen_position, X_pos, #$00, !
;; And Y_pos has a offset multiplier of "screen length" = 320 = (2*2 +1)*2^6
;;Y_pos*2*2 +1 |Lets reuse X_pos for storage
LDA Y_pos
STA X_pos
Mult_16 >Y_pos_offset, <Y_pos_offset
Mult_16 >Y_pos_offset, <Y_pos_offset
Add_16 >Y_pos_offset, <Y_pos_offset, X_pos, #$00, !
;; *2^6
Mult_16 >Y_pos_offset, <Y_pos_offset
Mult_16 >Y_pos_offset, <Y_pos_offset
Mult_16 >Y_pos_offset, <Y_pos_offset
Mult_16 >Y_pos_offset, <Y_pos_offset
Mult_16 >Y_pos_offset, <Y_pos_offset
Mult_16 >Y_pos_offset, <Y_pos_offset
;; Add
Add_16 >screen_position, <screen_position, >Y_pos_offset, <Y_pos_offset, !
initial_end:
;; One character is 8 byte, move these bytes to screen
LDY #$07
@loop:
@ -42,9 +76,7 @@
STA (>screen_position), Y
DEY
BNE @loop
hihi:
LDA (>petski_position), Y
STA (>screen_position), Y
jmp hihi
RTS
.endproc