From: mrdudz Date: Sat, 19 Sep 2015 13:55:43 +0000 (+0200) Subject: added interruptor support X-Git-Tag: V2.16~231^2~1 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=296489ba6cf76c38e242bd601e18f31495cf65f1;p=cc65 added interruptor support --- diff --git a/cfg/pce.cfg b/cfg/pce.cfg index 2c660435a..9128eb727 100644 --- a/cfg/pce.cfg +++ b/cfg/pce.cfg @@ -38,10 +38,9 @@ FEATURES { label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; -# FIXME: interruptor support is missing -# CONDES: type = interruptor, -# label = __INTERRUPTOR_TABLE__, -# count = __INTERRUPTOR_COUNT__, -# segment = RODATA, -# import = __CALLIRQ__; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; } diff --git a/libsrc/pce/clock.s b/libsrc/pce/clock.s index d92ebe89f..c6d6fb7fb 100644 --- a/libsrc/pce/clock.s +++ b/libsrc/pce/clock.s @@ -5,6 +5,7 @@ .include "pce.inc" .include "extzp.inc" + .forceimport ticktock .export _clock .importzp sreg diff --git a/libsrc/pce/crt0.s b/libsrc/pce/crt0.s index 4f886ca5a..77872f32f 100644 --- a/libsrc/pce/crt0.s +++ b/libsrc/pce/crt0.s @@ -13,7 +13,7 @@ .import initlib, donelib .import push0, _main, zerobss .import initheap - .import tmp1,tmp2,tmp3 + .import IRQStub ; Linker generated .import __RAM_START__, __RAM_SIZE__ @@ -30,6 +30,7 @@ .importzp sp .importzp ptr1,ptr2 + .importzp tmp1,tmp2,tmp3 ; ------------------------------------------------------------------------ ; Place the startup code in a special segment. @@ -158,39 +159,8 @@ _exit: ; reset the PCEngine (start over) jmp start -; ------------------------------------------------------------------------ -; System V-Blank Interupt -; FIXME: hooks should be provided so the user can abuse the IRQ -; ------------------------------------------------------------------------ - -_irq1: - pha - phx - phy - - ; increment the system tick counter - inc tickcount - bne @s1 - inc tickcount + 1 - bne @s1 - inc tickcount + 2 - bne @s1 - inc tickcount + 3 -@s1: - ; Acknowlege interrupt - lda a:VDC_CTRL - - ply - plx - pla - rti -_irq2: - rti _nmi: rti -_timer: - stz IRQ_STATUS - rti .export initmainargs initmainargs: @@ -201,8 +171,8 @@ initmainargs: ; ------------------------------------------------------------------------ .segment "VECTORS" - .word _irq2 ; $fff6 IRQ2 (External IRQ, BRK) - .word _irq1 ; $fff8 IRQ1 (VDC) - .word _timer ; $fffa Timer + .word IRQStub ; $fff6 IRQ2 (External IRQ, BRK) + .word IRQStub ; $fff8 IRQ1 (VDC) + .word IRQStub ; $fffa Timer .word _nmi ; $fffc NMI .word start ; $fffe reset diff --git a/libsrc/pce/extzp.inc b/libsrc/pce/extzp.inc index 2869c3a06..dce91558f 100644 --- a/libsrc/pce/extzp.inc +++ b/libsrc/pce/extzp.inc @@ -15,3 +15,4 @@ .global RVS: zp .global BGCOLOR: zp .global tickcount: zp + .global vdc_flags: zp diff --git a/libsrc/pce/extzp.s b/libsrc/pce/extzp.s index 516c30954..26dc589b1 100644 --- a/libsrc/pce/extzp.s +++ b/libsrc/pce/extzp.s @@ -15,3 +15,4 @@ CHARCOLOR: .res 1 RVS: .res 1 BGCOLOR: .res 1 tickcount: .res 4 +vdc_flags: .res 1 diff --git a/libsrc/pce/irq.s b/libsrc/pce/irq.s new file mode 100644 index 000000000..f34303d07 --- /dev/null +++ b/libsrc/pce/irq.s @@ -0,0 +1,48 @@ +; +; IRQ handling (PCE version) +; + + .export initirq, doneirq, IRQStub + + .import __INTERRUPTOR_COUNT__, callirq_y + + .include "pce.inc" + .include "extzp.inc" + +; ------------------------------------------------------------------------ +.segment "INIT" + +; a constructor +; +initirq: + rts + +; ------------------------------------------------------------------------ +.code + +; a destructor +; +doneirq: + rts + +; ------------------------------------------------------------------------ + +IRQStub: + phy + +; Save the display-source flags (and, release the interrupt). +; + ldy a:VDC_CTRL + sty vdc_flags + + ldy #<(__INTERRUPTOR_COUNT__ * 2) + beq @L1 + phx + pha + + jsr callirq_y + + pla + plx +@L1: ply + rti diff --git a/libsrc/pce/ticktock.s b/libsrc/pce/ticktock.s new file mode 100644 index 000000000..4e4d44d9a --- /dev/null +++ b/libsrc/pce/ticktock.s @@ -0,0 +1,18 @@ + .interruptor ticktock, 24 + + .include "pce.inc" + .include "extzp.inc" + +ticktock: + bbr5 vdc_flags,@s1 ; not vertical-blank interrupt + + ; Increment the system tick counter. + inc tickcount + bne @s1 + inc tickcount+1 + bne @s1 + inc tickcount+2 + bne @s1 + inc tickcount+3 + +@s1: rts diff --git a/libsrc/pce/waitvblank.s b/libsrc/pce/waitvblank.s index d60a9ddea..b9f0f902f 100644 --- a/libsrc/pce/waitvblank.s +++ b/libsrc/pce/waitvblank.s @@ -5,6 +5,7 @@ .include "pce.inc" .include "extzp.inc" + .forceimport ticktock .export _waitvblank .proc _waitvblank