Browse Source

ZCPR-D&J Fixes

Lars Nelson found a couple issues with ZCPR-D&J and provided an update:

- Buffer overflow
- Failure of default drive/user
pull/331/head
Wayne Warthen 4 years ago
parent
commit
f0def03d0e
  1. 1
      Doc/ChangeLog.txt
  2. 3
      Makefile
  3. 7
      Source/HBIOS/Build.sh
  4. 47
      Source/HBIOS/Makefile
  5. 1
      Source/HBIOS/cfg_una.asm
  6. 47
      Source/HBIOS/hbios_env.asm
  7. 5
      Source/ZCPR-DJ/Build.cmd
  8. 1
      Source/ZCPR-DJ/Clean.cmd
  9. 15
      Source/ZCPR-DJ/zcpr.mac
  10. BIN
      Source/ZCPR-DJ/zcprdemo.com
  11. 268
      Source/ZCPR-DJ/zcprdemo.mac
  12. 2
      Source/ver.inc
  13. 2
      Source/ver.lib
  14. 2
      Tools/Makefile.inc

1
Doc/ChangeLog.txt

@ -62,6 +62,7 @@ Version 3.1.1
- WBW: ZPMLDR and ZPM3 fixes, credit to Lars Nelson for finding ZPM3 source!
- DDW: Add support for MBC sound card
- WBW: Add support for "romless" booting
- L?N: Fixes for ZCPR-D&J (buffer overflow, default drive/user)
Version 3.1
-----------

3
Makefile

@ -6,6 +6,7 @@ clean:
$(MAKE) --directory Tools clean
$(MAKE) --directory Source clean
$(MAKE) --directory Binary clean
rm -f make.log
clobber: clean
@ -13,6 +14,6 @@ diff:
$(MAKE) --directory Source diff
dist:
$(MAKE) ROM_PLATFORM=dist
$(MAKE) ROM_PLATFORM=dist 2>&1 | tee make.log
$(MAKE) --directory Source clean
$(MAKE) --directory Tools clean

7
Source/HBIOS/Build.sh

@ -6,6 +6,7 @@ set -e
export ROM_PLATFORM
export ROM_CONFIG
export ROMSIZE
export CPUFAM
if [ "${ROM_PLATFORM}" == "dist" ] ; then
echo "!!!DISTRIBUTION BUILD!!!"
@ -63,6 +64,8 @@ if [ -z "${ROMNAME}" ] ; then
ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG}
fi
echo -e "\n\nBuilding $ROM_PLATFORM $ROM_CONFIG\n\n"
TIMESTAMP=$(date +%Y-%m-%d)
if [ "$1" = "-d" ] ; then
@ -77,8 +80,6 @@ fi
CONFIGFILE=Config/${ROM_PLATFORM}_${ROM_CONFIG}.asm
echo Building $ROMNAME for $ROM_PLATFORM $ROM_CONFIG $ROMSIZE
cat <<- EOF > build.inc
; RomWBW Configured for ${ROM_PLATFORM} ${ROM_CONFIG} ${TIMESTAMP}
;
@ -92,6 +93,8 @@ EOF
make hbios_env.sh
source hbios_env.sh
echo Creating ${ROMSIZE}K ROM named ${ROMNAME}.rom
export OBJECTS
OBJECTS="${ROMNAME}.rom"
if [ "${ROM_PLATFORM}" != "UNA" ] ; then

47
Source/HBIOS/Makefile

