From a83e9d9a0a28231389a2b8f9622546342bb02fdc Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Tue, 21 Nov 2023 21:31:50 +0100 Subject: [PATCH] added sys.save_prog8_internals() and restore_prog8_internals() --- compiler/res/prog8lib/atari/syslib.p8 | 40 +++++++ compiler/res/prog8lib/c128/syslib.p8 | 136 +++++++++++++----------- compiler/res/prog8lib/c64/syslib.p8 | 136 +++++++++++++----------- compiler/res/prog8lib/cx16/syslib.p8 | 125 +++++++++++----------- compiler/res/prog8lib/pet32/syslib.p8 | 40 +++++++ compiler/res/prog8lib/virtual/syslib.p8 | 8 ++ docs/source/libraries.rst | 5 + docs/source/programming.rst | 5 +- docs/source/targetsystem.rst | 4 +- examples/test.p8 | 10 +- 10 files changed, 309 insertions(+), 200 deletions(-) diff --git a/compiler/res/prog8lib/atari/syslib.p8 b/compiler/res/prog8lib/atari/syslib.p8 index 4b16df4bd..e0fce6c31 100644 --- a/compiler/res/prog8lib/atari/syslib.p8 +++ b/compiler/res/prog8lib/atari/syslib.p8 @@ -213,6 +213,46 @@ _longcopy ; no-op } + asmsub save_prog8_internals() { + %asm {{ + lda P8ZP_SCRATCH_B1 + sta save_SCRATCH_ZPB1 + lda P8ZP_SCRATCH_REG + sta save_SCRATCH_ZPREG + lda P8ZP_SCRATCH_W1 + sta save_SCRATCH_ZPWORD1 + lda P8ZP_SCRATCH_W1+1 + sta save_SCRATCH_ZPWORD1+1 + lda P8ZP_SCRATCH_W2 + sta save_SCRATCH_ZPWORD2 + lda P8ZP_SCRATCH_W2+1 + sta save_SCRATCH_ZPWORD2+1 + rts +save_SCRATCH_ZPB1 .byte 0 +save_SCRATCH_ZPREG .byte 0 +save_SCRATCH_ZPWORD1 .word 0 +save_SCRATCH_ZPWORD2 .word 0 + }} + } + + asmsub restore_prog8_internals() { + %asm {{ + lda save_prog8_internals.save_SCRATCH_ZPB1 + sta P8ZP_SCRATCH_B1 + lda save_prog8_internals.save_SCRATCH_ZPREG + sta P8ZP_SCRATCH_REG + lda save_prog8_internals.save_SCRATCH_ZPWORD1 + sta P8ZP_SCRATCH_W1 + lda save_prog8_internals.save_SCRATCH_ZPWORD1+1 + sta P8ZP_SCRATCH_W1+1 + lda save_prog8_internals.save_SCRATCH_ZPWORD2 + sta P8ZP_SCRATCH_W2 + lda save_prog8_internals.save_SCRATCH_ZPWORD2+1 + sta P8ZP_SCRATCH_W2+1 + rts + }} + } + inline asmsub exit(ubyte returnvalue @A) { ; -- immediately exit the program with a return code in the A register ; TODO diff --git a/compiler/res/prog8lib/c128/syslib.p8 b/compiler/res/prog8lib/c128/syslib.p8 index f9f97539b..9a983d6ef 100644 --- a/compiler/res/prog8lib/c128/syslib.p8 +++ b/compiler/res/prog8lib/c128/syslib.p8 @@ -391,13 +391,53 @@ asmsub enable_runstop_and_charsetswitch() clobbers(A) { }} } + asmsub save_prog8_internals() { + %asm {{ + lda P8ZP_SCRATCH_B1 + sta save_SCRATCH_ZPB1 + lda P8ZP_SCRATCH_REG + sta save_SCRATCH_ZPREG + lda P8ZP_SCRATCH_W1 + sta save_SCRATCH_ZPWORD1 + lda P8ZP_SCRATCH_W1+1 + sta save_SCRATCH_ZPWORD1+1 + lda P8ZP_SCRATCH_W2 + sta save_SCRATCH_ZPWORD2 + lda P8ZP_SCRATCH_W2+1 + sta save_SCRATCH_ZPWORD2+1 + rts +save_SCRATCH_ZPB1 .byte 0 +save_SCRATCH_ZPREG .byte 0 +save_SCRATCH_ZPWORD1 .word 0 +save_SCRATCH_ZPWORD2 .word 0 + }} + } + + asmsub restore_prog8_internals() { + %asm {{ + lda save_prog8_internals.save_SCRATCH_ZPB1 + sta P8ZP_SCRATCH_B1 + lda save_prog8_internals.save_SCRATCH_ZPREG + sta P8ZP_SCRATCH_REG + lda save_prog8_internals.save_SCRATCH_ZPWORD1 + sta P8ZP_SCRATCH_W1 + lda save_prog8_internals.save_SCRATCH_ZPWORD1+1 + sta P8ZP_SCRATCH_W1+1 + lda save_prog8_internals.save_SCRATCH_ZPWORD2 + sta P8ZP_SCRATCH_W2 + lda save_prog8_internals.save_SCRATCH_ZPWORD2+1 + sta P8ZP_SCRATCH_W2+1 + rts + }} + } + asmsub set_irq(uword handler @AY, bool useKernal @Pc) clobbers(A) { %asm {{ - sta _modified+1 - sty _modified+2 - lda #0 - rol a - sta _use_kernal + sta _modified+1 + sty _modified+2 + lda #0 + rol a + sta _use_kernal sei lda #<_irq_handler sta cbm.CINV @@ -405,9 +445,12 @@ asmsub set_irq(uword handler @AY, bool useKernal @Pc) clobbers(A) { sta cbm.CINV+1 cli rts -_irq_handler jsr _irq_handler_init -_modified jsr $ffff ; modified - jsr _irq_handler_end +_irq_handler + jsr sys.save_prog8_internals + cld +_modified + jsr $ffff ; modified + jsr sys.restore_prog8_internals lda _use_kernal bne + lda #$ff @@ -423,45 +466,6 @@ _modified jsr $ffff ; modified + jmp cbm.IRQDFRT ; continue with normal kernal irq routine _use_kernal .byte 0 - -_irq_handler_init - ; save all zp scratch registers as these might be clobbered by the irq routine - lda P8ZP_SCRATCH_B1 - sta IRQ_SCRATCH_ZPB1 - lda P8ZP_SCRATCH_REG - sta IRQ_SCRATCH_ZPREG - lda P8ZP_SCRATCH_W1 - sta IRQ_SCRATCH_ZPWORD1 - lda P8ZP_SCRATCH_W1+1 - sta IRQ_SCRATCH_ZPWORD1+1 - lda P8ZP_SCRATCH_W2 - sta IRQ_SCRATCH_ZPWORD2 - lda P8ZP_SCRATCH_W2+1 - sta IRQ_SCRATCH_ZPWORD2+1 - cld - rts - -_irq_handler_end - ; restore all zp scratch registers - lda IRQ_SCRATCH_ZPB1 - sta P8ZP_SCRATCH_B1 - lda IRQ_SCRATCH_ZPREG - sta P8ZP_SCRATCH_REG - lda IRQ_SCRATCH_ZPWORD1 - sta P8ZP_SCRATCH_W1 - lda IRQ_SCRATCH_ZPWORD1+1 - sta P8ZP_SCRATCH_W1+1 - lda IRQ_SCRATCH_ZPWORD2 - sta P8ZP_SCRATCH_W2 - lda IRQ_SCRATCH_ZPWORD2+1 - sta P8ZP_SCRATCH_W2+1 - rts - -IRQ_SCRATCH_ZPB1 .byte 0 -IRQ_SCRATCH_ZPREG .byte 0 -IRQ_SCRATCH_ZPWORD1 .word 0 -IRQ_SCRATCH_ZPWORD2 .word 0 - }} } @@ -483,26 +487,28 @@ asmsub restore_irq() clobbers(A) { asmsub set_rasterirq(uword handler @AY, uword rasterpos @R0, bool useKernal @Pc) clobbers(A) { %asm {{ - sta _modified+1 - sty _modified+2 - lda #0 - rol a - sta set_irq._use_kernal - lda cx16.r0 - ldy cx16.r0+1 - sei - jsr _setup_raster_irq - lda #<_raster_irq_handler - sta cbm.CINV - lda #>_raster_irq_handler - sta cbm.CINV+1 - cli - rts + sta _modified+1 + sty _modified+2 + lda #0 + rol a + sta set_irq._use_kernal + lda cx16.r0 + ldy cx16.r0+1 + sei + jsr _setup_raster_irq + lda #<_raster_irq_handler + sta cbm.CINV + lda #>_raster_irq_handler + sta cbm.CINV+1 + cli + rts _raster_irq_handler - jsr set_irq._irq_handler_init -_modified jsr $ffff ; modified - jsr set_irq._irq_handler_end + jsr sys.save_prog8_internals + cld +_modified + jsr $ffff ; modified + jsr sys.restore_prog8_internals lda #$ff sta c64.VICIRQ ; acknowledge raster irq lda set_irq._use_kernal diff --git a/compiler/res/prog8lib/c64/syslib.p8 b/compiler/res/prog8lib/c64/syslib.p8 index 3cfa7ec86..6252db650 100644 --- a/compiler/res/prog8lib/c64/syslib.p8 +++ b/compiler/res/prog8lib/c64/syslib.p8 @@ -393,13 +393,53 @@ asmsub enable_runstop_and_charsetswitch() clobbers(A) { }} } + asmsub save_prog8_internals() { + %asm {{ + lda P8ZP_SCRATCH_B1 + sta save_SCRATCH_ZPB1 + lda P8ZP_SCRATCH_REG + sta save_SCRATCH_ZPREG + lda P8ZP_SCRATCH_W1 + sta save_SCRATCH_ZPWORD1 + lda P8ZP_SCRATCH_W1+1 + sta save_SCRATCH_ZPWORD1+1 + lda P8ZP_SCRATCH_W2 + sta save_SCRATCH_ZPWORD2 + lda P8ZP_SCRATCH_W2+1 + sta save_SCRATCH_ZPWORD2+1 + rts +save_SCRATCH_ZPB1 .byte 0 +save_SCRATCH_ZPREG .byte 0 +save_SCRATCH_ZPWORD1 .word 0 +save_SCRATCH_ZPWORD2 .word 0 + }} + } + + asmsub restore_prog8_internals() { + %asm {{ + lda save_prog8_internals.save_SCRATCH_ZPB1 + sta P8ZP_SCRATCH_B1 + lda save_prog8_internals.save_SCRATCH_ZPREG + sta P8ZP_SCRATCH_REG + lda save_prog8_internals.save_SCRATCH_ZPWORD1 + sta P8ZP_SCRATCH_W1 + lda save_prog8_internals.save_SCRATCH_ZPWORD1+1 + sta P8ZP_SCRATCH_W1+1 + lda save_prog8_internals.save_SCRATCH_ZPWORD2 + sta P8ZP_SCRATCH_W2 + lda save_prog8_internals.save_SCRATCH_ZPWORD2+1 + sta P8ZP_SCRATCH_W2+1 + rts + }} + } + asmsub set_irq(uword handler @AY, bool useKernal @Pc) clobbers(A) { %asm {{ - sta _modified+1 - sty _modified+2 - lda #0 - rol a - sta _use_kernal + sta _modified+1 + sty _modified+2 + lda #0 + rol a + sta _use_kernal sei lda #<_irq_handler sta cbm.CINV @@ -407,9 +447,12 @@ asmsub set_irq(uword handler @AY, bool useKernal @Pc) clobbers(A) { sta cbm.CINV+1 cli rts -_irq_handler jsr _irq_handler_init -_modified jsr $ffff ; modified - jsr _irq_handler_end +_irq_handler + jsr sys.save_prog8_internals + cld +_modified + jsr $ffff ; modified + jsr sys.restore_prog8_internals lda _use_kernal bne + lda #$ff @@ -425,45 +468,6 @@ _modified jsr $ffff ; modified + jmp cbm.IRQDFRT ; continue with normal kernal irq routine _use_kernal .byte 0 - -_irq_handler_init - ; save all zp scratch registers as these might be clobbered by the irq routine - lda P8ZP_SCRATCH_B1 - sta IRQ_SCRATCH_ZPB1 - lda P8ZP_SCRATCH_REG - sta IRQ_SCRATCH_ZPREG - lda P8ZP_SCRATCH_W1 - sta IRQ_SCRATCH_ZPWORD1 - lda P8ZP_SCRATCH_W1+1 - sta IRQ_SCRATCH_ZPWORD1+1 - lda P8ZP_SCRATCH_W2 - sta IRQ_SCRATCH_ZPWORD2 - lda P8ZP_SCRATCH_W2+1 - sta IRQ_SCRATCH_ZPWORD2+1 - cld - rts - -_irq_handler_end - ; restore all zp scratch registers - lda IRQ_SCRATCH_ZPB1 - sta P8ZP_SCRATCH_B1 - lda IRQ_SCRATCH_ZPREG - sta P8ZP_SCRATCH_REG - lda IRQ_SCRATCH_ZPWORD1 - sta P8ZP_SCRATCH_W1 - lda IRQ_SCRATCH_ZPWORD1+1 - sta P8ZP_SCRATCH_W1+1 - lda IRQ_SCRATCH_ZPWORD2 - sta P8ZP_SCRATCH_W2 - lda IRQ_SCRATCH_ZPWORD2+1 - sta P8ZP_SCRATCH_W2+1 - rts - -IRQ_SCRATCH_ZPB1 .byte 0 -IRQ_SCRATCH_ZPREG .byte 0 -IRQ_SCRATCH_ZPWORD1 .word 0 -IRQ_SCRATCH_ZPWORD2 .word 0 - }} } @@ -485,26 +489,28 @@ asmsub restore_irq() clobbers(A) { asmsub set_rasterirq(uword handler @AY, uword rasterpos @R0, bool useKernal @Pc) clobbers(A) { %asm {{ - sta _modified+1 - sty _modified+2 - lda #0 - rol a - sta set_irq._use_kernal - lda cx16.r0 - ldy cx16.r0+1 - sei - jsr _setup_raster_irq - lda #<_raster_irq_handler - sta cbm.CINV - lda #>_raster_irq_handler - sta cbm.CINV+1 - cli - rts + sta _modified+1 + sty _modified+2 + lda #0 + rol a + sta set_irq._use_kernal + lda cx16.r0 + ldy cx16.r0+1 + sei + jsr _setup_raster_irq + lda #<_raster_irq_handler + sta cbm.CINV + lda #>_raster_irq_handler + sta cbm.CINV+1 + cli + rts _raster_irq_handler - jsr set_irq._irq_handler_init -_modified jsr $ffff ; modified - jsr set_irq._irq_handler_end + jsr sys.save_prog8_internals + cld +_modified + jsr $ffff ; modified + jsr sys.restore_prog8_internals lda #$ff sta c64.VICIRQ ; acknowledge raster irq lda set_irq._use_kernal diff --git a/compiler/res/prog8lib/cx16/syslib.p8 b/compiler/res/prog8lib/cx16/syslib.p8 index 995a35d96..d79d4746e 100644 --- a/compiler/res/prog8lib/cx16/syslib.p8 +++ b/compiler/res/prog8lib/cx16/syslib.p8 @@ -932,25 +932,28 @@ asmsub cleanup_at_exit() { asmsub set_irq(uword handler @AY, bool useKernal @Pc) clobbers(A) { %asm {{ - sta _modified+1 - sty _modified+2 - lda #0 - rol a - sta _use_kernal - sei - lda #<_irq_handler - sta cx16.CINV - lda #>_irq_handler - sta cx16.CINV+1 - lda cx16.VERA_IEN - ora #%00000001 ; enable the vsync irq - sta cx16.VERA_IEN - cli - rts + sta _modified+1 + sty _modified+2 + lda #0 + rol a + sta _use_kernal + sei + lda #<_irq_handler + sta cx16.CINV + lda #>_irq_handler + sta cx16.CINV+1 + lda cx16.VERA_IEN + ora #%00000001 ; enable the vsync irq + sta cx16.VERA_IEN + cli + rts -_irq_handler jsr _irq_handler_init -_modified jsr $ffff ; modified - jsr _irq_handler_end +_irq_handler + jsr sys.save_prog8_internals + cld +_modified + jsr $ffff ; modified + jsr sys.restore_prog8_internals lda _use_kernal bne + ; end irq processing - don't use kernal's irq handling @@ -963,45 +966,6 @@ _modified jsr $ffff ; modified + jmp (restore_irq._orig_irqvec) ; continue with normal kernal irq routine _use_kernal .byte 0 - -_irq_handler_init - ; save all zp scratch registers as these might be clobbered by the irq routine - lda P8ZP_SCRATCH_B1 - sta IRQ_SCRATCH_ZPB1 - lda P8ZP_SCRATCH_REG - sta IRQ_SCRATCH_ZPREG - lda P8ZP_SCRATCH_W1 - sta IRQ_SCRATCH_ZPWORD1 - lda P8ZP_SCRATCH_W1+1 - sta IRQ_SCRATCH_ZPWORD1+1 - lda P8ZP_SCRATCH_W2 - sta IRQ_SCRATCH_ZPWORD2 - lda P8ZP_SCRATCH_W2+1 - sta IRQ_SCRATCH_ZPWORD2+1 - cld - rts - -_irq_handler_end - ; restore all zp scratch registers - lda IRQ_SCRATCH_ZPB1 - sta P8ZP_SCRATCH_B1 - lda IRQ_SCRATCH_ZPREG - sta P8ZP_SCRATCH_REG - lda IRQ_SCRATCH_ZPWORD1 - sta P8ZP_SCRATCH_W1 - lda IRQ_SCRATCH_ZPWORD1+1 - sta P8ZP_SCRATCH_W1+1 - lda IRQ_SCRATCH_ZPWORD2 - sta P8ZP_SCRATCH_W2 - lda IRQ_SCRATCH_ZPWORD2+1 - sta P8ZP_SCRATCH_W2+1 - rts - -IRQ_SCRATCH_ZPB1 .byte 0 -IRQ_SCRATCH_ZPREG .byte 0 -IRQ_SCRATCH_ZPWORD1 .word 0 -IRQ_SCRATCH_ZPWORD2 .word 0 - }} } @@ -1044,9 +1008,10 @@ asmsub set_rasterirq(uword handler @AY, uword rasterpos @R0) clobbers(A) { rts _raster_irq_handler - jsr set_irq._irq_handler_init -_modified jsr $ffff ; modified - jsr set_irq._irq_handler_end + jsr sys.save_prog8_internals + cld +_modified jsr $ffff ; modified + jsr sys.restore_prog8_internals ; end irq processing - don't use kernal's irq handling lda cx16.VERA_ISR ora #%00000010 @@ -1283,6 +1248,46 @@ _longcopy }} } + asmsub save_prog8_internals() { + %asm {{ + lda P8ZP_SCRATCH_B1 + sta save_SCRATCH_ZPB1 + lda P8ZP_SCRATCH_REG + sta save_SCRATCH_ZPREG + lda P8ZP_SCRATCH_W1 + sta save_SCRATCH_ZPWORD1 + lda P8ZP_SCRATCH_W1+1 + sta save_SCRATCH_ZPWORD1+1 + lda P8ZP_SCRATCH_W2 + sta save_SCRATCH_ZPWORD2 + lda P8ZP_SCRATCH_W2+1 + sta save_SCRATCH_ZPWORD2+1 + rts +save_SCRATCH_ZPB1 .byte 0 +save_SCRATCH_ZPREG .byte 0 +save_SCRATCH_ZPWORD1 .word 0 +save_SCRATCH_ZPWORD2 .word 0 + }} + } + + asmsub restore_prog8_internals() { + %asm {{ + lda save_prog8_internals.save_SCRATCH_ZPB1 + sta P8ZP_SCRATCH_B1 + lda save_prog8_internals.save_SCRATCH_ZPREG + sta P8ZP_SCRATCH_REG + lda save_prog8_internals.save_SCRATCH_ZPWORD1 + sta P8ZP_SCRATCH_W1 + lda save_prog8_internals.save_SCRATCH_ZPWORD1+1 + sta P8ZP_SCRATCH_W1+1 + lda save_prog8_internals.save_SCRATCH_ZPWORD2 + sta P8ZP_SCRATCH_W2 + lda save_prog8_internals.save_SCRATCH_ZPWORD2+1 + sta P8ZP_SCRATCH_W2+1 + rts + }} + } + inline asmsub exit(ubyte returnvalue @A) { ; -- immediately exit the program with a return code in the A register %asm {{ diff --git a/compiler/res/prog8lib/pet32/syslib.p8 b/compiler/res/prog8lib/pet32/syslib.p8 index 21026c19a..2049a10ea 100644 --- a/compiler/res/prog8lib/pet32/syslib.p8 +++ b/compiler/res/prog8lib/pet32/syslib.p8 @@ -305,6 +305,46 @@ _longcopy ; PET doesn't have a key to swap case, so no-op } + asmsub save_prog8_internals() { + %asm {{ + lda P8ZP_SCRATCH_B1 + sta save_SCRATCH_ZPB1 + lda P8ZP_SCRATCH_REG + sta save_SCRATCH_ZPREG + lda P8ZP_SCRATCH_W1 + sta save_SCRATCH_ZPWORD1 + lda P8ZP_SCRATCH_W1+1 + sta save_SCRATCH_ZPWORD1+1 + lda P8ZP_SCRATCH_W2 + sta save_SCRATCH_ZPWORD2 + lda P8ZP_SCRATCH_W2+1 + sta save_SCRATCH_ZPWORD2+1 + rts +save_SCRATCH_ZPB1 .byte 0 +save_SCRATCH_ZPREG .byte 0 +save_SCRATCH_ZPWORD1 .word 0 +save_SCRATCH_ZPWORD2 .word 0 + }} + } + + asmsub restore_prog8_internals() { + %asm {{ + lda save_prog8_internals.save_SCRATCH_ZPB1 + sta P8ZP_SCRATCH_B1 + lda save_prog8_internals.save_SCRATCH_ZPREG + sta P8ZP_SCRATCH_REG + lda save_prog8_internals.save_SCRATCH_ZPWORD1 + sta P8ZP_SCRATCH_W1 + lda save_prog8_internals.save_SCRATCH_ZPWORD1+1 + sta P8ZP_SCRATCH_W1+1 + lda save_prog8_internals.save_SCRATCH_ZPWORD2 + sta P8ZP_SCRATCH_W2 + lda save_prog8_internals.save_SCRATCH_ZPWORD2+1 + sta P8ZP_SCRATCH_W2+1 + rts + }} + } + inline asmsub exit(ubyte returnvalue @A) { ; -- immediately exit the program with a return code in the A register %asm {{ diff --git a/compiler/res/prog8lib/virtual/syslib.p8 b/compiler/res/prog8lib/virtual/syslib.p8 index 03837faa3..1c4b3ca84 100644 --- a/compiler/res/prog8lib/virtual/syslib.p8 +++ b/compiler/res/prog8lib/virtual/syslib.p8 @@ -87,6 +87,14 @@ sys { ; no-op } + sub save_prog8_internals() { + ; no-op + } + + sub restore_prog8_internals() { + ; no-op + } + sub gfx_enable(ubyte mode) { %ir {{ loadm.b r65535,sys.gfx_enable.mode diff --git a/docs/source/libraries.rst b/docs/source/libraries.rst index e917a92d8..300ffab2a 100644 --- a/docs/source/libraries.rst +++ b/docs/source/libraries.rst @@ -135,6 +135,11 @@ sys (part of syslib) ``disable_caseswitch()`` and ``enable_caseswitch()`` Disable or enable the ability to switch character set case using a keyboard combination. +``save_prog8_internals()`` and ``restore_prog8_internals()`` + Normally not used in user code, the compiler utilizes these for the internal interrupt logic. + It stores and restores the values of the internal prog8 variables. + This allows other code to run that might clobber these values temporarily. + conv ---- diff --git a/docs/source/programming.rst b/docs/source/programming.rst index 27fafeabd..735ed7edb 100644 --- a/docs/source/programming.rst +++ b/docs/source/programming.rst @@ -772,7 +772,7 @@ Math ^^^^ abs (x) - Returns the absolute value of a number. + Returns the absolute value of a number (integer or floating point). min (x, y) Returns the smallest of x and y. Supported for integer types only, for floats use ``floats.minf()`` instead. @@ -785,7 +785,8 @@ clamp (value, minimum, maximum) Supported for integer types only, for floats use ``floats.clampf()`` instead. sgn (x) - Get the sign of the value. Result is -1, 0 or 1 (negative, zero, positive). + Get the sign of the value (integer or floating point). + The result is a byte: -1, 0 or 1 (negative, zero, positive). sqrt (w) Returns the square root of the number. diff --git a/docs/source/targetsystem.rst b/docs/source/targetsystem.rst index 152cd80e1..47ed45290 100644 --- a/docs/source/targetsystem.rst +++ b/docs/source/targetsystem.rst @@ -142,10 +142,12 @@ There are a few library routines available to make setting up C64 60hz IRQs and These routines are:: - sys.set_irq(uword handler_address, boolean useKernal) + sys.set_irq(uword handler_address, bool useKernal) sys.set_rasterirq(uword handler_address, uword rasterline, boolean useKernal) sys.restore_irq() ; set everything back to the systems default irq handler +**CommanderX16 specific notes** + Note that for the CommanderX16 the "useKernal" parameter doesn't exists for the set_rasterirq() routine; it will always disable the system IRQ handler (which also means the default sys.wait() routine won't work anymore) diff --git a/examples/test.p8 b/examples/test.p8 index 133cfcf67..3cb13a50a 100644 --- a/examples/test.p8 +++ b/examples/test.p8 @@ -3,12 +3,8 @@ main { sub start() { - %asm{{ - jsr p8_test - }} - } - - sub test() { - cx16.r0++ + sys.save_prog8_internals() + txt.print("ok\n") + sys.restore_prog8_internals() } }