Partialy implement text writing

This commit is contained in:
hugova 2025-03-28 20:35:58 +01:00
parent eb7b195cd2
commit 1d4efe6725
4 changed files with 60 additions and 41 deletions

View file

@ -21,6 +21,8 @@ Bitmap_end = $5F3F
Screen_RAM = $2000 + VIC_bank
Screen_RAM_end = Screen_RAM + $03E7
Character_generator_ROM = $D000
;;Free upp memory
;;https://www.c64-wiki.com/wiki/Bank_Switching
;;

View file

@ -1,20 +0,0 @@
FEATURES {
STARTADDRESS: default = $0400;
}
SYMBOLS {
__LOADADDR__: type = import;
}
MEMORY {
ZP: file = "", start = $0002, size = $00FE, define = yes;
LOADADDR: file = %O, start = %S - 2, size = $0002;
MAIN: file = %O, start = %S, size = $D000 - %S;
}
SEGMENTS {
ZEROPAGE: load = ZP, type = zp, optional = yes;
LOADADDR: load = LOADADDR, type = ro;
EXEHDR: load = MAIN, type = ro, optional = yes;
CODE: load = MAIN, type = rw;
RODATA: load = MAIN, type = ro, optional = yes;
DATA: load = MAIN, type = rw, optional = yes;
BSS: load = MAIN, type = bss, optional = yes, define = yes;
}

View file

@ -37,6 +37,18 @@
STA hi
.endmacro
.macro Add_16_A a_low, a_hi, b_hi, fast_unsafe
;; IF to run it fast
.ifblank fast_unsafe
CLC
.endif
ADC a_low
STA a_low
LDA b_hi
ADC a_hi
STA a_hi
.endmacro
;; Subtraction uses the A register
;; a = a - b
.macro Sub_16 a_low, a_hi, b_low, b_hi, fast_unsafe
@ -101,17 +113,6 @@
LABEL:
.endmacro
;.macro Lag_16y a_hi, b_hi,b_low, label
; LDA a_hi
; CMP b_hi
; BCC label
; BNE LABEL
; ;LDA a_low
; CPY b_low
; BCC label
; LABEL:
;.endmacro
.macro Lag_16y a_low, a_hi, b_hi, label
LDA a_hi
CMP b_hi

View file

@ -1,17 +1,53 @@
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
;; petski: https://www.c64-wiki.com/wiki/File:ASCII-Codes.gif
;; d000
;;https://www.c64-wiki.com/wiki/Character_set
;; Takes in a PETSKI-code in CODE
;; And prints it ON X_pos, Y_pos
;; Note that this is the real positions divided by 8
.proc text
;; TESTING OF MEMCPY TEMPERARLY HERE BECAUSE IT WILL USE THAT :)
A_start = $FAFB
B_start = $FCFD
B_end = $FEFF
X_pos = $FA
Y_pos = $F9
charset = $FB
code = $FE
petski_position = $FEFF ;reuses code:s memory
screen_position = $FCFD
Mov_16 >B_start, <B_start, #<$D000, #>$D000
Mov_16 >B_end, <B_end, #<($D000+$1F3F), #>($D000 +$1F3F)
;#### TEMP INIT DATA ####
LDA #$10
STA code
LDA #$10
STA X_pos
STA Y_pos
Mov_16 >A_start, <A_start, #<VIC_bank, #>VIC_bank
;Mov_16 >A_end, >A_end, #<(VIC_bank+100), #>(VIC_bank +100)
JSR memcpy
;We first need to clear some memory
LDA #$00
STA <petski_position
;;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
ASL code ;Will never owerflow 8byte
LDY code
mult_16 >petski_position, <petski_position ; May overflow 8byte (therefore using 16)
mult_16 >petski_position, <petski_position ; May overflow 8byte (therefore using 16)
;TYA
;Add_16_A >petski_position, <petski_position, #$00
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
;; One character is 8 byte, move these bytes to screen
LDY #$07
@loop:
LDA (>petski_position), Y
STA (>screen_position), Y
DEY
BNE @loop
hihi:
LDA (>petski_position), Y
STA (>screen_position), Y
jmp hihi
RTS
.endproc