diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 2afffb6e..76cd3d01 100644 --- a/Doc/ChangeLog.txt +++ b/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 ----------- diff --git a/Makefile b/Makefile index 487cb9a7..0f5dc20d 100644 --- a/Makefile +++ b/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 diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index 9669d92f..64b62889 100755 --- a/Source/HBIOS/Build.sh +++ b/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 diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index abf6854c..f002e93b 100644 --- a/Source/HBIOS/Makefile +++ b/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 \ diff --git a/Source/HBIOS/cfg_una.asm b/Source/HBIOS/cfg_una.asm index 4dd506ea..387acc1a 100644 --- a/Source/HBIOS/cfg_una.asm +++ b/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 diff --git a/Source/HBIOS/hbios_env.asm b/Source/HBIOS/hbios_env.asm index 16356176..92b81ca3 100644 --- a/Source/HBIOS/hbios_env.asm +++ b/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 diff --git a/Source/ZCPR-DJ/Build.cmd b/Source/ZCPR-DJ/Build.cmd index 16de441d..ae7fdaa5 100644 --- a/Source/ZCPR-DJ/Build.cmd +++ b/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 \ No newline at end of file +zxcc L80 -zcpr,zcpr.bin/n/e || exit /b + +zxcc M80 -=zcprdemo/l || exit /b +zxcc L80 -zcprdemo,zcprdemo/n/e || exit /b \ No newline at end of file diff --git a/Source/ZCPR-DJ/Clean.cmd b/Source/ZCPR-DJ/Clean.cmd index 9a57c248..cf21950d 100644 --- a/Source/ZCPR-DJ/Clean.cmd +++ b/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 diff --git a/Source/ZCPR-DJ/zcpr.mac b/Source/ZCPR-DJ/zcpr.mac index 04b54040..19f66588 100644 --- a/Source/ZCPR-DJ/zcpr.mac +++ b/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 diff --git a/Source/ZCPR-DJ/zcprdemo.com b/Source/ZCPR-DJ/zcprdemo.com deleted file mode 100644 index 83cc9798..00000000 Binary files a/Source/ZCPR-DJ/zcprdemo.com and /dev/null differ diff --git a/Source/ZCPR-DJ/zcpr.mac.bak b/Source/ZCPR-DJ/zcprdemo.mac similarity index 88% rename from Source/ZCPR-DJ/zcpr.mac.bak rename to Source/ZCPR-DJ/zcprdemo.mac index 253f3e57..d00820d0 100644 --- a/Source/ZCPR-DJ/zcpr.mac.bak +++ b/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 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 \ No newline at end of file + \ No newline at end of file diff --git a/Source/ver.inc b/Source/ver.inc index 413d9e41..f43b3219 100644 --- a/Source/ver.inc +++ b/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" diff --git a/Source/ver.lib b/Source/ver.lib index f8b73c62..9ab293f0 100644 --- a/Source/ver.lib +++ b/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 diff --git a/Tools/Makefile.inc b/Tools/Makefile.inc index c6813efa..35258860 100644 --- a/Tools/Makefile.inc +++ b/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) ; \