From d0fb1fe0ae489c23ff753011575331be05fb25a3 Mon Sep 17 00:00:00 2001
From: Greg King <gregdk@users.sf.net>
Date: Sun, 25 Aug 2013 00:43:23 -0400
Subject: [PATCH] Added the model-specific addresses that the CBM exec() needs.

---
 asminc/c128.inc       |  1 +
 asminc/c64.inc        |  1 +
 asminc/cbm510.inc     | 20 ++++++++++++++------
 asminc/cbm610.inc     | 14 ++++++++++----
 asminc/pet.inc        |  4 ++++
 asminc/plus4.inc      |  1 +
 asminc/vic20.inc      |  1 +
 libsrc/cbm/execvars.s | 28 ++++++++++++++++++++++++++++
 libsrc/pet/mainargs.s |  1 -
 9 files changed, 60 insertions(+), 11 deletions(-)
 create mode 100644 libsrc/cbm/execvars.s

diff --git a/asminc/c128.inc b/asminc/c128.inc
index 1fb8b397c..aac8678bf 100644
--- a/asminc/c128.inc
+++ b/asminc/c128.inc
@@ -6,6 +6,7 @@
 ; ---------------------------------------------------------------------------
 ; Zero page, Commodore stuff
 
+TXTPTR          := $3D          ; Pointer into BASIC source code
 TIME            := $A0          ; 60HZ clock
 FNAM_LEN        := $B7          ; Length of filename
 SECADR          := $B9          ; Secondary address
diff --git a/asminc/c64.inc b/asminc/c64.inc
index f5dbcf549..f450fcc0b 100644
--- a/asminc/c64.inc
+++ b/asminc/c64.inc
@@ -6,6 +6,7 @@
 ; ---------------------------------------------------------------------------
 ; Zero page, Commodore stuff
 
+TXTPTR          := $7A          ; Pointer into BASIC source code
 TIME            := $A0          ; 60 HZ clock
 FNAM_LEN        := $B7          ; Length of filename
 SECADR          := $B9          ; Secondary address
diff --git a/asminc/cbm510.inc b/asminc/cbm510.inc
index 827c507fc..f031a1e35 100644
--- a/asminc/cbm510.inc
+++ b/asminc/cbm510.inc
@@ -3,7 +3,8 @@
 ;
 ; Taken from a kernal disassembly done by myself in 2000/2001.
 ;
-; Ullrich von Bassewitz, 13.09.2001
+; 2001-09-13, Ullrich von Bassewitz
+; 2013-08-23, Greg King
 
 
 ;-----------------------------------------------------------------------------
@@ -12,6 +13,8 @@
 ExecReg         = $00
 IndReg          = $01
 
+TXTPTR          := $85          ; Far pointer into BASIC source code
+
 ; ---------------------------------------------------------------------------
 ; Screen size
 
@@ -21,7 +24,7 @@ YSIZE           = 25
 ;-----------------------------------------------------------------------------
 ; I/O Definitions
 
-; I/O  $d800: VIC
+; I/O  $d800: VIC-II
 
 VIC_SPR0_X      = $00
 VIC_SPR0_Y      = $01
@@ -75,7 +78,6 @@ VIC_BG_COLOR2   = $23
 VIC_BG_COLOR3   = $24
 
 
-
 ; I/O  $da00: SID 6581
 
 SID_S1Lo        = $00
@@ -112,7 +114,7 @@ SID_Noise       = $1B
 SID_Read3       = $1C
 
 
-; I/O  $db00: CIA 6526 Inter Process Communication
+; I/O  $db00: CIA 6526, Inter Process Communication
 ; I/O  $dc00: CIA 6526
 
 .struct CIA
@@ -176,7 +178,13 @@ SID_Read3       = $1C
 .endstruct
 
 
-; Out video memory address
+;-----------------------------------------------------------------------------
+; Our video memory address
 
-COLOR_RAM   = $D400                     ; System bank
+COLOR_RAM       := $D400        ; System bank
 
+
+;-----------------------------------------------------------------------------
+
+BASIC_BUF       := $FB5E        ; Bank 0 location of command-line
+BASIC_BUF_LEN   = 162           ; Maximum length of command-line
diff --git a/asminc/cbm610.inc b/asminc/cbm610.inc
index 94256eeb1..10d194ea7 100644
--- a/asminc/cbm610.inc
+++ b/asminc/cbm610.inc
@@ -9,8 +9,10 @@
 ; ---------------------------------------------------------------------------
 ; Zeropage stuff
 
-ExecReg         = $00
-IndReg          = $01
+ExecReg         := $00
+IndReg          := $01
+
+TXTPTR          := $85          ; Far pointer into BASIC source code
 
 ; ---------------------------------------------------------------------------
 ; Screen size
