make char.s use ARGVEC
This commit is contained in:
parent
c2a4ff416d
commit
c2e89a5487
4 changed files with 45 additions and 36 deletions
|
@ -1,11 +1,20 @@
|
|||
Character_generator_ROM = $D000
|
||||
Y_pos_offset = $F9 ; 16-bit value (uses F8), reuses from Y_pos
|
||||
X_pos_offset = $FA ; 16-bit value (uses F7)
|
||||
X_pos = $FA
|
||||
Y_pos = $F9
|
||||
charset = $FB
|
||||
code = $FE
|
||||
petski_position = $FE ; 16-bit value (uses FF),reuses code:s memory
|
||||
screen_position = $FC ; 16-bit value (uses FD)
|
||||
;; copy
|
||||
VIC_bank = $4000
|
||||
;; public args
|
||||
X_pos = ARGVEC + 0
|
||||
Y_pos = ARGVEC + 1
|
||||
code = ARGVEC + 2
|
||||
|
||||
;; private variables
|
||||
screen_position = $EE ; 16-bit value (uses EF)
|
||||
;; 16-bit value, we reuse bytes from X_pos
|
||||
X_pos_offset_hi = $ED
|
||||
X_pos_offset_lo = X_pos
|
||||
;; 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
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
;; Takes in a PETSCII-code in CODE
|
||||
;; And prints it ON X_pos, Y_pos
|
||||
;; 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"
|
||||
|
||||
;#### TEMP INIT DATA ####
|
||||
|
@ -19,27 +19,27 @@
|
|||
initial:
|
||||
;We first need to clear some memory
|
||||
LDA #$00
|
||||
STA petski_position + 1
|
||||
STA Y_pos_offset + 1
|
||||
STA X_pos_offset + 1
|
||||
STA petski_position_hi
|
||||
STA Y_pos_offset_hi
|
||||
STA X_pos_offset_hi
|
||||
|
||||
;;We need the relative offset for bytes to read and write.
|
||||
;; 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 + 1
|
||||
Mult_16 petski_position, petski_position + 1
|
||||
Mult_16 petski_position_lo, petski_position_hi
|
||||
Mult_16 petski_position_lo, petski_position_hi
|
||||
;; 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
|
||||
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
|
||||
;; *8
|
||||
Mult_16 X_pos_offset, X_pos_offset + 1
|
||||
Mult_16 X_pos_offset, X_pos_offset + 1
|
||||
Mult_16 X_pos_offset, X_pos_offset + 1
|
||||
Mult_16 X_pos_offset_lo, X_pos_offset_hi
|
||||
Mult_16 X_pos_offset_lo, X_pos_offset_hi
|
||||
Mult_16 X_pos_offset_lo, X_pos_offset_hi
|
||||
;; Add
|
||||
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
|
||||
LDA Y_pos
|
||||
STA X_pos
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Add_16 Y_pos_offset, Y_pos_offset + 1, X_pos, #$00, !
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
Add_16 Y_pos_offset_lo, Y_pos_offset_hi, X_pos, #$00, !
|
||||
;; *2^6
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Mult_16 Y_pos_offset, Y_pos_offset + 1
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
Mult_16 Y_pos_offset_lo, Y_pos_offset_hi
|
||||
;; 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:
|
||||
|
||||
|
||||
;; One character is 8 byte, move these bytes to screen
|
||||
LDY #$07
|
||||
@loop:
|
||||
LDA (petski_position), Y
|
||||
LDA (petski_position_lo), Y
|
||||
STA (screen_position), Y
|
||||
DEY
|
||||
BNE @loop
|
||||
LDA (petski_position), Y
|
||||
LDA (petski_position_lo), Y
|
||||
STA (screen_position), Y
|
||||
RTS
|
||||
.endproc
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
.include "char.inc"
|
||||
LDA #$10
|
||||
STA code
|
||||
LDA #$10
|
||||
LDA #04
|
||||
STA X_pos
|
||||
LDA #02
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
;;Code to run
|
||||
.include "STARTUP.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/triangle/triangle_test.s"
|
||||
exit:
|
||||
|
@ -16,6 +17,7 @@ JMP exit
|
|||
.include "routines/line/line.s"
|
||||
.include "routines/triangle/triangle.s"
|
||||
.include "routines/pixel/pixel_draw.s"
|
||||
.include "routines/text/char_draw.s"
|
||||
.include "routines/memory/memset.s"
|
||||
.include "routines/memory/memcpy.s"
|
||||
.include "END.s"
|
||||
|
|
Loading…
Add table
Reference in a new issue