|
|
@ -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 |
|
|
; CP/M Z80 Command Processor Replacement (CPR) Version 1.0 |
|
|
; CCPZ CREATED AND CUSTOMIZED FOR ARIES-II BY RLC |
|
|
; CCPZ CREATED AND CUSTOMIZED FOR ARIES-II BY RLC |
|
|
; FURTHER MODIFIED BY RGF AS V2.0 |
|
|
; FURTHER MODIFIED BY RGF AS V2.0 |
|
|
@ -66,6 +68,13 @@ |
|
|
; |
|
|
; |
|
|
; Added PEEK 30 August 1993. |
|
|
; 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 ******** |
|
|
;******** Structure Notes ******** |
|
|
; |
|
|
; |
|
|
; This CPR is divided into a number of major sections. The following |
|
|
; This CPR is divided into a number of major sections. The following |
|
|
@ -86,39 +95,40 @@ |
|
|
; |
|
|
; |
|
|
; 3 Utilities |
|
|
; 3 Utilities |
|
|
; CRLF PRINTC PRINT PRINTS BELL |
|
|
; 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 |
|
|
; 4 CPR Utilities |
|
|
; PROMPT REDBUF CNVBUF UCASE SDELM |
|
|
; PROMPT REDBUF CNVBUF UCASE SDELM |
|
|
; ADVAN SBLANK ADDAH NUMBER A2NUM |
|
|
; ADVAN SBLANK ADDAH NUMBER A2NUM |
|
|
; HEXNUM USRNUM ERROR DIRPTR ULOGIN |
|
|
; HEXNUM USRNUM ERROR DIRPTR ULOGIN |
|
|
; SCANER SCANT SCANF CMDSER SETUDB |
|
|
|
|
|
|
|
|
; SCANER SCANT SCANF CMDSER |
|
|
; |
|
|
; |
|
|
; 5 CPR-Resident Commands and Functions |
|
|
; 5 CPR-Resident Commands and Functions |
|
|
; 5A DIR DIRPR PRFN |
|
|
; 5A DIR DIRPR PRFN |
|
|
; 5B ERA |
|
|
; 5B ERA |
|
|
; 5C ERAQ PRNNF |
|
|
; 5C ERAQ PRNNF |
|
|
; 5D SAK REPLY |
|
|
; 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 |
|
|
; BIOS BOOT |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
@ -142,13 +152,14 @@ TRUE EQU NOT FALSE |
|
|
; |
|
|
; |
|
|
; P2DOS - Address of BDOS/P2DOS. |
|
|
; 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 |
|
|
COMLD EQU FALSE ;SET TO LOAD AND EXECUTE AS A .COM FILE |
|
|
REL EQU FALSE ;SET TO TRUE FOR MOVCPM INTEGRATION |
|
|
REL EQU FALSE ;SET TO TRUE FOR MOVCPM INTEGRATION |
|
|
;LEAVE ALL FALSE FOR SYSGEN IMAGE |
|
|
;LEAVE ALL FALSE FOR SYSGEN IMAGE |
|
|
; |
|
|
; |
|
|
BASE EQU 0 ;BASE OF CP/M SYSTEM |
|
|
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 |
|
|
ZCPRSZ EQU 00800H ;SIZE OF ZCPR |
|
|
P2DOSSZ EQU 00E00H ;SIZE OF P2DOS |
|
|
P2DOSSZ EQU 00E00H ;SIZE OF P2DOS |
|
|
BIOS EQU P2DOS+P2DOSSZ ;BASE OF BIOS |
|
|
BIOS EQU P2DOS+P2DOSSZ ;BASE OF BIOS |
|
|
@ -243,7 +254,7 @@ SOFLG EQU 'S' ;LIST $SYS ONLY |
|
|
; |
|
|
; |
|
|
; List and Type command customization equates |
|
|
; 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 |
|
|
NLINEP EQU 60 ;NUMBER OF LINES ON LIST DEVICE |
|
|
FFKILL EQU TRUE ;TRUE SUPPRESSES FF UNTIL FIRST CHARACTER |
|
|
FFKILL EQU TRUE ;TRUE SUPPRESSES FF UNTIL FIRST CHARACTER |
|
|
PGDFLG EQU 'P' ;TYPE AND LIST COMMAND DEFAULT TOGGLE |
|
|
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 |
|
|
BUFLEN EQU 80 ;SIZE OF COMMAND INPUT BUFFER |
|
|
MAXUSR EQU 15 ;MAXIMUM USER NUMBER ACCESSIBLE |
|
|
MAXUSR EQU 15 ;MAXIMUM USER NUMBER ACCESSIBLE |
|
|
DEFUSR EQU 0 ;DEFAULT USER NUMBER FOR COM FILES |
|
|
DEFUSR EQU 0 ;DEFAULT USER NUMBER FOR COM FILES |
|
|
|
|
|
DEFDRV EQU 'A' ;DEFAULT DRIVE FOR COM FILES |
|
|
SPRMPT EQU '$' ;CPR PROMPT INDICATING SUBMIT COMMAND |
|
|
SPRMPT EQU '$' ;CPR PROMPT INDICATING SUBMIT COMMAND |
|
|
COMCHR EQU ';' ;BEGIN COMMENT CHARACTER |
|
|
|
|
|
|
|
|
COMCHR EQU '%' ;BEGIN COMMENT CHARACTER |
|
|
CMDCHR EQU ';' ;BEGIN NEXT COMMAND CHARACTER |
|
|
CMDCHR EQU ';' ;BEGIN NEXT COMMAND CHARACTER |
|
|
NUMBASE EQU 'H' ;CHARACTER USED TO SPECIFY HEXIDECIMAL BASE |
|
|
NUMBASE EQU 'H' ;CHARACTER USED TO SPECIFY HEXIDECIMAL BASE |
|
|
RECFLG EQU 'R' ;CHARACTER FOR SAVE COMMAND TO SAVE RECORDS |
|
|
RECFLG EQU 'R' ;CHARACTER FOR SAVE COMMAND TO SAVE RECORDS |
|
|
SUPRES EQU TRUE ;TRUE TO SUPPRESS USER NUMBER FOR USER 0 |
|
|
SUPRES EQU TRUE ;TRUE TO SUPPRESS USER NUMBER FOR USER 0 |
|
|
MULTPL EQU TRUE ;TRUE TO ALLOW MULTIPLE COMMANDS ON ONE LINE |
|
|
MULTPL EQU TRUE ;TRUE TO ALLOW MULTIPLE COMMANDS ON ONE LINE |
|
|
REBOOT EQU TRUE ;TRUE TO INCLUDE BOOT COMMAND |
|
|
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 |
|
|
IF TEST |
|
|
CPRMPT EQU '<' ;CPR PROMPT INDICATING TEST MODE |
|
|
CPRMPT EQU '<' ;CPR PROMPT INDICATING TEST MODE |
|
|
@ -299,7 +313,7 @@ TPA EQU BASE+0100H ;BASE OF TPA |
|
|
IF COMLD OR TEST |
|
|
IF COMLD OR TEST |
|
|
LD HL,BGNXFR |
|
|
LD HL,BGNXFR |
|
|
LD DE,CPRLOC |
|
|
LD DE,CPRLOC |
|
|
LD BC,ENDLD-CPRLOC |
|
|
|
|
|
|
|
|
LD BC,ENDLD-BGNXFR |
|
|
LDIR |
|
|
LDIR |
|
|
LD BC,(UDFLAG) |
|
|
LD BC,(UDFLAG) |
|
|
JP CPRLOC |
|
|
JP CPRLOC |
|
|
@ -368,15 +382,29 @@ ENTRY: |
|
|
; warm boot reloads ZCPR and destroys the contents of the command buffer. |
|
|
; warm boot reloads ZCPR and destroys the contents of the command buffer. |
|
|
; The multiple command feature may be turned off with the SCL command. |
|
|
; 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 |
|
|
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 |
|
|
STACK EQU $ ;TOP OF STACK |
|
|
; |
|
|
; |
|
|
; SUBMIT FILE CONTROL BLOCK |
|
|
; SUBMIT FILE CONTROL BLOCK |
|
|
@ -393,22 +421,23 @@ SUBCR EQU SUBDN+32 ;CURRENT RECORD NUMBER |
|
|
; |
|
|
; |
|
|
; COMMAND FILE CONTROL BLOCK |
|
|
; 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 |
|
|
; 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 |
|
|
SYSTST: DEFB 0 ;LIST SYSTEM FILES IN DIRECTORY FLAG |
|
|
; |
|
|
; |
|
|
; General Variables |
|
|
; General Variables |
|
|
@ -416,7 +445,7 @@ SYSTST: DEFB 0 ;LIST SYSTEM FILES IN DIRECTORY FLAG |
|
|
CIBPTR: DEFW CIBUFF ;POINTER TO COMMAND INPUT BUFFER |
|
|
CIBPTR: DEFW CIBUFF ;POINTER TO COMMAND INPUT BUFFER |
|
|
CIPTR: DEFW CIBUFF ;POINTER TO CURRENT CMD FOR ERROR REPORTING |
|
|
CIPTR: DEFW CIBUFF ;POINTER TO CURRENT CMD FOR ERROR REPORTING |
|
|
TMPUSR: DEFB 0 ;TEMPORARY USER NUMBER |
|
|
TMPUSR: DEFB 0 ;TEMPORARY USER NUMBER |
|
|
TDRIVE: DEFB 0 ;DEFAULT DRIVE |
|
|
|
|
|
|
|
|
TDRIVE: DEFB 0 ;TEMPORARY DRIVE |
|
|
DFUSR: DEFB DEFUSR ;DEFAULT USER |
|
|
DFUSR: DEFB DEFUSR ;DEFAULT USER |
|
|
LDADR: DEFW TPA ;MEMORY LOAD ADDRESS |
|
|
LDADR: DEFW TPA ;MEMORY LOAD ADDRESS |
|
|
; |
|
|
; |
|
|
@ -434,11 +463,13 @@ CMDTBL: |
|
|
DEFW USER |
|
|
DEFW USER |
|
|
DC 'DFU' |
|
|
DC 'DFU' |
|
|
DEFW DFU |
|
|
DEFW DFU |
|
|
DC 'PAGE' |
|
|
|
|
|
|
|
|
DC 'FF' ; was 'PAGE' |
|
|
DEFW EJECT |
|
|
DEFW EJECT |
|
|
DC 'BELL' |
|
|
DC 'BELL' |
|
|
DEFW RING |
|
|
DEFW RING |
|
|
DC 'SAK' |
|
|
|
|
|
|
|
|
DC 'CLS' |
|
|
|
|
|
DEFW CLS |
|
|
|
|
|
DC 'SAK' ; "Strike Any Key" |
|
|
DEFW SAK |
|
|
DEFW SAK |
|
|
DC 'GO' |
|
|
DC 'GO' |
|
|
DEFW GO |
|
|
DEFW GO |
|
|
@ -458,7 +489,7 @@ CMDTBL: |
|
|
DEFW PEEK |
|
|
DEFW PEEK |
|
|
DC 'POKE' |
|
|
DC 'POKE' |
|
|
DEFW POKE |
|
|
DEFW POKE |
|
|
NCMNDS DEFL 17 ;NUMBER OF COMMANDS |
|
|
|
|
|
|
|
|
NCMNDS DEFL 18 ;NUMBER OF COMMANDS |
|
|
; |
|
|
; |
|
|
IF MULTPL |
|
|
IF MULTPL |
|
|
DC 'SCL' |
|
|
DC 'SCL' |
|
|
@ -515,14 +546,11 @@ RS3: |
|
|
JR Z,RESTRT ;YES, SKIP REST OF LINE |
|
|
JR Z,RESTRT ;YES, SKIP REST OF LINE |
|
|
CALL SCANER ;PARSE COMMAND NAME FROM COMMAND LINE |
|
|
CALL SCANER ;PARSE COMMAND NAME FROM COMMAND LINE |
|
|
JR NZ,RS4 ;ERROR IF NAME CONTAINS A "?" |
|
|
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 |
|
|
; ENTRY POINT FOR CONTINUED SCAN OF COMMAND LINE |
|
|
; |
|
|
; |
|
|
|
|
|
CALL UPDATE ;UPDATE BDOS/SYSTEM PARAMETERS |
|
|
CALL ADVAN ;GET ANY CHARACTER |
|
|
CALL ADVAN ;GET ANY CHARACTER |
|
|
JR Z,RESTRT ;NONE, END OF LINE |
|
|
JR Z,RESTRT ;NONE, END OF LINE |
|
|
LD (CIPTR),DE ;UPDATE START OF LINE IN CASE ERROR |
|
|
LD (CIPTR),DE ;UPDATE START OF LINE IN CASE ERROR |
|
|
@ -1023,7 +1051,7 @@ SCAN4: |
|
|
LD (HL),B ;SAVE DRIVE |
|
|
LD (HL),B ;SAVE DRIVE |
|
|
LD B,8 ;MAX OF 8 CHARACTERS |
|
|
LD B,8 ;MAX OF 8 CHARACTERS |
|
|
XOR A ;CLEAR '?' COUNT |
|
|
XOR A ;CLEAR '?' COUNT |
|
|
EX AF,AF ;AND SAVE |
|
|
|
|
|
|
|
|
EX AF,AF' ;AND SAVE |
|
|
CALL SCANF ;GET POSSIBLE NAME |
|
|
CALL SCANF ;GET POSSIBLE NAME |
|
|
CALL SCANT ;AND POSSIBLE TYPE |
|
|
CALL SCANT ;AND POSSIBLE TYPE |
|
|
; |
|
|
; |
|
|
@ -1043,7 +1071,7 @@ SCAN4: |
|
|
; SCAN COMPLETE -- DE POINTS TO DELIMITER BYTE AFTER TOKEN |
|
|
; SCAN COMPLETE -- DE POINTS TO DELIMITER BYTE AFTER TOKEN |
|
|
; |
|
|
; |
|
|
LD (CIBPTR),DE |
|
|
LD (CIBPTR),DE |
|
|
EX AF,AF ;GET NUMBER OF '?' IN FILENAME.TYP |
|
|
|
|
|
|
|
|
EX AF,AF' ;GET NUMBER OF '?' IN FILENAME.TYP |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
; EXTRACT FILE TYPE FROM POSSIBLE FILENAME.TYP |
|
|
; EXTRACT FILE TYPE FROM POSSIBLE FILENAME.TYP |
|
|
@ -1068,9 +1096,9 @@ SCAN12: |
|
|
SCAN13: |
|
|
SCAN13: |
|
|
CP '?' ;QUESTION MARK? |
|
|
CP '?' ;QUESTION MARK? |
|
|
JR NZ,SCAN14 ;NO, JUST STORE CHARACTER |
|
|
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 |
|
|
INC A ;COUNT IT |
|
|
EX AF,AF ;AND SAVE COUNT |
|
|
|
|
|
|
|
|
EX AF,AF' ;AND SAVE COUNT |
|
|
SCAN14: |
|
|
SCAN14: |
|
|
INC DE ;POINT TO NEXT CHARACTER IN COMMAND LINE |
|
|
INC DE ;POINT TO NEXT CHARACTER IN COMMAND LINE |
|
|
LD (HL),A ;STORE CHARACTER IN FCBDN |
|
|
LD (HL),A ;STORE CHARACTER IN FCBDN |
|
|
@ -1096,15 +1124,6 @@ CMDSER: |
|
|
LD A,(HL) ;LOOK FOR DRIVE SPEC |
|
|
LD A,(HL) ;LOOK FOR DRIVE SPEC |
|
|
DEC A ;ADJUST FOR LOG IN |
|
|
DEC A ;ADJUST FOR LOG IN |
|
|
CALL P,TLOGIN ;LOG IN DRIVE |
|
|
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 |
|
|
RET |
|
|
CMS0: |
|
|
CMS0: |
|
|
OR (HL) ;DRIVE OR USER NUMBER |
|
|
OR (HL) ;DRIVE OR USER NUMBER |
|
|
@ -1124,11 +1143,10 @@ CMS2: |
|
|
LD A,(DE) ;NEXT CHARACTER IN INPUT COMMAND MUST BE <SP> |
|
|
LD A,(DE) ;NEXT CHARACTER IN INPUT COMMAND MUST BE <SP> |
|
|
CP ' ' |
|
|
CP ' ' |
|
|
JR NZ,CMS4 |
|
|
JR NZ,CMS4 |
|
|
LD A,(HL) ;FOUND COMMAND, |
|
|
|
|
|
|
|
|
LD E,(HL) ;FOUND COMMAND, |
|
|
INC HL ;LOAD ADDRESS, |
|
|
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: |
|
|
CMS3: |
|
|
BIT 7,(HL) ;END OF TABLE ENTRY? |
|
|
BIT 7,(HL) ;END OF TABLE ENTRY? |
|
|
INC HL |
|
|
INC HL |
|
|
@ -1138,7 +1156,10 @@ CMS4: |
|
|
INC HL |
|
|
INC HL |
|
|
DJNZ CMS1 ;NOT TO END OF TABLE YET |
|
|
DJNZ CMS1 ;NOT TO END OF TABLE YET |
|
|
CMS5: |
|
|
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 **** |
|
|
;**** Section 5 **** |
|
|
; CPR-Resident Commands |
|
|
; CPR-Resident Commands |
|
|
@ -1410,6 +1431,21 @@ REPL2: |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
;Section 5E |
|
|
;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 |
|
|
;Command: BELL |
|
|
;Function: To ring terminal bell. |
|
|
;Function: To ring terminal bell. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1419,7 +1455,7 @@ RING: |
|
|
LD A,BELL ; load bell into A |
|
|
LD A,BELL ; load bell into A |
|
|
JP CONOUT ; and output it |
|
|
JP CONOUT ; and output it |
|
|
; |
|
|
; |
|
|
;Section 5F |
|
|
|
|
|
|
|
|
;Section 5G |
|
|
;Command: LIST |
|
|
;Command: LIST |
|
|
;Function: To print specified file on list device. |
|
|
;Function: To print specified file on list device. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1436,7 +1472,7 @@ LIST: |
|
|
; |
|
|
; |
|
|
JR TYPE1 |
|
|
JR TYPE1 |
|
|
; |
|
|
; |
|
|
;Section 5G |
|
|
|
|
|
|
|
|
;Section 5H |
|
|
;Command: TYPE |
|
|
;Command: TYPE |
|
|
;Function: To display specified file on console. |
|
|
;Function: To display specified file on console. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1559,8 +1595,8 @@ PAGER: |
|
|
PAGE2: |
|
|
PAGE2: |
|
|
JP BDOSJP ; return via bdos |
|
|
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. |
|
|
;Function: To eject a page on list device via a form feed. |
|
|
;Forms: |
|
|
;Forms: |
|
|
; PAGE |
|
|
; PAGE |
|
|
@ -1578,7 +1614,7 @@ EJECT: |
|
|
LD C,05H ; list output |
|
|
LD C,05H ; list output |
|
|
JP BDOS ; output character and return via bdos |
|
|
JP BDOS ; output character and return via bdos |
|
|
; |
|
|
; |
|
|
;Section 5I |
|
|
|
|
|
|
|
|
;Section 5J |
|
|
;Command: SAVE |
|
|
;Command: SAVE |
|
|
;Function: To save the contents of TPA onto disk as a file. Number of |
|
|
;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. |
|
|
; pages or records is in decimal. Saved area begins at 100H. |
|
|
@ -1627,7 +1663,7 @@ SAVE3: |
|
|
SAVE4: |
|
|
SAVE4: |
|
|
JP PRNLE ;PRINT 'NO SPACE' ERROR |
|
|
JP PRNLE ;PRINT 'NO SPACE' ERROR |
|
|
; |
|
|
; |
|
|
;Section 5J |
|
|
|
|
|
|
|
|
;Section 5K |
|
|
;Command: REN |
|
|
;Command: REN |
|
|
;Function: To change the name of an existing file. |
|
|
;Function: To change the name of an existing file. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1669,7 +1705,7 @@ NAMERR: |
|
|
REN2: |
|
|
REN2: |
|
|
JP ABORT |
|
|
JP ABORT |
|
|
; |
|
|
; |
|
|
;Section 5K |
|
|
|
|
|
|
|
|
;Section 5L |
|
|
;Command: USER |
|
|
;Command: USER |
|
|
;Function: To change current user number; new user number is in decimal. |
|
|
;Function: To change current user number; new user number is in decimal. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1679,7 +1715,7 @@ USER: |
|
|
CALL USRNUM ;EXTRACT USER NUMBER FROM COMMAND LINE |
|
|
CALL USRNUM ;EXTRACT USER NUMBER FROM COMMAND LINE |
|
|
JP NEWUSR ;SET NEW USER NUMBER |
|
|
JP NEWUSR ;SET NEW USER NUMBER |
|
|
; |
|
|
; |
|
|
;Section 5L |
|
|
|
|
|
|
|
|
;Section 5M |
|
|
;Command: DFU |
|
|
;Command: DFU |
|
|
;Function: To set the Default User Number for the command/file scanner; new |
|
|
;Function: To set the Default User Number for the command/file scanner; new |
|
|
; default user number is in decimal. |
|
|
; default user number is in decimal. |
|
|
@ -1691,7 +1727,7 @@ DFU: |
|
|
LD (DFUSR),A ;PUT IT AWAY |
|
|
LD (DFUSR),A ;PUT IT AWAY |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
;Section 5M |
|
|
|
|
|
|
|
|
;Section 5N |
|
|
;Command: SCL |
|
|
;Command: SCL |
|
|
;Function: To force ZCPR to parse only a single command per line; reset |
|
|
;Function: To force ZCPR to parse only a single command per line; reset |
|
|
; to multiple command format at the next ^C. |
|
|
; to multiple command format at the next ^C. |
|
|
@ -1708,7 +1744,7 @@ SINGLE: |
|
|
ENDIF |
|
|
ENDIF |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
;Section 5N |
|
|
|
|
|
|
|
|
;Section 5O |
|
|
;Command: PEEK |
|
|
;Command: PEEK |
|
|
;Function: To display hex values beginning at a specified address. |
|
|
;Function: To display hex values beginning at a specified address. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1755,7 +1791,7 @@ PRHEX: |
|
|
JP CONOUT ; go display value |
|
|
JP CONOUT ; go display value |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
;Section 5O |
|
|
|
|
|
|
|
|
;Section 5P |
|
|
;Command: POKE |
|
|
;Command: POKE |
|
|
;Function: To poke a string of hex values into a set of consecutive addresses. |
|
|
;Function: To poke a string of hex values into a set of consecutive addresses. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1776,7 +1812,7 @@ POKE1: |
|
|
JR POKE1 ; go for more |
|
|
JR POKE1 ; go for more |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
;Section 5P |
|
|
|
|
|
|
|
|
;Section 5Q |
|
|
;Command: JUMP |
|
|
;Command: JUMP |
|
|
;Function: To call the program (subroutine) at the specified address |
|
|
;Function: To call the program (subroutine) at the specified address |
|
|
; without loading from disk. |
|
|
; without loading from disk. |
|
|
@ -1787,7 +1823,7 @@ JUMP: |
|
|
CALL HEXNUM ;GET LOAD ADDRESS IN HL |
|
|
CALL HEXNUM ;GET LOAD ADDRESS IN HL |
|
|
JR CLLPRG ;PERFORM CALL |
|
|
JR CLLPRG ;PERFORM CALL |
|
|
; |
|
|
; |
|
|
;Section 5Q |
|
|
|
|
|
|
|
|
;Section 5R |
|
|
;Command: COM file processing |
|
|
;Command: COM file processing |
|
|
;Function: To load the specified COM file from disk and execute it. |
|
|
;Function: To load the specified COM file from disk and execute it. |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1807,7 +1843,7 @@ COM: |
|
|
CALL MEMLD ;LOAD MEMORY WITH FILE SPECIFIED |
|
|
CALL MEMLD ;LOAD MEMORY WITH FILE SPECIFIED |
|
|
;(NO RETURN IF ERROR OR TOO BIG) |
|
|
;(NO RETURN IF ERROR OR TOO BIG) |
|
|
; |
|
|
; |
|
|
;Section 5R |
|
|
|
|
|
|
|
|
;Section 5S |
|
|
;Command: GO |
|
|
;Command: GO |
|
|
;Function: To call the program in the TPA without loading from disk. |
|
|
;Function: To call the program in the TPA without loading from disk. |
|
|
; Same as JUMP 100H, but more convenient, especially when |
|
|
; Same as JUMP 100H, but more convenient, especially when |
|
|
@ -1868,14 +1904,24 @@ COM3: |
|
|
; RUN LOADED TRANSIENT PROGRAM |
|
|
; RUN LOADED TRANSIENT PROGRAM |
|
|
; |
|
|
; |
|
|
CALL CRLF ;NEW LINE |
|
|
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 |
|
|
RET ;CALL TRANSIENT |
|
|
; |
|
|
; |
|
|
;Section 5S |
|
|
|
|
|
|
|
|
;Section 5T |
|
|
;Command: GET |
|
|
;Command: GET |
|
|
;Function: To load the specified file from disk to the specified address |
|
|
;Function: To load the specified file from disk to the specified address |
|
|
;Forms: |
|
|
;Forms: |
|
|
@ -1896,9 +1942,9 @@ MEMLD: |
|
|
LD (LDADR),HL ;SET LOAD ADDRESS |
|
|
LD (LDADR),HL ;SET LOAD ADDRESS |
|
|
; |
|
|
; |
|
|
; MLA is a reentry point for a non-standard CP/M Modification |
|
|
; 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: |
|
|
MLA: |
|
|
CALL ULOGIN ;LOG ANY USER |
|
|
CALL ULOGIN ;LOG ANY USER |
|
|
@ -1906,29 +1952,22 @@ MLA: |
|
|
CALL OPENF ;OPEN COMMAND.COM FILE |
|
|
CALL OPENF ;OPEN COMMAND.COM FILE |
|
|
JR NZ,MLA1 ;FILE FOUND - LOAD IT |
|
|
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 |
|
|
LD A,(DFUSR) ;GET DEFAULT USER |
|
|
CP (HL) |
|
|
|
|
|
SET 7,A ;MAKE INTO VALID USER NUMBER |
|
|
SET 7,A ;MAKE INTO VALID USER NUMBER |
|
|
LD (FCBS1),A ;PUT USER INTO FCB |
|
|
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: |
|
|
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 |
|
|
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: |
|
|
MLA3: |
|
|
CALL PRNNF ;CAN'T FIND FILE |
|
|
CALL PRNNF ;CAN'T FIND FILE |
|
|
JR PRNLE1 |
|
|
JR PRNLE1 |
|
|
@ -1961,6 +2000,7 @@ PRNLE1: |
|
|
IF (($-ENTRY) GT ZCPRSZ) |
|
|
IF (($-ENTRY) GT ZCPRSZ) |
|
|
*ZCPR too large!!* |
|
|
*ZCPR too large!!* |
|
|
ENDIF |
|
|
ENDIF |
|
|
|
|
|
.DEPHASE |
|
|
; |
|
|
; |
|
|
IF TEST |
|
|
IF TEST |
|
|
LISTST: |
|
|
LISTST: |
|
|
@ -1977,4 +2017,4 @@ ENDLD EQU $ |
|
|
|
|
|
|
|
|
END |
|
|
END |
|
|
|
|
|
|
|
|
PUSH HL ;SAVE POI |
|
|
|
|
|
|
|
|
|