@@ -29,7 +31,8 @@ YSIZE           = 25
         DATA    .byte
 .endstruct
 
-; I/O  $db00: CIA 6526 Inter Process Communication
+
+; I/O  $db00: CIA 6526, Inter Process Communication
 ;
 ;       IPCcia          =       $db00
 
@@ -68,7 +71,6 @@ YSIZE           = 25
 ;       cia             =       $dc00
 
 
-
 ; I/O  $dd00: ACIA 6551
 ;
 ;       acia            =       $dd00
@@ -108,3 +110,7 @@ YSIZE           = 25
 ;       tpi2            =       $df00
 
 
+;-----------------------------------------------------------------------------
+
+BASIC_BUF       := $FA5E        ; Bank 1 location of command-line
+BASIC_BUF_LEN   = 162           ; Maximum length of command-line
diff --git a/asminc/pet.inc b/asminc/pet.inc
index a3dadf48d..1ebf391f9 100644
--- a/asminc/pet.inc
+++ b/asminc/pet.inc
@@ -7,6 +7,7 @@
 ; Zero page, Commodore stuff
 
 MEMSIZE         := $34          ; Size of memory installed
+TXTPTR          := $77          ; Pointer into BASIC source code
 TIME            := $8D          ; 60HZ clock
 KEY_COUNT       := $9E          ; Number of keys in input buffer
 RVS             := $9F          ; Reverse flag
@@ -24,6 +25,9 @@ SCR_LINELEN     := $D5          ; Screen line length
 CURS_Y          := $D8          ; Cursor row
 FNADR           := $DA          ; Pointer to file name
 
+BASIC_BUF       := $200         ; Location of command-line
+BASIC_BUF_LEN   = 81            ; Maximum length of command-line
+
 KEY_BUF         := $26F         ; Keyboard buffer
 
 ;----------------------------------------------------------------------------
diff --git a/asminc/plus4.inc b/asminc/plus4.inc
index 014c18e60..17e250508 100644
--- a/asminc/plus4.inc
+++ b/asminc/plus4.inc
@@ -7,6 +7,7 @@
 ; Zero page, Commodore stuff
 
 TMPPTR          := $22          ; Temporary ptr used by BASIC
+TXTPTR          := $3B          ; Pointer into BASIC source code
 TIME            := $A3          ; 60HZ clock
 FNAM_LEN        := $AB          ; Length of filename
 LFN             := $AC          ; Logical file number
diff --git a/asminc/vic20.inc b/asminc/vic20.inc
index 6780d067d..c42db4258 100644
--- a/asminc/vic20.inc
+++ b/asminc/vic20.inc
@@ -6,6 +6,7 @@
 ; ---------------------------------------------------------------------------
 ; Zero page, Commodore stuff
 
+TXTPTR          := $7A          ; Pointer into BASIC source code
 TIME            := $A0          ; 60HZ clock
 FNAM_LEN        := $B7          ; Length of filename
 SECADR          := $B9          ; Secondary address
diff --git a/libsrc/cbm/execvars.s b/libsrc/cbm/execvars.s
new file mode 100644
index 000000000..02eabc12e
--- /dev/null
+++ b/libsrc/cbm/execvars.s
@@ -0,0 +1,28 @@
+;
+; Platform-specific variables for the exec program-chaining function
+;
+
+.if     .defined (__C128__)
+        .include        "c128.inc"
+.elseif .defined (__C16__)
+        .include        "c16.inc"
+.elseif .defined (__C64__)
+        .include        "c64.inc"
+.elseif .defined (__CBM510__)
+        .include        "cbm510.inc"
+.elseif .defined (__CBM610__)
+        .include        "cbm610.inc"
+.elseif .defined (__PET__)
+        .include        "pet.inc"
+.elseif .defined (__PLUS4__)
+        .include        "plus4.inc"
+.else
+        .include        "vic20.inc"
+.endif
+
+        .export         _txtptr:zp, _basbuf, _basbuf_len:zp
+
+_txtptr         :=      TXTPTR
+
+_basbuf         :=      BASIC_BUF
+_basbuf_len     =       BASIC_BUF_LEN
diff --git a/libsrc/pet/mainargs.s b/libsrc/pet/mainargs.s
index 9a63f50c2..0d5b18987 100644
--- a/libsrc/pet/mainargs.s
+++ b/libsrc/pet/mainargs.s
@@ -13,7 +13,6 @@
 MAXARGS  = 10                   ; Maximum number of arguments allowed
 REM      = $8f                  ; BASIC token-code
 NAME_LEN = 16                   ; maximum length of command-name
-BASIC_BUF= $200
 
 
 ;---------------------------------------------------------------------------