mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
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
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user