make char.s use ARGVEC

This commit is contained in:
hugova 2025-05-11 22:23:08 +02:00
parent c2a4ff416d
commit c2e89a5487
4 changed files with 45 additions and 36 deletions

View file

@ -1,11 +1,20 @@
Character_generator_ROM = $D000 ;; public args
Y_pos_offset = $F9 ; 16-bit value (uses F8), reuses from Y_pos X_pos = ARGVEC + 0
X_pos_offset = $FA ; 16-bit value (uses F7) Y_pos = ARGVEC + 1
X_pos = $FA code = ARGVEC + 2
Y_pos = $F9
charset = $FB ;; private variables
code = $FE screen_position = $EE ; 16-bit value (uses EF)
petski_position = $FE ; 16-bit value (uses FF),reuses code:s memory ;; 16-bit value, we reuse bytes from X_pos
screen_position = $FC ; 16-bit value (uses FD) X_pos_offset_hi = $ED
;; copy X_pos_offset_lo = X_pos
VIC_bank = $4000 ;; 16-bit value, we reuse bytes from Y_pos
Y_pos_offset_hi = $EC
Y_pos_offset_lo = Y_pos
;; 16-bit value, we reuse bytes from code
petski_position_lo = code
petski_position_hi = code + 1 # this clobers the ARGVEK space ik but it's faster. CURSED AF
;; values
VIC_bank = $4000
Character_generator_ROM = $D000

View file

@ -4,7 +4,7 @@
;; Takes in a PETSCII-code in CODE ;; Takes in a PETSCII-code in CODE
;; And prints it ON X_pos, Y_pos ;; And prints it ON X_pos, Y_pos
;; Note that this is the real positions divided by 8 ;; Note that this is the real positions divided by 8
.proc char_draw; user-procedure :clobbers (A Y) :clobbers-arguments (0 3) .proc char_draw; user-procedure :clobbers (A Y) :clobbers-arguments 4
.include "char.inc" .include "char.inc"
;#### TEMP INIT DATA #### ;#### TEMP INIT DATA ####
@ -19,27 +19,27 @@
initial: initial:
;We first need to clear some memory ;We first need to clear some memory
LDA #$00 LDA #$00
STA petski_position + 1 STA petski_position_hi
STA Y_pos_offset + 1 STA Y_pos_offset_hi
STA X_pos_offset + 1 STA X_pos_offset_hi
;;We need the relative offset for bytes to read and write. ;;We need the relative offset for bytes to read and write.
;; This is code *8 because 8byte is one character ;; This is code *8 because 8byte is one character
;; *8 = 2*2*2 ;; *8 = 2*2*2
ASL code ;Will never owerflow, therefore 8byte ASL code ;Will never owerflow, therefore 8byte
Mult_16 petski_position, petski_position + 1 Mult_16 petski_position_lo, petski_position_hi
Mult_16 petski_position, petski_position + 1 Mult_16 petski_position_lo, petski_position_hi
;; Add starting position ;; Add starting position
Add_16 petski_position, petski_position + 1, #<Character_generator_ROM , #>Character_generator_ROM, ! Add_16 petski_position_lo, petski_position_hi, #<Character_generator_ROM , #>Character_generator_ROM, !
;;Calculate screen_position to use ;;Calculate screen_position to use
Mov_16 screen_position, screen_position + 1, #<VIC_bank, #>VIC_bank Mov_16 screen_position, screen_position + 1, #<VIC_bank, #>VIC_bank
;; Add the X_pos has a offset multiplier of *8 because 1 chunk = 8 addresses ;; Add the X_pos has a offset multiplier of *8 because 1 chunk = 8 addresses
;; *8 ;; *8
Mult_16 X_pos_offset, X_pos_offset + 1 Mult_16 X_pos_offset_lo, X_pos_offset_hi
Mult_16 X_pos_offset, X_pos_offset + 1 Mult_16 X_pos_offset_lo, X_pos_offset_hi
Mult_16 X_pos_offset, X_pos_offset + 1 Mult_16 X_pos_offset_lo, X_pos_offset_hi
;; Add ;; Add
Add_16 screen_position, screen_position + 1, X_pos, #$00, ! Add_16 screen_position, screen_position + 1, X_pos, #$00, !
@ -47,29 +47,28 @@ initial:
;;Y_pos*2*2 +1 |Lets reuse X_pos for storage ;;Y_pos*2*2 +1 |Lets reuse X_pos for storage
LDA Y_pos LDA Y_pos
STA X_pos STA X_pos
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
Add_16 Y_pos_offset, Y_pos_offset + 1, X_pos, #$00, ! Add_16 Y_pos_offset_lo, Y_pos_offset_hi, X_pos, #$00, !
;; *2^6 ;; *2^6
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
Mult_16 Y_pos_offset, Y_pos_offset + 1 Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
;; Add ;; Add
Add_16 screen_position, screen_position + 1, Y_pos_offset, Y_pos_offset + 1, ! Add_16 screen_position, screen_position + 1, Y_pos_offset_lo, Y_pos_offset_hi, !
initial_end: initial_end:
;; One character is 8 byte, move these bytes to screen ;; One character is 8 byte, move these bytes to screen
LDY #$07 LDY #$07
@loop: @loop:
LDA (petski_position), Y LDA (petski_position_lo), Y
STA (screen_position), Y STA (screen_position), Y
DEY DEY
BNE @loop BNE @loop
LDA (petski_position), Y LDA (petski_position_lo), Y
STA (screen_position), Y STA (screen_position), Y
RTS RTS
.endproc .endproc

View file

@ -2,7 +2,6 @@
.include "char.inc" .include "char.inc"
LDA #$10 LDA #$10
STA code STA code
LDA #$10
LDA #04 LDA #04
STA X_pos STA X_pos
LDA #02 LDA #02

View file

@ -7,7 +7,8 @@
;;Code to run ;;Code to run
.include "STARTUP.s" .include "STARTUP.s"
;.include "dubbel_buffer/raster_irqs.s" ;.include "dubbel_buffer/raster_irqs.s"
.include "routines/line/line_test.s" ;.include "routines/line/line_test.s"
.include "routines/text/char_draw_test.s"
;.include "routines/memory/memcpy_test.s" ;.include "routines/memory/memcpy_test.s"
;.include "routines/triangle/triangle_test.s" ;.include "routines/triangle/triangle_test.s"
exit: exit:
@ -16,6 +17,7 @@ JMP exit
.include "routines/line/line.s" .include "routines/line/line.s"
.include "routines/triangle/triangle.s" .include "routines/triangle/triangle.s"
.include "routines/pixel/pixel_draw.s" .include "routines/pixel/pixel_draw.s"
.include "routines/text/char_draw.s"
.include "routines/memory/memset.s" .include "routines/memory/memset.s"
.include "routines/memory/memcpy.s" .include "routines/memory/memcpy.s"
.include "END.s" .include "END.s"