From c7a33334ba4cec0ccd3ca2bd37168978f0078621 Mon Sep 17 00:00:00 2001 From: uz Date: Mon, 23 Nov 2009 12:01:24 +0000 Subject: [PATCH] Don't hardcode the address of the SYS call for the startup code of the Commodore machines. git-svn-id: svn://svn.cc65.org/cc65/trunk@4474 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/c128/crt0.s | 32 ++++++++++++++++++-------------- libsrc/c16/crt0.s | 8 ++++++-- libsrc/c64/crt0.s | 8 ++++++-- libsrc/pet/crt0.s | 8 ++++++-- libsrc/plus4/crt0.s | 8 ++++++-- libsrc/vic20/crt0.s | 11 +++++------ 6 files changed, 47 insertions(+), 28 deletions(-) diff --git a/libsrc/c128/crt0.s b/libsrc/c128/crt0.s index d0a61ab00..a9fd8e6d1 100644 --- a/libsrc/c128/crt0.s +++ b/libsrc/c128/crt0.s @@ -28,52 +28,56 @@ IRQInd = $2FD ; JMP $0000 - used as indirect IRQ vector ; BASIC header with a SYS call - .org $1BFF + .org $1BFF .word Head ; Load address Head: .word @Next .word .version ; Line number - .byte $9E,"7181" ; SYS 7181 + .byte $9E ; SYS token + .byte <(((Start / 1000) .mod 10) + $30) + .byte <(((Start / 100) .mod 10) + $30) + .byte <(((Start / 10) .mod 10) + $30) + .byte <(((Start / 1) .mod 10) + $30) .byte $00 ; End of BASIC line @Next: .word 0 ; BASIC end marker - .reloc + .reloc ; ------------------------------------------------------------------------ ; Actual code ; Close open files - jsr CLRCH +Start: jsr CLRCH ; Switch to the second charset - lda #14 - jsr BSOUT + lda #14 + jsr BSOUT ; Before doing anything else, we have to setup our banking configuration. ; Otherwise just the lowest 16K are actually RAM. Writing through the ROM ; to the underlying RAM works, but it is bad style. - lda MMU_CR ; Get current memory configuration... + lda MMU_CR ; Get current memory configuration... pha ; ...and save it for later lda #MMU_CFG_CC65 ; Bank0 with kernal ROM - sta MMU_CR + sta MMU_CR ; Save the zero page locations we need ldx #zpspace-1 -L1: lda sp,x - sta zpsave,x - dex +L1: lda sp,x + sta zpsave,x + dex bpl L1 ; Clear the BSS data - jsr zerobss + jsr zerobss ; Save system stuff and setup the stack - pla ; Get MMU setting - sta mmusave + pla ; Get MMU setting + sta mmusave tsx stx spsave ; Save the system stack pointer diff --git a/libsrc/c16/crt0.s b/libsrc/c16/crt0.s index 805d1c5ab..9ac67f8f3 100644 --- a/libsrc/c16/crt0.s +++ b/libsrc/c16/crt0.s @@ -26,14 +26,18 @@ .word Head ; Load address Head: .word @Next .word .version ; Line number - .byte $9E,"4109" ; SYS 4109 + .byte $9E ; SYS token + .byte <(((Start / 1000) .mod 10) + $30) + .byte <(((Start / 100) .mod 10) + $30) + .byte <(((Start / 10) .mod 10) + $30) + .byte <(((Start / 1) .mod 10) + $30) .byte $00 ; End of BASIC line @Next: .word 0 ; BASIC end marker ; ------------------------------------------------------------------------ ; Actual code - ldx #zpspace-1 +Start: ldx #zpspace-1 L1: lda sp,x sta zpsave,x ; save the zero page locations we need dex diff --git a/libsrc/c64/crt0.s b/libsrc/c64/crt0.s index 18ef10904..9f434ecbe 100644 --- a/libsrc/c64/crt0.s +++ b/libsrc/c64/crt0.s @@ -25,14 +25,18 @@ .word Head ; Load address Head: .word @Next .word .version ; Line number - .byte $9E,"2061" ; SYS 2061 + .byte $9E ; SYS token + .byte <(((Start / 1000) .mod 10) + $30) + .byte <(((Start / 100) .mod 10) + $30) + .byte <(((Start / 10) .mod 10) + $30) + .byte <(((Start / 1) .mod 10) + $30) .byte $00 ; End of BASIC line @Next: .word 0 ; BASIC end marker ; ------------------------------------------------------------------------ ; Actual code - ldx #zpspace-1 +Start: ldx #zpspace-1 L1: lda sp,x sta zpsave,x ; Save the zero page locations we need dex diff --git a/libsrc/pet/crt0.s b/libsrc/pet/crt0.s index 23ff90ea3..135147d36 100644 --- a/libsrc/pet/crt0.s +++ b/libsrc/pet/crt0.s @@ -24,14 +24,18 @@ .word Head ; Load address Head: .word @Next .word .version ; Line number - .byte $9E,"1037" ; SYS 1037 + .byte $9E ; SYS token + .byte <(((Start / 1000) .mod 10) + $30) + .byte <(((Start / 100) .mod 10) + $30) + .byte <(((Start / 10) .mod 10) + $30) + .byte <(((Start / 1) .mod 10) + $30) .byte $00 ; End of BASIC line @Next: .word 0 ; BASIC end marker ; ------------------------------------------------------------------------ ; Actual code - ldx #zpspace-1 +Start: ldx #zpspace-1 L1: lda sp,x sta zpsave,x ; Save the zero page locations we need dex diff --git a/libsrc/plus4/crt0.s b/libsrc/plus4/crt0.s index 9cf776a77..e5e2fd7bf 100644 --- a/libsrc/plus4/crt0.s +++ b/libsrc/plus4/crt0.s @@ -28,14 +28,18 @@ IRQInd = $500 ; JMP $0000 - used as indirect IRQ vector .word Head ; Load address Head: .word @Next .word .version ; Line number - .byte $9E,"4109" ; SYS 4109 + .byte $9E ; SYS token + .byte <(((Start / 1000) .mod 10) + $30) + .byte <(((Start / 100) .mod 10) + $30) + .byte <(((Start / 10) .mod 10) + $30) + .byte <(((Start / 1) .mod 10) + $30) .byte $00 ; End of BASIC line @Next: .word 0 ; BASIC end marker ; ------------------------------------------------------------------------ ; Actual code - sei ; No interrupts since we're banking out the ROM +Start: sei ; No interrupts since we're banking out the ROM sta ENABLE_RAM ldx #zpspace-1 L1: lda sp,x diff --git a/libsrc/vic20/crt0.s b/libsrc/vic20/crt0.s index a5d613865..559f22dff 100644 --- a/libsrc/vic20/crt0.s +++ b/libsrc/vic20/crt0.s @@ -25,18 +25,17 @@ Head: .word @Next .word .version ; Line number .byte $9E ; SYS token - .byte <(((@Start / 1000) .mod 10) + $30) - .byte <(((@Start / 100) .mod 10) + $30) - .byte <(((@Start / 10) .mod 10) + $30) - .byte <(((@Start / 1) .mod 10) + $30) + .byte <(((Start / 1000) .mod 10) + $30) + .byte <(((Start / 100) .mod 10) + $30) + .byte <(((Start / 10) .mod 10) + $30) + .byte <(((Start / 1) .mod 10) + $30) .byte $00 ; End of BASIC line @Next: .word 0 ; BASIC end marker -@Start: ; ------------------------------------------------------------------------ ; Actual code - ldx #zpspace-1 +Start: ldx #zpspace-1 L1: lda sp,x sta zpsave,x ; Save the zero page locations we need dex -- 2.39.5