Restore ZP saving, add initialization of ZP, remove BASIC stub

This commit is contained in:
hkz 2025-07-28 17:37:26 +02:00
commit 3bbaae64d5
5 changed files with 32 additions and 11 deletions

View file

@ -11,6 +11,7 @@
#include "game_graphics.h"
#include "monitor_subroutines.h"
#pragma require __preserve_zp
// Make sure the loading screen is included
#pragma require __loading_screen

12
src/preserve_zero_pages.s Normal file
View file

@ -0,0 +1,12 @@
.rtmodel version, "1"
.rtmodel core, "*"
;; External declarations
.section registers ; pseudo registers in zero page
.section zpsave, noinit
.pubweak __preserve_zp
__preserve_zp: ; This symbol meant to be required
.space 256
.require __preserve_zp_needed
.require __restore_zp_needed

View file

@ -7,6 +7,7 @@
.section heap
.section data_init_table
.section registers ; pseudo registers in zero page
.section zpsave ; this is where pseudo registers are saved
.extern main, exit, __low_level_init
.extern _Zp, _Vsp, _Vfp
@ -19,14 +20,23 @@ call: .macro dest
.section programStart, root
__program_root_section:
.word nextLine
.byte 0x0a, 0x00 ; 10
.byte 0x8c, 0x32, 0x30, 0x36, 0x32, 0x00 ; CALL 2062
nextLine: .byte 0x00, 0x00 ; end of program
jmp __program_start
.section startup, root, noreorder
__program_start:
.section startup, noreorder
.pubweak __preserve_zp_needed
__preserve_zp_needed:
ldx #.sectionSize registers - 1
- lda zp:.sectionStart registers,x
sta .sectionStart zpsave,x
dex
bpl -
.section startup, root, noreorder
lda #.byte0(.sectionEnd cstack)
sta zp:_Vsp
lda #.byte1(.sectionEnd cstack)
sta zp:_Vsp+1
jsr __low_level_init
;;; Initialize data sections if needed.