@ -7,25 +7,30 @@ SUBDIRS =
DEST = ../../Binary
TOOLS =../../Tools
OTHERS = *.img *.rom *.com *.upd *.bin *.z80 cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh
include $(TOOLS)/Makefile.inc
FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm fontcgac.asm fontcgau.asm
# DIFFMAKE = 1
ifneq ($(findstring $(ROM_PLATFORM), N8 MK4 RCZ180 SCZ180 DYNO RPH),)
TASM=$(BINDIR)/uz80as -t hd64180
# DIFFPATH = $(DIFFTO)/Binary
ifeq ($(DIFFMAKE),1)
DIFFBUILD := -d $(DIFFTO)/Source/HBIOS
endif
ifneq ($(findstring $(ROM_PLATFORM), RCZ280),)
TASM=$(BINDIR)/uz80as -t z280
ifeq ($(OBJECTS),)
start:
chmod +x Build.sh
bash Build.sh $(DIFFBUILD)
endif
# DIFFMAKE = 1
include $(TOOLS)/Makefile.inc
ifeq ($(DIFFMAKE),1)
DIFFBUILD := -d $(DIFFTO)/Source/HBIOS
endif
FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm fontcgac.asm fontcgau.asm
# DIFFPATH = $(DIFFTO)/Binary
ifeq ($(CPUFAM),2)
TASM=$(BINDIR)/uz80as -t hd64180
else ifeq ($(CPUFAM),3)
TASM=$(BINDIR)/uz80as -t z280
endif
DEPS=prereq dbgmon.bin romldr.bin nascom.bin tastybasic.bin game.bin eastaegg.bin updater.bin usrrom.bin imgpad2.bin
@ -39,19 +44,15 @@ endif
ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG}
$(info DEPS=$(DEPS))
$(info ROM_PLATFORM=$(ROM_PLATFORM))
$(info ROM_CONFIG=$(ROM_CONFIG))
$(info ROMSIZE=$(ROMSIZE))
$(info ROMNAME=$(ROMNAME))
all::
if [ -z "$(OBJECTS)" ] ; then \
chmod +x Build.sh ; \
bash Build.sh $(DIFFBUILD) ; \
fi
# $(info DEPS=$(DEPS))
# $(info ROM_PLATFORM=$(ROM_PLATFORM))
# $(info ROM_CONFIG=$(ROM_CONFIG))
# $(info ROMSIZE=$(ROMSIZE))
# $(info ROMNAME=$(ROMNAME))
# $(info CPUFAM=$(CPUFAM))
# $(info TASM=$(TASM))
$(ROMNAME).rom $(ROMNAME).com $(ROMNAME).img : $(ROMDEPS)
$(OBJECTS) : $(ROMDEPS)
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin ../CPM22/cpm_$(BIOS).bin >osimg.bin
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >osimg_small.bin
if [ $(ROM_PLATFORM) != UNA ] ; then \

1
Source/HBIOS/cfg_una.asm

@ -16,6 +16,7 @@
#INCLUDE "../UBIOS/ubios.inc"
;
;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA]
;
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE

47
Source/HBIOS/hbios_env.asm

@ -1,31 +1,52 @@
;
;==================================================================================================
; HBIOS ENVIRONMENT EXPORT
; HBIOS ENVIRONMENT CONFIG VALUE EXPORT TOOL
;==================================================================================================
;
; Do we need a private stack???
; Use a macro do dump each variable?
;
#include "std.asm"
;
; Macro to make it simple to print a config value
;
#define prtval(tag,val) \
#defcont \ call PREFIX
#defcont \ call PRTSTRD
#defcont \ .text tag
#defcont \ call PRTEQ
#defcont \ ld hl,val
#defcont \ call PRTDEC
#defcont \ call EOL
;
; Program starts here
;
.org $100 ; Normal CP/M start address
;
; Dump ROMSIZE
call PRTSTRD
; Print all desired config values...
;
prtval("ROMSIZE$", ROMSIZE)
prtval("CPUFAM$", CPUFAM)
;
ret
;
; Output correct prefix for command/shell
;
PREFIX:
#ifdef CMD
.text "set ROMSize=$"
#endif
#ifdef BASH
.text "ROMSIZE=$"
call PRTSTRD
.text "set $"
#endif
ld hl,ROMSIZE
call PRTDEC
call EOL
ret
;
ret ; Return
; Output an equal sign
;
PRTEQ:
ld a,'='
call COUT
ret
;
; Output end-of-line. Handles differences between
; Windows CMD file and Bash.
; DOS/Windows and Unix.
;
EOL:
#ifdef CMD

5
Source/ZCPR-DJ/Build.cmd

@ -10,4 +10,7 @@ set TASMTABS=%TOOLS%\tasm32
set CPMDIR80=%TOOLS%/cpm/
zxcc M80 -=zcpr/l || exit /b
zxcc L80 -zcpr,zcpr.bin/n/e || exit /b
zxcc L80 -zcpr,zcpr.bin/n/e || exit /b
zxcc M80 -=zcprdemo/l || exit /b
zxcc L80 -zcprdemo,zcprdemo/n/e || exit /b

1
Source/ZCPR-DJ/Clean.cmd

@ -5,3 +5,4 @@ if exist *.bin del *.bin
if exist *.lst del *.lst
if exist *.rel del *.rel
if exist *.prn del *.prn
if exist *.com del *.com

15
Source/ZCPR-DJ/zcpr.mac

