Use the new declarations from the zeropage include file. In interrupt handlers

that call C code, we don't need to save the register bank, because the C code
will save it, when needed.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5909 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2012-11-04 15:23:05 +00:00
parent 673b982b22
commit dc4e898abd
5 changed files with 36 additions and 33 deletions

View file

@ -1,15 +1,16 @@
; ;
; _printf: Basic layer for all printf type functions. ; _printf: Basic layer for all printf type functions.
; ;
; Ullrich von Bassewitz, 21.10.2000 ; Ullrich von Bassewitz, 2000-10-21
; ;
.include "zeropage.inc"
.export __printf .export __printf
.import popax, pushax, pusheax, decsp6, push1, axlong, axulong .import popax, pushax, pusheax, decsp6, push1, axlong, axulong
.import _ltoa, _ultoa .import _ltoa, _ultoa
.import _strlower, _strlen .import _strlower, _strlen
.importzp sp, ptr1, ptr2, tmp1, regbank, sreg
.macpack generic .macpack generic
@ -750,7 +751,7 @@ HaveArg:
.bss .bss
; Save area for the zero page registers ; Save area for the zero page registers
RegSave: .res 6 RegSave: .res regbanksize
; One character argument for OutFunc ; One character argument for OutFunc
CharArg: .byte 0 CharArg: .byte 0

View file

@ -6,14 +6,31 @@
; ;
.export _set_irq, _reset_irq .export _set_irq, _reset_irq
.interruptor clevel_irq, 1 ; Export as low priority IRQ handler .interruptor clevel_irq, 1 ; Export as low priority IRQ handler
.import popax .import popax
.importzp __ZP_START__
.include "zeropage.inc" .include "zeropage.inc"
.macpack generic .macpack generic
; ---------------------------------------------------------------------------
.data
irqvec: jmp $00FF ; Patched at runtime
; ---------------------------------------------------------------------------
.bss
irqsp: .res 2
zpsave: .res zpsavespace
; ---------------------------------------------------------------------------
.proc _set_irq .proc _set_irq
; Keep clevel_irq from being called right now ; Keep clevel_irq from being called right now
@ -59,8 +76,8 @@
rts rts
; Save our zero page locations ; Save our zero page locations
@L1: ldx #zpspace-1 @L1: ldx #.sizeof(::zpsave)-1
@L2: lda sp,x @L2: lda __ZP_START__,x
sta zpsave,x sta zpsave,x
dex dex
bpl @L2 bpl @L2
@ -75,9 +92,9 @@
jsr irqvec jsr irqvec
; Copy back our zero page content ; Copy back our zero page content
ldx #zpspace-1 ldx #.sizeof(::zpsave)-1
@L3: ldy zpsave,x @L3: ldy zpsave,x
sty sp,x sty __ZP_START__,x
dex dex
bpl @L3 bpl @L3
@ -87,16 +104,3 @@
.endproc .endproc
; ---------------------------------------------------------------------------
.data
irqvec: jmp $00FF ; Patched at runtime
; ---------------------------------------------------------------------------
.bss
irqsp: .res 2
zpsave: .res zpspace

View file

@ -35,11 +35,11 @@
.include "o65.inc" .include "o65.inc"
.include "modload.inc" .include "modload.inc"
.include "zeropage.inc"
.import pushax, pusha0, push0, push1, decax1 .import pushax, pusha0, push0, push1, decax1
.import _malloc, _free, _bzero .import _malloc, _free, _bzero
.import __ZP_START__ ; Linker generated .import __ZP_START__ ; Linker generated
.importzp sp, ptr1, tmp1, regbank
.macpack generic .macpack generic
@ -58,7 +58,7 @@ TPtr = regbank+4 ; Pointer to module data for relocation
; Save areas and error recovery data ; Save areas and error recovery data
Stack: .byte 0 ; Old stackpointer Stack: .byte 0 ; Old stackpointer
RegBankSave: .res 6 ; Save area for register bank RegBankSave: .res regbanksize ; Save area for register bank
; The header of the o65 file. Since we don't need the first 8 bytes any ; The header of the o65 file. Since we don't need the first 8 bytes any
; longer, once we've checked them, we will overlay them with other data to ; longer, once we've checked them, we will overlay them with other data to

View file

@ -5,7 +5,7 @@
; ;
.export _DbgInit .export _DbgInit
.export _DbgSP, _DbgCS, _DbgHI .export _DbgSP, _DbgCS, _DbgHI
.import popax, return0, _DbgEntry, _set_brk, _end_brk .import popax, return0, _DbgEntry, _set_brk, _end_brk
.import _DbgBreaks .import _DbgBreaks
.import _brk_pc .import _brk_pc
@ -63,7 +63,8 @@ DbgStack:
CTemp: CTemp:
_DbgCS: .res 2 ; sp _DbgCS: .res 2 ; sp
_DbgHI: .res 2 ; sreg _DbgHI: .res 2 ; sreg
.res (zpspace-4) ; Other stuff .res (zpsavespace-4) ; Other stuff
_DbgSP: .res 1 _DbgSP: .res 1
retsav: .res 2 ; Save buffer for return address retsav: .res 2 ; Save buffer for return address
@ -72,7 +73,7 @@ retsav: .res 2 ; Save buffer for return address
; Swap the C temporaries ; Swap the C temporaries
DbgSwapZP: DbgSwapZP:
ldy #zpspace-1 ldy #zpsavespace-1
Swap1: ldx CTemp,y Swap1: ldx CTemp,y
lda <__ZP_START__,y lda <__ZP_START__,y
sta CTemp,y sta CTemp,y
@ -91,7 +92,7 @@ Swap1: ldx CTemp,y
; reset the breakpoints. See declaration of struct breakpoint in the C ; reset the breakpoints. See declaration of struct breakpoint in the C
; source ; source
MaxBreaks = 48 ; 4*12 MaxBreaks = 48 ; 4*12
ResetDbgBreaks: ResetDbgBreaks:
ldy #0 ldy #0

View file

@ -4,10 +4,7 @@
; CC65 runtime: zeropage usage ; CC65 runtime: zeropage usage
; ;
.exportzp sp, sreg, regsave .include "zeropage.inc"
.exportzp ptr1, ptr2, ptr3, ptr4
.exportzp tmp1, tmp2, tmp3, tmp4
.exportzp regbank
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
@ -15,7 +12,7 @@
sp: .res 2 ; Stack pointer sp: .res 2 ; Stack pointer
sreg: .res 2 ; Secondary register/high 16 bit for longs sreg: .res 2 ; Secondary register/high 16 bit for longs
regsave: .res 4 ; slot to save/restore (E)AX into regsave: .res 4 ; Slot to save/restore (E)AX into
ptr1: .res 2 ptr1: .res 2
ptr2: .res 2 ptr2: .res 2
ptr3: .res 2 ptr3: .res 2
@ -24,7 +21,7 @@ tmp1: .res 1
tmp2: .res 1 tmp2: .res 1
tmp3: .res 1 tmp3: .res 1
tmp4: .res 1 tmp4: .res 1
regbank: .res 6 ; 6 byte register bank regbank: .res regbanksize ; Register bank
; Add an empty EXTZP zeropage segment to avoid linker warnings that this ; Add an empty EXTZP zeropage segment to avoid linker warnings that this
; segment does not exist (it does not exist in most builtin linker configs ; segment does not exist (it does not exist in most builtin linker configs