From 128991d868f94d471540a3964b682d902073460d Mon Sep 17 00:00:00 2001 From: "Curt J. Sampson" Date: Thu, 24 Oct 2019 13:46:41 +0900 Subject: [PATCH 080/170] libsrc/*/kplot.s: Use cbm_kernal.inc symbols, not hardcoded addrs On C64, VIC-20 and Plus/4, the conio library PLOT routine uses direct calls into the Kernal, including the Kernal PLOT routine that we're replacing. These were previously hardcoded addresses; we change these to use the symbols for those routines defined in cbm_kernal.inc. (This changes no functionality.) To do this, we need to import cbm_kernal.inc in a namespace so we don't have a collision between the PLOT that we're defining and the Kernal definition. We also add a UPDCRAMPTR symbol (used by kplot for VIC-20 and C64) to the direct entry kernal routines in in cbm_kernal.inc, and expand the comments describing what the "direct entry" Kernal routines are. (GitHub: greg-king5) came up with this idea and did initial testing of it. This has been tested on VICE xvic, x64 and xplus4 emulators with a program that does a cputs() call (github.com/0cjs/vic20cc65) to confirm that it works the same way after as it did before. --- asminc/cbm_kernal.inc | 12 ++++++++++++ libsrc/c64/kplot.s | 11 ++++++----- libsrc/plus4/kplot.s | 9 +++++---- libsrc/vic20/kplot.s | 10 ++++++---- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index 79edce06..6e1e1604 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -100,14 +100,26 @@ UDTIM := $FFEA ; --------------------------------------------------------------------------- ; Kernal routines, direct entries +; +; Unlike the above, these are not standard functions with entries in the jump +; table. They do not exist in all Kernals, and where they do the entry point is +; specific to that particular machine and possibly even Kernal version. +; +; This list is not comprehensive: missing items for particular machines +; should be added as needed. +; +; UPDCRAMPTR: Updates the color RAM pointer to match the screen RAM pointer. +; .if .def(__VIC20__) CLRSCR := $E55F KBDREAD := $E5CF + UPDCRAMPTR := $EAB2 .elseif .def(__C64__) CLRSCR := $E544 KBDREAD := $E5B4 NMIEXIT := $FEBC + UPDCRAMPTR := $EA24 .elseif .def(__C128__) CLRSCR := $C142 KBDREAD := $C006 diff --git a/libsrc/c64/kplot.s b/libsrc/c64/kplot.s index 2d60fd4a..856bd148 100644 --- a/libsrc/c64/kplot.s +++ b/libsrc/c64/kplot.s @@ -7,15 +7,16 @@ .export PLOT +.scope KERNAL + .include "cbm_kernal.inc" +.endscope .proc PLOT bcs @L1 - jsr $FFF0 ; Set cursor position - jmp $EA24 ; Set pointer to color RAM + jsr KERNAL::PLOT ; Set cursor position using original ROM PLOT + jmp KERNAL::UPDCRAMPTR ; Set pointer to color RAM to match new cursor position -@L1: jmp $FFF0 ; Get cursor position +@L1: jmp KERNAL::PLOT ; Get cursor position .endproc - - diff --git a/libsrc/plus4/kplot.s b/libsrc/plus4/kplot.s index 7035b05d..7883c28a 100644 --- a/libsrc/plus4/kplot.s +++ b/libsrc/plus4/kplot.s @@ -6,16 +6,17 @@ .export PLOT +.scope KERNAL + .include "cbm_kernal.inc" +.endscope + .include "plus4.inc" .segment "LOWCODE" ; Must go into low memory .proc PLOT sta ENABLE_ROM ; Enable the ROM - jsr $FFF0 ; Call the ROM routine + jsr KERNAL::PLOT ; Call the ROM routine sta ENABLE_RAM ; Switch back to RAM rts ; Return to caller .endproc - - - diff --git a/libsrc/vic20/kplot.s b/libsrc/vic20/kplot.s index f37ed8fc..1a943d37 100644 --- a/libsrc/vic20/kplot.s +++ b/libsrc/vic20/kplot.s @@ -7,14 +7,16 @@ .export PLOT +.scope KERNAL + .include "cbm_kernal.inc" +.endscope .proc PLOT bcs @L1 - jsr $FFF0 ; Set cursor position - jmp $EAB2 ; Set pointer to color RAM + jsr KERNAL::PLOT ; Set cursor position using original ROM PLOT + jmp KERNAL::UPDCRAMPTR ; Set pointer to color RAM to match new cursor position -@L1: jmp $FFF0 ; Get cursor position +@L1: jmp KERNAL::PLOT ; Get cursor position .endproc - -- 2.26.0