@ -1,4 +1,4 @@
; DATE 05/17/21 08:34:00
; DATE 06/02/21 08:08:00
;
; TITLE ZCPR Console Command Processor - Version D&J
; SUBTTL Last Modified: 10 August 1997
@ -396,12 +396,15 @@ CIBUFF: DB ' ' ;DEFAULT (COLD BOOT) COMMAND 13
db 0,0,0,0,0,0,0,0 ;77
db 0,0,0,0,0,0,0,0 ;85
db 0,0,0,0,0,0,0,0 ;93
db 0,0,0,0,0,0,0,0 ;101
db 0,0,0,0,0,0,0,0 ;109
db 0,0,0 ;96
; DEFB 0,0,0,0,0,0,0,0 ;101
; DEFB 0,0,0 ;104
; DEFB 0,0,0,0,0,0,0,0 ;109
; DEFB 0,0,0,0,0,0,0,0 ;118
BUFEND EQU $
; DEFW 0 ;SENTINEL FOR STACK END
db 0,0
; DEFS 24 ;STACK AREA
DEFS 24,0 ;STACK AREA
STACK EQU $ ;TOP OF STACK
;
; SUBMIT FILE CONTROL BLOCK
@ -427,7 +430,7 @@ FCBS2: db 0 ;S2
FCBRC: db 0 ;RECORD COUNT
FCBDM: db 0,0,0,0,0,0,0,0 ;DISK GROUP MAP
db 0,0,0,0,0,0,0,0
FCBCR: DEFS 1 ;CURRENT RECORD NUMBER
FCBCR: db 0 ;CURRENT RECORD NUMBER
;
; Type and List Variables
;
@ -466,7 +469,7 @@ CMDTBL:
DEFW RING
DC 'CLS'
DEFW CLS
DC 'WAIT' ; was 'SAK' ("strike any key")
DC 'SAK' ; "Strike Any Key"
DEFW SAK
DC 'GO'
DEFW GO

BIN
Source/ZCPR-DJ/zcprdemo.com

Binary file not shown.

268
Source/ZCPR-DJ/zcpr.mac.bak → Source/ZCPR-DJ/zcprdemo.mac

@ -1,6 +1,8 @@
TITLE ZCPR Console Command Processor - Version D&J
SUBTTL Last Modified: 5 March 1994
; DATE 06/02/21 08:08:00
;
; TITLE ZCPR Console Command Processor - Version D&J
; SUBTTL Last Modified: 10 August 1997
; CP/M Z80 Command Processor Replacement (CPR) Version 1.0
; CCPZ CREATED AND CUSTOMIZED FOR ARIES-II BY RLC
; FURTHER MODIFIED BY RGF AS V2.0
@ -66,6 +68,13 @@
;
; Added PEEK 30 August 1993.
;
; Added CLS 10 August 1997 and fixed two bugs. One caused the system to
; hang if the command to log into another drive was given while logged
; into a drive from which the disk had been removed. The other caused
; a warm boot to return to the prior user area if the new user number
; had been selected using the USER command (although not if the user area
; had been changed using the du: command).
;
;******** Structure Notes ********
;
; This CPR is divided into a number of major sections. The following
@ -86,39 +95,40 @@
;
; 3 Utilities
; CRLF PRINTC PRINT PRINTS BELL
; CONOUT BREAK CHKETX ABORT READF
; READ WRITE DEFDMA DMASET SEARF
; SEARDE SEARN OPENF OPEN CLOSE
; CREATE BDOSFN SUBKIL DELETE TLOGIN
; DLOGIN LOGIN NEWUSR RSTUSR SETUSR
; BDOSEA BDOSJP BDOSBC BDOSDE
; CLS CONOUT BREAK CHKETX ABORT
; READF READ WRITE DEFDMA DMASET
; SEARF SEARDE SEARN OPENF OPEN
; CLOSE CREATE BDOSFN SUBKIL DELETE
; TLOGIN DLOGIN LOGIN NEWUSR RSTUSR
; SETUSR BDOSEA BDOSJP BDOSBC BDOSDE
;
; 4 CPR Utilities
; PROMPT REDBUF CNVBUF UCASE SDELM
; ADVAN SBLANK ADDAH NUMBER A2NUM
; HEXNUM USRNUM ERROR DIRPTR ULOGIN
; SCANER SCANT SCANF CMDSER SETUDB
; SCANER SCANT SCANF CMDSER
;
; 5 CPR-Resident Commands and Functions
; 5A DIR DIRPR PRFN
; 5B ERA
; 5C ERAQ PRNNF
; 5D SAK REPLY
; 5E BELL
; 5F LIST
; 5G TYPE PAGER
; 5H EJECT
; 5I SAVE
; 5J REN
; 5K USER SUSER
; 5L DFU
; 5M SCL
; 5N PEEK
; 5O POKE
; 5P JUMP
; 5Q COM
; 5R GO CLLPRG ERRLOG ERRJMP
; 5S GET MEMLD PRNLE
; 5E CLS
; 5F BELL
; 5G LIST
; 5H TYPE PAGER
; 5I EJECT
; 5J SAVE
; 5K REN
; 5L USER SUSER
; 5M DFU
; 5N SCL
; 5O PEEK
; 5P POKE
; 5Q JUMP
; 5R COM UPDATE
; 5S GO CLLPRG ERRLOG ERRJMP
; 5T GET MEMLD PRNLE
; BIOS BOOT
;
;
@ -142,13 +152,14 @@ TRUE EQU NOT FALSE
;
; P2DOS - Address of BDOS/P2DOS.
;
TEST EQU FALSE ;SET TO LOAD/RUN AT 8000H FOR DEBUG
TEST EQU TRUE ;SET TO LOAD/RUN AT 8000H FOR DEBUG
COMLD EQU FALSE ;SET TO LOAD AND EXECUTE AS A .COM FILE
REL EQU FALSE ;SET TO TRUE FOR MOVCPM INTEGRATION
;LEAVE ALL FALSE FOR SYSGEN IMAGE
;
BASE EQU 0 ;BASE OF CP/M SYSTEM
P2DOS EQU 0E400H ;BASE OF BDOS/P2DOS
;P2DOS EQU 0E400H ;BASE OF BDOS/P2DOS (original)
P2DOS EQU 0D800H ;BASE OF BDOS/P2DOS (Retro-Brew)
ZCPRSZ EQU 00800H ;SIZE OF ZCPR
P2DOSSZ EQU 00E00H ;SIZE OF P2DOS
BIOS EQU P2DOS+P2DOSSZ ;BASE OF BIOS
@ -243,7 +254,7 @@ SOFLG EQU 'S' ;LIST $SYS ONLY
;
; List and Type command customization equates
;
NLINES EQU 20 ;NUMBER OF LINES ON CRT PAGE
NLINES EQU 22 ;NUMBER OF LINES ON CRT PAGE
NLINEP EQU 60 ;NUMBER OF LINES ON LIST DEVICE
FFKILL EQU TRUE ;TRUE SUPPRESSES FF UNTIL FIRST CHARACTER
PGDFLG EQU 'P' ;TYPE AND LIST COMMAND DEFAULT TOGGLE
@ -254,14 +265,17 @@ NOSTAT EQU FALSE ;SET TO TRUE IF BIOS LISTST NOT IMPLEMENTED
BUFLEN EQU 80 ;SIZE OF COMMAND INPUT BUFFER
MAXUSR EQU 15 ;MAXIMUM USER NUMBER ACCESSIBLE
DEFUSR EQU 0 ;DEFAULT USER NUMBER FOR COM FILES
DEFDRV EQU 'A' ;DEFAULT DRIVE FOR COM FILES
SPRMPT EQU '$' ;CPR PROMPT INDICATING SUBMIT COMMAND
COMCHR EQU ';' ;BEGIN COMMENT CHARACTER
COMCHR EQU '%' ;BEGIN COMMENT CHARACTER
CMDCHR EQU ';' ;BEGIN NEXT COMMAND CHARACTER
NUMBASE EQU 'H' ;CHARACTER USED TO SPECIFY HEXIDECIMAL BASE
RECFLG EQU 'R' ;CHARACTER FOR SAVE COMMAND TO SAVE RECORDS
SUPRES EQU TRUE ;TRUE TO SUPPRESS USER NUMBER FOR USER 0
MULTPL EQU TRUE ;TRUE TO ALLOW MULTIPLE COMMANDS ON ONE LINE
REBOOT EQU TRUE ;TRUE TO INCLUDE BOOT COMMAND
CLSCHR EQU 1AH ;CHARACTER TO CLEAR TERMINAL SCREEN
ESC EQU 1BH ;VT100 LEAD-IN CHAR. (FOR 'CLS')
;
IF TEST
CPRMPT EQU '<' ;CPR PROMPT INDICATING TEST MODE
@ -299,7 +313,7 @@ TPA EQU BASE+0100H ;BASE OF TPA
IF COMLD OR TEST
LD HL,BGNXFR
LD DE,CPRLOC
LD BC,ENDLD-CPRLOC
LD BC,ENDLD-BGNXFR
LDIR
LD BC,(UDFLAG)
JP CPRLOC
@ -368,15 +382,29 @@ ENTRY:
; warm boot reloads ZCPR and destroys the contents of the command buffer.
; The multiple command feature may be turned off with the SCL command.
;
MBUFF: DEFB BUFLEN ;MAXIMUM BUFFER LENGTH
;MBUFF: DEFB BUFLEN ;MAXIMUM BUFFER LENGTH
MBUFF: DEFB BUFEND-CIBUFF ;MAXIMUM BUFFER LENGTH
CBUFF: DEFB 0 ;NUMBER OF CHARACTERS IN COMMAND LINE
CIBUFF: DEFB ' ' ;DEFAULT (COLD BOOT) COMMAND
DEFB 0 ;COMMAND STRING TERMINATOR
DEFB ' ZCPR-D&J of 5 March 1994 '
DEFB 0 ;TERMINATOR FOR DUMP IDENTIFICATION
DEFS BUFLEN-($-CIBUFF)+1
DEFW 0 ;SENTINEL FOR STACK END
DEFS 24 ;STACK AREA
CIBUFF: DB ' ' ;DEFAULT (COLD BOOT) COMMAND 13
DEFB 0 ;COMMAND STRING TERMINATOR 14
DEFB ' ZCPR-D&J of 17 May 2021 ' ;44
DEFB 0 ;TERMINATOR FOR DUMP IDENTIFICATION 45
; DEFS BUFLEN-($-CIBUFF)+1
db 0,0,0,0,0,0,0,0 ;53
db 0,0,0,0,0,0,0,0 ;61
db 0,0,0,0,0,0,0,0 ;69
db 0,0,0,0,0,0,0,0 ;77
db 0,0,0,0,0,0,0,0 ;85
db 0,0,0,0,0,0,0,0 ;93
db 0,0,0 ;96
; DEFB 0,0,0,0,0,0,0,0 ;101
; DEFB 0,0,0 ;104
; DEFB 0,0,0,0,0,0,0,0 ;109
; DEFB 0,0,0,0,0,0,0,0 ;118
BUFEND EQU $
; DEFW 0 ;SENTINEL FOR STACK END
db 0,0
DEFS 24,0 ;STACK AREA
STACK EQU $ ;TOP OF STACK
;
; SUBMIT FILE CONTROL BLOCK
@ -393,22 +421,23 @@ SUBCR EQU SUBDN+32 ;CURRENT RECORD NUMBER
;
; COMMAND FILE CONTROL BLOCK
;
FCBDN: DEFS 1 ;DISK DRIVE
FCBFN: DEFS 8 ;FILE NAME
FCBFT: DEFS 3 ;FILE TYPE
FCBEX: DEFS 1 ;EXTENT NUMBER
FCBS1: DEFS 1 ;S1
FCBS2: DEFS 1 ;S2
FCBRC: DEFS 1 ;RECORD COUNT
FCBDM: DEFS 16 ;DISK GROUP MAP
FCBCR: DEFS 1 ;CURRENT RECORD NUMBER
FCBDN: db 0 ;DISK DRIVE
FCBFN: db 0,0,0,0,0,0,0,0 ;FILE NAME
FCBFT: db 0,0,0 ;FILE TYPE
FCBEX: db 0 ;EXTENT NUMBER
FCBS1: db 0 ;S1
FCBS2: db 0 ;S2
FCBRC: db 0 ;RECORD COUNT
FCBDM: db 0,0,0,0,0,0,0,0 ;DISK GROUP MAP
db 0,0,0,0,0,0,0,0
FCBCR: db 0 ;CURRENT RECORD NUMBER
;
; Type and List Variables
;
CHRCNT: DEFS 1 ;CHARACTER COUNT FOR TYPE AND LIST
LNCNT: DEFS 1 ;LINE COUNT FOR TYPE AND LIST
TYPLST: DEFS 1 ;FLAG FOR TYPE OR LIST
TABCNT: DEFS 1 ;TAB COUNT FOR TYPE AND LIST
CHRCNT: db 0 ;CHARACTER COUNT FOR TYPE AND LIST
LNCNT: db 0 ;LINE COUNT FOR TYPE AND LIST
TYPLST: db 0 ;FLAG FOR TYPE OR LIST
TABCNT: db 0 ;TAB COUNT FOR TYPE AND LIST
SYSTST: DEFB 0 ;LIST SYSTEM FILES IN DIRECTORY FLAG
;
; General Variables
@ -416,7 +445,7 @@ SYSTST: DEFB 0 ;LIST SYSTEM FILES IN DIRECTORY FLAG
CIBPTR: DEFW CIBUFF ;POINTER TO COMMAND INPUT BUFFER
CIPTR: DEFW CIBUFF ;POINTER TO CURRENT CMD FOR ERROR REPORTING
TMPUSR: DEFB 0 ;TEMPORARY USER NUMBER
TDRIVE: DEFB 0 ;DEFAULT DRIVE
TDRIVE: DEFB 0 ;TEMPORARY DRIVE
DFUSR: DEFB DEFUSR ;DEFAULT USER
LDADR: DEFW TPA ;MEMORY LOAD ADDRESS
;
@ -434,11 +463,13 @@ CMDTBL:
DEFW USER
DC 'DFU'
DEFW DFU
DC 'PAGE'
DC 'FF' ; was 'PAGE'
DEFW EJECT
DC 'BELL'
DEFW RING
DC 'SAK'
DC 'CLS'
DEFW CLS
DC 'SAK' ; "Strike Any Key"
DEFW SAK
DC 'GO'
DEFW GO
@ -458,7 +489,7 @@ CMDTBL:
DEFW PEEK
DC 'POKE'
DEFW POKE
NCMNDS DEFL 17 ;NUMBER OF COMMANDS
NCMNDS DEFL 18 ;NUMBER OF COMMANDS
;
IF MULTPL
DC 'SCL'
@ -515,14 +546,11 @@ RS3:
JR Z,RESTRT ;YES, SKIP REST OF LINE
CALL SCANER ;PARSE COMMAND NAME FROM COMMAND LINE
JR NZ,RS4 ;ERROR IF NAME CONTAINS A "?"
CALL DEFDMA ;SET TBUFF TO DMA ADDRESS
CALL DLOGIN ;ASSURE PROPER DRIVE
CALL RSTUSR ;ASSURE PROPER USER NUMBER
CALL SETUDB ;SET UD BYTE TO MATCH USER/DRIVE
CALL CMDSER ;SCAN FOR CPR-RESIDENT COMMAND
CALL CMDSER ;SCAN FOR COMMAND
;
; ENTRY POINT FOR CONTINUED SCAN OF COMMAND LINE
;
CALL UPDATE ;UPDATE BDOS/SYSTEM PARAMETERS
CALL ADVAN ;GET ANY CHARACTER
JR Z,RESTRT ;NONE, END OF LINE
LD (CIPTR),DE ;UPDATE START OF LINE IN CASE ERROR
@ -1023,7 +1051,7 @@ SCAN4:
LD (HL),B ;SAVE DRIVE
LD B,8 ;MAX OF 8 CHARACTERS
XOR A ;CLEAR '?' COUNT
EX AF,AF ;AND SAVE
EX AF,AF' ;AND SAVE
CALL SCANF ;GET POSSIBLE NAME
CALL SCANT ;AND POSSIBLE TYPE
;
@ -1043,7 +1071,7 @@ SCAN4:
; SCAN COMPLETE -- DE POINTS TO DELIMITER BYTE AFTER TOKEN
;
LD (CIBPTR),DE
EX AF,AF ;GET NUMBER OF '?' IN FILENAME.TYP
EX AF,AF' ;GET NUMBER OF '?' IN FILENAME.TYP
RET
;
; EXTRACT FILE TYPE FROM POSSIBLE FILENAME.TYP
@ -1068,9 +1096,9 @@ SCAN12:
SCAN13:
CP '?' ;QUESTION MARK?
JR NZ,SCAN14 ;NO, JUST STORE CHARACTER
EX AF,AF ;GET QUESTION MARK COUNT
EX AF,AF' ;GET QUESTION MARK COUNT
INC A ;COUNT IT
EX AF,AF ;AND SAVE COUNT
EX AF,AF' ;AND SAVE COUNT
SCAN14:
INC DE ;POINT TO NEXT CHARACTER IN COMMAND LINE
LD (HL),A ;STORE CHARACTER IN FCBDN
@ -1096,15 +1124,6 @@ CMDSER:
LD A,(HL) ;LOOK FOR DRIVE SPEC
DEC A ;ADJUST FOR LOG IN
CALL P,TLOGIN ;LOG IN DRIVE
SETUDB:
LD A,(TMPUSR) ;GET CURRENT USER NUMBER
ADD A,A ;PLACE IT IN HIGH NIBBLE
ADD A,A
ADD A,A
ADD A,A
LD HL,TDRIVE ;ADD DEFAULT DRIVE NUMBER (LOW NIBBLE)
OR (HL)
LD (UDFLAG),A ;UPDATE USER/DRIVE BYTE
RET
CMS0:
OR (HL) ;DRIVE OR USER NUMBER
@ -1124,11 +1143,10 @@ CMS2:
LD A,(DE) ;NEXT CHARACTER IN INPUT COMMAND MUST BE <SP>
CP ' '
JR NZ,CMS4
LD A,(HL) ;FOUND COMMAND,
LD E,(HL) ;FOUND COMMAND,
INC HL ;LOAD ADDRESS,
LD H,(HL) ;AND
LD L,A ;JUMP TO IT
JP (HL) ;COMMAND IS CPR-RESIDENT
LD D,(HL) ;AND
JR CMS6 ;UPDATE SYSTEM DATA AND EXECUTE
CMS3:
BIT 7,(HL) ;END OF TABLE ENTRY?
INC HL
@ -1138,7 +1156,10 @@ CMS4:
INC HL
DJNZ CMS1 ;NOT TO END OF TABLE YET
CMS5:
JP COM ;COMMAND MAY BE DISK-RESIDENT
LD DE,COM ;LOAD DESTINATION AND UPDATE
CMS6:
PUSH DE ;PLACE ROUTINE ADDRESS ON STACK
JP UPDATE ;UPDATE SYSTEM DATA AND EXECUTE
;
;**** Section 5 ****
; CPR-Resident Commands
@ -1410,6 +1431,21 @@ REPL2:
RET
;
;Section 5E
;Command: CLS
;Function: To clear screen.
;Forms:
; CLS
;
CLS:
; LD A,CLSCHR ; Load clear screen character
; DEFB 21H ; and skip next instruction
; If a multi-character string is
; required to clear screen use:
CALL PRINT
DB ESC,'[2','J'+128
RET
;
;Section 5F
;Command: BELL
;Function: To ring terminal bell.
;Forms:
@ -1419,7 +1455,7 @@ RING:
LD A,BELL ; load bell into A
JP CONOUT ; and output it
;
;Section 5F
;Section 5G
;Command: LIST
;Function: To print specified file on list device.
;Forms:
@ -1436,7 +1472,7 @@ LIST:
;
JR TYPE1
;
;Section 5G
;Section 5H
;Command: TYPE
;Function: To display specified file on console.
;Forms:
@ -1559,8 +1595,8 @@ PAGER:
PAGE2:
JP BDOSJP ; return via bdos
;
;Section 5H
;Command: PAGE
;Section 5I
;Command: FF (was PAGE)
;Function: To eject a page on list device via a form feed.
;Forms:
; PAGE
@ -1578,7 +1614,7 @@ EJECT:
LD C,05H ; list output
JP BDOS ; output character and return via bdos
;
;Section 5I
;Section 5J
;Command: SAVE
;Function: To save the contents of TPA onto disk as a file. Number of
; pages or records is in decimal. Saved area begins at 100H.
@ -1627,7 +1663,7 @@ SAVE3:
SAVE4:
JP PRNLE ;PRINT 'NO SPACE' ERROR
;
;Section 5J
;Section 5K
;Command: REN
;Function: To change the name of an existing file.
;Forms:
@ -1669,7 +1705,7 @@ NAMERR:
REN2:
JP ABORT
;
;Section 5K
;Section 5L
;Command: USER
;Function: To change current user number; new user number is in decimal.
;Forms:
@ -1679,7 +1715,7 @@ USER:
CALL USRNUM ;EXTRACT USER NUMBER FROM COMMAND LINE
JP NEWUSR ;SET NEW USER NUMBER
;
;Section 5L
;Section 5M
;Command: DFU
;Function: To set the Default User Number for the command/file scanner; new
; default user number is in decimal.
@ -1691,7 +1727,7 @@ DFU:
LD (DFUSR),A ;PUT IT AWAY
RET
;
;Section 5M
;Section 5N
;Command: SCL
;Function: To force ZCPR to parse only a single command per line; reset
; to multiple command format at the next ^C.
@ -1708,7 +1744,7 @@ SINGLE:
ENDIF
;
;
;Section 5N
;Section 5O
;Command: PEEK
;Function: To display hex values beginning at a specified address.
;Forms:
@ -1755,7 +1791,7 @@ PRHEX:
JP CONOUT ; go display value
;
;
;Section 5O
;Section 5P
;Command: POKE
;Function: To poke a string of hex values into a set of consecutive addresses.
;Forms:
@ -1776,7 +1812,7 @@ POKE1:
JR POKE1 ; go for more
;
;
;Section 5P
;Section 5Q
;Command: JUMP
;Function: To call the program (subroutine) at the specified address
; without loading from disk.
@ -1787,7 +1823,7 @@ JUMP:
CALL HEXNUM ;GET LOAD ADDRESS IN HL
JR CLLPRG ;PERFORM CALL
;
;Section 5Q
;Section 5R
;Command: COM file processing
;Function: To load the specified COM file from disk and execute it.
;Forms:
@ -1807,7 +1843,7 @@ COM:
CALL MEMLD ;LOAD MEMORY WITH FILE SPECIFIED
;(NO RETURN IF ERROR OR TOO BIG)
;
;Section 5R
;Section 5S
;Command: GO
;Function: To call the program in the TPA without loading from disk.
; Same as JUMP 100H, but more convenient, especially when
@ -1868,14 +1904,24 @@ COM3:
; RUN LOADED TRANSIENT PROGRAM
;
CALL CRLF ;NEW LINE
CALL DEFDMA ;SET DMA TO 0080
CALL RSTUSR ;RESET TO PROPER USER NUMBER
UPDATE:
CALL DEFDMA ;SET DMA TO DEFAULT VALUE
CALL DLOGIN ;ASSURE PROPER DRIVE
CALL RSTUSR ;ASSURE PROPER USER NUMBER
LD A,E ;GET CURRENT USER NUMBER
ADD A,A ;PLACE IT IN HIGH NIBBLE
ADD A,A
ADD A,A
ADD A,A
LD HL,TDRIVE ;ADD DEFAULT DRIVE NUMBER (LOW NIBBLE)
OR (HL)
LD (UDFLAG),A ;UPDATE USER/DRIVE BYTE
;
; EXECUTION (CALL) OF PROGRAM (SUBROUTINE) OCCURS HERE
; EXECUTION (CALL) OF PROGRAM/SUBROUTINE/COMMAND OCCURS HERE
;
RET ;CALL TRANSIENT
;
;Section 5S
;Section 5T
;Command: GET
;Function: To load the specified file from disk to the specified address
;Forms:
@ -1896,9 +1942,9 @@ MEMLD:
LD (LDADR),HL ;SET LOAD ADDRESS
;
; MLA is a reentry point for a non-standard CP/M Modification
; This is the return point when the .COM (or GET) file is not found the
; first time, the Default User is selected for the second attempt
; and Drive A is selected for the final attempt.
; This is the return point when the .COM (or GET) file was not found
; so the Default Drive & User are selected for the final attempt
; to find the file.
;
MLA:
CALL ULOGIN ;LOG ANY USER
@ -1906,29 +1952,22 @@ MLA:
CALL OPENF ;OPEN COMMAND.COM FILE
JR NZ,MLA1 ;FILE FOUND - LOAD IT
;
; FILE NOT FOUND - SELECT DEFAULT USER
; FILE NOT FOUND - SELECT DEFAULT COM USER
;
LD A,L ;GET FCB USER
AND A ;DEFAULT USER?
JR NZ,MLA0 ;NO
LD HL,TMPUSR ;CURRENT USER SAME AS DEFAULT?
LD A,(DFUSR) ;GET DEFAULT USER
CP (HL)
SET 7,A ;MAKE INTO VALID USER NUMBER
LD (FCBS1),A ;PUT USER INTO FCB
JR NZ,MLA ;AND TRY AGAIN
;
; FILE NOT FOUND - SELECT DRIVE A IF DEFAULT WAS SOME OTHER DRIVE
; AND SELECT DEFAULT COM DRIVE. IF DEFAULT COM DRIVE ALREADY
; SELECTED, GIVE UP AND PRINT ERROR MESSAGE
;
MLA0:
LD A,(TDRIVE) ;DRIVE A DEFAULT?
AND A
LD A,DEFDRV-'@' ;A<= DEFAULT COM DRIVE
LD HL,FCBDN ;POINT TO DRIVE IN FCB
CP (HL) ;THE SAME?
JR Z,MLA3 ;YES, ERROR
XOR A
LD HL,FCBDN ;POINT AT DRIVE IN FCB
OR (HL) ;DRIVE ALREADY SPECIFIED?
LD (HL),1 ;SELECT DRIVE A
JR Z,MLA ;NO, GO GIVE IT A TRY
LD (HL),A ;PUT DEFAULT COM DRIVE IN FCB
JR MLA ;GO GIVE IT A TRY
MLA3:
CALL PRNNF ;CAN'T FIND FILE
JR PRNLE1
@ -1961,6 +2000,7 @@ PRNLE1:
IF (($-ENTRY) GT ZCPRSZ)
*ZCPR too large!!*
ENDIF
.DEPHASE
;
IF TEST
LISTST:
@ -1977,4 +2017,4 @@ ENDLD EQU $
END
 PUSH HL ;SAVE POI


2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.181"
#DEFINE BIOSVER "3.1.1-pre.182"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.181"
db "3.1.1-pre.182"
endm

2
Tools/Makefile.inc

@ -134,7 +134,7 @@ endif
#
all:: $(OBJECTS)
@for dir in $(SUBDIRS) ; do \
$(MAKE) --directory $$dir all ; \
$(MAKE) --directory $$dir ; \
done
@if [ "$(DEST)" ] && [ "$(OBJECTS)" ] ; then for file in $(filter-out $(NOCOPY),$(OBJECTS)) ; do \
mkdir -p $(DEST) ; \

Loading…
Cancel
Save