Browse Source

Minor ASSIGN Fixes, Add 2PIOTST

- Improved ASSIGN operation under CP/M 3 to better handle BIOS function invocations
- Added 2PIOTST for testing the DUALPIO MBC board
- Increased default RAM drive size for ZRC
pull/283/head v3.1.1-pre.159
Wayne Warthen 4 years ago
parent
commit
51d9bdb655
  1. BIN
      Doc/ROM Applications.pdf
  2. BIN
      Doc/RomWBW Applications.pdf
  3. BIN
      Doc/RomWBW Architecture.pdf
  4. BIN
      Doc/RomWBW Disk Catalog.pdf
  5. BIN
      Doc/RomWBW Getting Started.pdf
  6. 2
      ReadMe.md
  7. 4
      ReadMe.txt
  8. 567
      Source/Apps/Test/2piotst/2piotst.mac
  9. 13
      Source/Apps/Test/2piotst/Build.cmd
  10. 8
      Source/Apps/Test/2piotst/Clean.cmd
  11. 8
      Source/Apps/Test/2piotst/Makefile
  12. 1
      Source/Apps/Test/Build.cmd
  13. 1
      Source/Apps/Test/Clean.cmd
  14. 2
      Source/Apps/Test/Makefile
  15. 101
      Source/Apps/assign.asm
  16. 5
      Source/Doc/Applications.md
  17. 1
      Source/HBIOS/Config/RCZ80_zrc.asm
  18. 17
      Source/HBIOS/hbios.asm
  19. 12
      Source/HBIOS/std.asm
  20. 2
      Source/ver.inc
  21. 2
      Source/ver.lib
  22. 3
      Tools/Makefile.inc

BIN
Doc/ROM Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Architecture.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Getting Started.pdf

Binary file not shown.

2
ReadMe.md

@ -3,7 +3,7 @@
## Z80/Z180 System Software ## Z80/Z180 System Software
Version 3.1 Pre-release Version 3.1 Pre-release
02 Feb 2022
28 Feb 2022
Wayne Warthen <wwarthen@gmail.com> Wayne Warthen <wwarthen@gmail.com>

4
ReadMe.txt

@ -1,6 +1,6 @@
RomWBW Getting Started RomWBW Getting Started
Wayne Warthen (mailto:wwarthen@gmail.com) Wayne Warthen (mailto:wwarthen@gmail.com)
02 Feb 2022
28 Feb 2022
@ -17,7 +17,7 @@ RomWBW
Z80/Z180 System Software Z80/Z180 System Software
Version 3.1 Pre-release Version 3.1 Pre-release
02 Feb 2022
28 Feb 2022
Wayne Warthen wwarthen@gmail.com Wayne Warthen wwarthen@gmail.com

567
Source/Apps/Test/2piotst/2piotst.mac

@ -0,0 +1,567 @@
; 24.9.2018 PMS (b1ackmai1er)
; Modified version for ECB-ZILOG PERIPHERALS BOARD - TEST 2 PIO's
; 01.11.2011 WKA
; Assembler M80
; ECB-4PIO
; Testprogramm f�r die I/O-Karte ECB-4PIO in Z80-Mnemonics
PAGE 72
.Z80
ASEG
ORG 100H
;
;CP/M-ADDRESSES
;* * * * * * *
;
BOOT EQU 0 ;WARMBOOT CP/M
BDOS EQU 5 ;ENTRY BDOS
NMI EQU 66H ;Error-ROUTINE
;
;CONSOLE-CODES
;* * * * * * *
;
EOT EQU 4 ;END OF TEXT
BS EQU 8 ;BACKSPACE
TAB EQU 9 ;TABULATOR
LF EQU 0AH ;LINE-FEED
CR EQU 0DH ;CARRIAGE-RETURN
FF EQU 0CH ;FORM-FEED
ESC EQU 1BH ;ESCAPE
CTRLC EQU 'C'-40H ;CONTROL-C
CTRLW EQU 'W'-40H ;CONTROL-W
CTRLX EQU 'X'-40H ;CONTROL-X
CTRLY EQU 'Y'-40H ;CONTROL-Y
CTRLZ EQU 'Z'-40H ;CONTROL-Z
;
BASE EQU 0B8H ; 4 DIL-SCHALTER
;
PIO0AD EQU BASE+0 ; PIO 0 A DATEN
PIO0AC EQU BASE+2 ; PIO 0 A CONTROL
PIO0BD EQU BASE+1 ; PIO 0 B DATEN
PIO0BC EQU BASE+3 ; PIO 0 B CONTROL
;
PIO1AD EQU BASE+4 ; PIO 1 A DATEN
PIO1AC EQU BASE+6 ; PIO 1 A CONTROL
PIO1BD EQU BASE+5 ; PIO 1 B DATEN
PIO1BC EQU BASE+7 ; PIO 1 B CONTROL
;
MAIN: LD DE,PIO_SRTMSG
CALL PSTRIN
;
LD DE,INI_MSG
CALL PSTRIN
CALL INIT
;
LD DE,PIO0ADW ;PIO0 A
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0AD),A
IN A,(PIO0AD)
PUSH AF
;
LD DE,PIO0ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO0ADW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0AD),A
IN A,(PIO0AD)
PUSH AF
;
LD DE,PIO0ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO0BDW ;PIO0 B
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0BD),A
IN A,(PIO0BD)
PUSH AF
;
LD DE,PIO0BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO0BDW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO0BD),A
IN A,(PIO0BD)
PUSH AF
;
LD DE,PIO0BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1ADW ;PIO1 A
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1AD),A
IN A,(PIO1AD)
PUSH AF
;
LD DE,PIO1ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1ADW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1AD),A
IN A,(PIO1AD)
PUSH AF
;
LD DE,PIO1ADR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1BDW ;PIO1 B
CALL PSTRIN
LD A,55H
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1BD),A
IN A,(PIO1BD)
PUSH AF
;
LD DE,PIO1BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO1BDW
CALL PSTRIN
LD A,0AAH
PUSH AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
POP AF
OUT (PIO1BD),A
IN A,(PIO1BD)
PUSH AF
;
LD DE,PIO1BDR
CALL PSTRIN
POP AF
CALL OUTB
LD DE,LINE_E
CALL PSTRIN
;
LD DE,PIO_ENDMSG
CALL PSTRIN
JP BOOT
;
;==========================================================================
INIT: LD HL,PIO0T ; PIO0 INITITALISIEREN
CALL INITX
LD HL,PIO1T ; PIO1 INITITALISIEREN
CALL INITX
RET
;
INITX: LD A,(HL) ; BYTE-ANZAHL
OR A
RET Z
LD B,A ; Port-Adresse nach C
INC HL
LD C,(HL)
INC HL
OTIR
JR INITX
;
PIO0T: DEFB 05 ; 5 BYTE ZUM PIO 0 A CONTROL
DEFB PIO0AC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 0 A DATEN
DEFB PIO0AD
DEFB 00000000B ; DATEN "LOW"
;
DEFB 05 ; 5 BYTE ZUM PIO 0 B CONTROL
DEFB PIO0BC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 0 B DATEN
DEFB PIO0BD
DEFB 00000000B ; DATEN "LOW"
DEFB 0 ; ENDE PIO 0 B -TABELLE
;
PIO1T: DEFB 05 ; 5 BYTE ZUM PIO 1 A CONTROL
DEFB PIO1AC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 1 A DATEN
DEFB PIO1AD
DEFB 00000000B ; DATEN "LOW"
;
DEFB 05 ; 5 BYTE ZUM PIO 1 B CONTROL
DEFB PIO1BC
DEFB 00000011B ; DIS-INT
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 01001111B ; BETR.ART BYTE EINGABE
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
DEFB 00000000B ; ALLES AUSG.
DEFB 01 ; 1 BYTE ZUM PIO 1 B DATEN
DEFB PIO1BD
DEFB 00000000B ; DATEN "LOW"
DEFB 0 ; ENDE PIO 1 B -TABELLE
;
;==========================================================================
;
;Output on Screen
;****************
;
PRBS: LD E,BS
CALL PCHAR
RET
;
;Output CR+LF on Screen
;**********************
;
CRLF: LD E,CR
CALL PCHAR
LD E,LF
CALL PCHAR
RET
;
;Output ASCII-Character
;**********************
;
PRINP: PUSH AF
LD E,A
CALL PCHAR
POP AF
RET;
;
;CALL BDOS with Register Save
;****************************
;
INCHA: LD C,1 ;INPUT CHARACTER TO A
JR BDO
PCHAR: LD C,2 ;PRINT CHARACTER IN E
JR BDO
PSTRIN: LD C,9 ;PRINT STRING
JR BDO
INBUFF: LD C,10 ;READ CONSOLE-BUFFER
JR BDO
CSTS: LD C,11 ;CONSOLE-STATUS
JR BDO
OPEN: LD C,15 ;OPEN FILE
JR BDO
CLOSE: LD C,16 ;CLOSE FILE
JR BDO
DELETE: LD C,19 ;DELETE FILE
JR BDO
READS: LD C,20 ;READ SEEK
JR BDO
WRITES: LD C,21 ;WRITE SEEK
JR BDO
MAKE: LD C,22 ;MAKE FILE
JR BDO
SETDMA: LD C,26 ;SET DMA-ADDRESS
BDO: PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH IY
CALL BDOS
POP IY
POP IX
POP BC
POP DE
POP HL
RET
;
;DIRECT CONSOLE INPUT
;********************
;
INDCON: CALL INDCOX
CP 0
JR Z,INDCON
RET
;
INDCOX: LD C,6 ;Code for Direct Console Input
LD E,0FFH ;Code for Input
PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH IY
CALL BDOS
POP IY
POP IX
POP BC
POP DE
POP HL
RET
;
;
;Output WORD
;***********
;
;PARAMETER: Entry WORD IN HL
;*********
;
OUTW: LD A,H
CALL OUTB
LD A,L
CALL OUTB
RET
;
;Output BYTE
;***********
;
;PARAMETER: Entry BYTE IN A
;*********
;
OUTB: PUSH AF
RRCA
RRCA
RRCA
RRCA
AND 0FH
CALL HBTHE ;Change Half-BYTE
POP AF
AND 0FH
CALL HBTHE
RET
;
;Output HALF-BYTE
;****************
;
;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3)
;*********
;
HBTHE: CP 0AH
JR C,HBTHE1
ADD A,7 ;Character to Letter
HBTHE1: ADD A,30H
LD E,A
CALL PCHAR
RET
;
;Input ADDRESS
;*************
;
;PARAMETER: Exit with ADDRESS IN HL
;*********
;
INADR: LD HL,0
INADR1: CALL INCHAR ;Input TETRADE
LD D,A
CALL INBYT1 ;IN HEXA
RET C ;END OF Input
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
OR L
LD L,A
JR INADR1 ;New Key
;
;
;Input BYTE
;**********
;
;PARAMTER: Exit with BYTE IN A
;********
;
INBYT: CALL INADR
LD A,L
RET
;
;Input of one TETRADE to A (BIT 0-3)
;************************************
;
INBYT1: SUB '0'
RET C
CP 'G'-30H
JR NC,INBYT3 ;Error
CP ':'-30H
JR C,INBYT2
CP 'A'-30H
JR C,INBYT3 ;Error
SUB 7
INBYT2: OR A
RET
;
INBYT3: SCF
RET
;
;Input ASCII-Character to A
;**************************
;
INCON: CALL INDCON ;Input ASCII-Character to A
CP CTRLC ;TEST CONTROL-C
JP Z,QUIT
CP CTRLX ;TEST CONTROL-X
JR Z,INCHA1
CP CTRLW ;TEST CONTROL-W
JR Z,INCHA3
CP CTRLY ;TEST CONTROL-Y
JR Z,INCHA2
CP BS
RET Z
CP CR
RET Z
CP ' '
JR C,INCON
JR INCH1
;
INCHAR: CALL INCHA ;Input ASCII-Character to A
CP CTRLC ;TEST CONTROL-C
JR Z,QUIT
CP CTRLX ;TEST CONTROL-X
JR Z,INCHA1
CP CTRLW ;TEST CONTROL-W
JR Z,INCHA3
CP CTRLY ;TEST CONTROL-Y
JR Z,INCHA2
CP BS
RET Z
CP CR
RET Z
CP ' '
JR C,INCHAR ;Input invalied
;
INCH1: CP 'A'
RET C ;Character ok
;
RES 5,A ;lower case -> upper case
RET
INCHA1: POP HL
LD E,FF
CALL PCHAR ;Clear screen
JP GOON
INCHA2: POP HL
LD E,FF
CALL PCHAR ;Clear screen
JP GOON
INCHA3: LD E,FF
CALL PCHAR
RET
;
;ABBRUCH DER BEARBEITUNG
;***********************
;
COMPLT: LD DE,TCOMP
CALL PSTRIN
JP GOON
QUIT: CALL CRLF
LD DE,TQUIT
JR FINIS
INTTIM: POP DE ;STACK OK
; CALL DESAK
LD DE,TNMIAB
CALL PSTRIN
LD DE,MAIN ;NEW ADDRESS
PUSH DE
RETN
FINIS: CALL PSTRIN ;AT BDOS-ERROR
GOON:
JP BOOT
;
;
;TEXT-Messages
;*************
;
TCOMP: DEFB ESC,21,0,14H,ESC,23,0
DEFM 'Function complete !!$'
TQUIT: DEFB ESC,23,0,14H,7
DEFM 'End Run RAMFTEST$'
TNMIAB: DEFB ESC,23,0,14H
DEFM 'Time Out !!$'
;
;
INI_MSG:DEFM 'ECB-4PIO Init all PIO Bit-Mode ',CR,LF,'$'
PIO0ADW:DEFM 'ECB-4PIO Write to PIO0AD ','$'
PIO0ADR:DEFM 'ECB-4PIO Read from PIO0AD ','$'
PIO0BDW:DEFM 'ECB-4PIO Write to PIO0BD ','$'
PIO0BDR:DEFM 'ECB-4PIO Read from PIO0BD ','$'
PIO1ADW:DEFM 'ECB-4PIO Write to PIO1AD ','$'
PIO1ADR:DEFM 'ECB-4PIO Read from PIO1AD ','$'
PIO1BDW:DEFM 'ECB-4PIO Write to PIO1BD ','$'
PIO1BDR:DEFM 'ECB-4PIO Read from PIO1BD ','$'
PIO_SRTMSG:
DEFM 'ECB-ZILOG PERIPHERALS start test 1.0',CR,LF,'$'
PIO_ENDMSG:
DEFM 'ECB-ZILOG PERIPHERALS end test 1.0',CR,LF,'$'
LINE_E: DEFM 'H',CR,LF,'$'
;
IF1
.PRINTX 'Pass 1 complete'
ENDIF
;
IF2
.PRINTX 'Pass 2 complete'
.PRINTX 'Assembly complete'
ENDIF
;
END

13
Source/Apps/Test/2piotst/Build.cmd

@ -0,0 +1,13 @@
@echo off
setlocal
set TOOLS=..\..\..\..\Tools
set PATH=%TOOLS%\zxcc;%PATH%
set CPMDIR80=%TOOLS%/cpm/
zxcc M80 -=2piotst/l || exit /b
zxcc L80 -2piotst,2piotst.com/n/e || exit /b
copy /Y 2piotst.com ..\..\..\..\Binary\Apps\Test\ || exit /b

8
Source/Apps/Test/2piotst/Clean.cmd

@ -0,0 +1,8 @@
@echo off
setlocal
if exist *.com del *.com
if exist *.lst del *.lst
if exist *.bin del *.bin
if exist *.rel del *.rel
if exist *.prn del *.prn

8
Source/Apps/Test/2piotst/Makefile

@ -0,0 +1,8 @@
OBJECTS = 2piotst.com
DEST = ../../../../Binary/Apps/Test
TOOLS =../../../../Tools
OTHERS = *.rel
include $(TOOLS)/Makefile.inc
2piotst.com : 2piotst.rel

1
Source/Apps/Test/Build.cmd

@ -20,6 +20,7 @@ pushd rzsz && call Build || exit /b & popd
pushd vdctest && call Build || exit /b & popd pushd vdctest && call Build || exit /b & popd
pushd kbdtest && call Build || exit /b & popd pushd kbdtest && call Build || exit /b & popd
pushd ps2info && call Build || exit /b & popd pushd ps2info && call Build || exit /b & popd
pushd 2piotst && call Build || exit /b & popd
goto :eof goto :eof

1
Source/Apps/Test/Clean.cmd

@ -17,3 +17,4 @@ pushd rzsz && call Clean || exit /b 1 & popd
pushd vdctest && call Clean || exit /b 1 & popd pushd vdctest && call Clean || exit /b 1 & popd
pushd kbdtest && call Clean || exit /b 1 & popd pushd kbdtest && call Clean || exit /b 1 & popd
pushd ps2info && call Clean || exit /b 1 & popd pushd ps2info && call Clean || exit /b 1 & popd
pushd 2piotst && call Clean || exit /b 1 & popd

2
Source/Apps/Test/Makefile

@ -1,5 +1,5 @@
OBJECTS = OBJECTS =
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst
DEST = ../../../Binary/Apps/Test DEST = ../../../Binary/Apps/Test
TOOLS =../../../Tools TOOLS =../../../Tools

101
Source/Apps/assign.asm

@ -22,12 +22,14 @@
; 2016-04-08 [WBW] Determine key memory addresses dynamically ; 2016-04-08 [WBW] Determine key memory addresses dynamically
; 2019-08-07 [WBW] Fixed DPB selection error ; 2019-08-07 [WBW] Fixed DPB selection error
; 2019-11-17 [WBW] Added preliminary CP/M 3 support ; 2019-11-17 [WBW] Added preliminary CP/M 3 support
; 2019-12-24 [WBW] Fixed location of BIOS save area\
; 2019-12-24 [WBW] Fixed location of BIOS save area
; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes) ; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes)
; 2020-05-06 [WBW] Add patch level to version compare ; 2020-05-06 [WBW] Add patch level to version compare
; 2020-05-10 [WBW] Set media change flag in XDPH for CP/M 3 ; 2020-05-10 [WBW] Set media change flag in XDPH for CP/M 3
; 2020-05-12 [WBW] Back out media change flag ; 2020-05-12 [WBW] Back out media change flag
; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc ; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc
; 2022-02-28 [WBW] Use HBIOS to swap banks under CP/M 3
; Use CPM3 BDOS direct BIOS call to get DRVTBL adr
;_______________________________________________________________________________ ;_______________________________________________________________________________
; ;
; ToDo: ; ToDo:
@ -43,6 +45,7 @@ stksiz .equ $40 ; Working stack size
; ;
restart .equ $0000 ; CP/M restart vector restart .equ $0000 ; CP/M restart vector
bdos .equ $0005 ; BDOS invocation vector bdos .equ $0005 ; BDOS invocation vector
bnksel .equ $FFF3 ; HBIOS bank select vector
; ;
stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp
; ;
@ -108,8 +111,11 @@ init:
ld c,$0C ; function number ld c,$0C ; function number
call bdos ; do it, HL := version call bdos ; do it, HL := version
ld (cpmver),hl ; save it ld (cpmver),hl ; save it
ld a,l ; low byte
cp $30 ; CP/M 3.0?
;push hl ; *debug*
;pop bc ; *debug*
;call prthexword ; *debug*
;ld a,l ; low byte
;cp $30 ; CP/M 3.0?
; ;
; get location of config data and verify integrity ; get location of config data and verify integrity
ld hl,stamp ; HL := adr or RomWBW zero page stamp ld hl,stamp ; HL := adr or RomWBW zero page stamp
@ -231,18 +237,24 @@ initx:
; CP/M 3 initialization ; CP/M 3 initialization
; ;
initcpm3: initcpm3:
ld hl,(bioloc)
ld de,22*3 ; offset of DRVTBL func
add hl,de ; HL := DRVTBL func
call jphl ; do it, HL := DRVTBL adr
ld (drvtbl),hl ; save it
ld a,22 ; XBIOS DRVTBL function
call xbios ; Invoke XBIOS
ld (drvtbl),hl ; save DRVTBL address
;
; The CP/M 3 drvtbl is in common memory, but the XDPHs are not.
; So, here we temporarily swap the bank to the CP/M 3 system
; bank. We cannot use the CP/M Direct BIOS call because it
; explicitly blocks use of SELMEM, so we are foreced to use
; HBIOS call. The CP/M 3 system bank is always the HBIOS
; user bank.
; ;
; switch to sysbnk ; switch to sysbnk
ld hl,(bioloc)
ld de,27*3 ; offset of SELMEM func
add hl,de ; HL := SELMEM func
ld a,0 ; bank 0 is system bank
call jphl
ld a,($FFE0) ; get current bank
push af ; save it
ld bc,$F8F2 ; HBIOS Get Bank Info
rst 08 ; call HBIOS, E=User Bank
ld a,e ; HBIOS User Bank
call bnksel ; HBIOS BNKSEL
; ;
; copy CP/M 3 drvtbl to drvmap working copy ; copy CP/M 3 drvtbl to drvmap working copy
ld hl,(drvtbl) ; get drive table in HL ld hl,(drvtbl) ; get drive table in HL
@ -278,11 +290,8 @@ initc4:
djnz initc2 djnz initc2
; ;
; switch back to tpabnk ; switch back to tpabnk
ld hl,(bioloc)
ld de,27*3 ; offset of SELMEM func
add hl,de ; HL := SELMEM func
ld a,1 ; bank 1 is tpa bank
call jphl
pop af ; recover prev bank
call bnksel ; HBIOS BNKSEL
; ;
; return success ; return success
xor a ; signal success xor a ; signal success
@ -397,6 +406,15 @@ usage:
call crlf ; formatting call crlf ; formatting
ld de,msgban1 ; point to version message part 1 ld de,msgban1 ; point to version message part 1
call prtstr ; print it call prtstr ; print it
ld de,msg22 ; assume CP/M 2.2
ld a,(cpmver) ; low byte of ver
cp $30 ; CP/M 3.0?
jp c,usage1 ; if not, jump ahead
ld de,msg3 ; CP/M 3
usage1:
call prtstr
ld de,msbban2 ; next portion of banner
call prtstr
ld a,(unamod) ; get UNA flag ld a,(unamod) ; get UNA flag
or a ; set flags or a ; set flags
ld de,msghb ; point to HBIOS mode message ld de,msghb ; point to HBIOS mode message
@ -404,7 +422,7 @@ usage:
ld de,msgub ; point to UBIOS mode message ld de,msgub ; point to UBIOS mode message
call nz,prtstr ; if UNA, say so call nz,prtstr ; if UNA, say so
call crlf ; formatting call crlf ; formatting
ld de,msgban2 ; point to version message part 2
ld de,msgban3 ; point to version message part 2
call prtstr ; print it call prtstr ; print it
call crlf2 ; blank line call crlf2 ; blank line
ld de,msguse ; point to usage message ld de,msguse ; point to usage message
@ -728,13 +746,13 @@ makdph3:
; ;
; ;
instcpm3: instcpm3:
;
; switch to sysbnk
ld hl,(bioloc)
ld de,27*3 ; offset of SELMEM func
add hl,de ; HL := SELMEM func
ld a,0 ; bank 0 is system bank
call jphl
; swicth to sysbnk
ld a,($FFE0) ; get current bank
push af ; save it
ld bc,$F8F2 ; HBIOS Get Bank Info
rst 08 ; call HBIOS, E=User Bank
ld a,e ; HBIOS User Bank
call $FFF3 ; HBIOS BNKSEL
; ;
; copy drvmap working copy to CP/M 3 drvtbl ; copy drvmap working copy to CP/M 3 drvtbl
ld hl,(drvtbl) ; get drvtbl address ld hl,(drvtbl) ; get drvtbl address
@ -802,11 +820,8 @@ instc3:
djnz instc1 djnz instc1
; ;
; switch back to tpabnk ; switch back to tpabnk
ld hl,(bioloc)
ld de,27*3 ; offset of SELMEM func
add hl,de ; HL := SELMEM func
ld a,1 ; bank 1 is tpa bank
call jphl
pop af ; recover prev bank
call $FFF3 ; HBIOS BNKSEL
; ;
; set SCB drive door open flag ; set SCB drive door open flag
ld a,$54 ; SCB drive door opened flag ld a,$54 ; SCB drive door opened flag
@ -1733,6 +1748,23 @@ cbios:
call addhl ; determine specific function address call addhl ; determine specific function address
jp (hl) ; invoke CBIOS jp (hl) ; invoke CBIOS
; ;
; Routine to call CPM3 BIOS routines via BDOS
; function 50.
;
xbios:
ld (biofnc),a ; set BIOS function
ld c,50 ; direct BIOS call function
ld (dereg),de ; set DE parm
ld de,biospb ; BIOS parameter block
jp bdos ; invoke BDOS
;
biospb:
biofnc .db 0 ; BIOS function
areg .db 0 ; A register
bcreg .dw 0 ; BC register
dereg .dw 0 ; DE register
hlreg .dw 0 ; HL register
;
; Add the value in A to HL (HL := HL + A) ; Add the value in A to HL (HL := HL + A)
; ;
addhl: addhl:
@ -1911,10 +1943,13 @@ stack .equ $ ; stack top
; Messages ; Messages
; ;
indent .db " ",0 indent .db " ",0
msgban1 .db "ASSIGN v1.4a for RomWBW CP/M, 6-Dec-2021",0
msgban1 .db "ASSIGN v1.5 for RomWBW CP/M ",0
msg22 .db "2.2",0
msg3 .db "3",0
msbban2 .db ", 28-Feb-2022",0
msghb .db " (HBIOS Mode)",0 msghb .db " (HBIOS Mode)",0
msgub .db " (UBIOS Mode)",0 msgub .db " (UBIOS Mode)",0
msgban2 .db "Copyright 2021, Wayne Warthen, GNU GPL v3",0
msgban3 .db "Copyright 2021, Wayne Warthen, GNU GPL v3",0
msguse .db "Usage: ASSIGN D:[=[{D:|<device>[<unitnum>]:[<slicenum>]}]][,...]",13,10 msguse .db "Usage: ASSIGN D:[=[{D:|<device>[<unitnum>]:[<slicenum>]}]][,...]",13,10
.db " ex. ASSIGN (display all active assignments)",13,10 .db " ex. ASSIGN (display all active assignments)",13,10
.db " ASSIGN /? (display version and usage)",13,10 .db " ASSIGN /? (display version and usage)",13,10

5
Source/Doc/Applications.md

@ -168,6 +168,11 @@ This command is particularly sensitive to being matched to the
appropriate version of the RomWBW ROM you are using. Be very careful appropriate version of the RomWBW ROM you are using. Be very careful
to keep all copies of `ASSIGN.COM` up to date with your ROM. to keep all copies of `ASSIGN.COM` up to date with your ROM.
Additionally, the `ASSIGN` command must be able to adjust to CP/M 2.2
vs. CP/M 3. If you utilize an RSX that modifies the BDOS version
returned, you are likely to have serious problems. In this case, be
sure to use `ASSIGN` prior to loading the RSX or after it is unloaded.
## Etymology ## Etymology
The `ASSIGN` command is an original product and the source code is The `ASSIGN` command is an original product and the source code is

1
Source/HBIOS/Config/RCZ80_zrc.asm

@ -30,6 +30,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
; ;
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
; ;
RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
; ;
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)

17
Source/HBIOS/hbios.asm

@ -575,7 +575,7 @@ HBX_BNKCPY:
SC Z280_BNKCPYX ; SYSCALL TO BNKCPYX SC Z280_BNKCPYX ; SYSCALL TO BNKCPYX
RET RET
; ;
IOPRVAL .DW 0 ; TEMP STORAGE FOR IOPR
IOPRSAV .DW 0 ; TEMP STORAGE FOR IOPR
; ;
#ELSE #ELSE
#IF (CPUFAM == CPU_Z280) #IF (CPUFAM == CPU_Z280)
@ -1529,6 +1529,17 @@ MBC_SINGLE:
#ENDIF #ENDIF
; ;
#ENDIF #ENDIF
;
; IF THIS IS NOT A ROMBOOT, THEN WE NEED TO COPY THE "APP" BANK TO
; TPA. IT IS DONE PRIOR TO COPYING HBIOS TO IT'S FINAL BANK BECAUSE
; THE SOURCE OF THE APP BANK CODE MAY BE THE BANK THAT HBIOS WANTS TO
; USE AS IT'S FINAL LOCATION (PRIMARILY IN CASE OF RAMBOOT WHERE THE
; SYSTEM HAS THE MINIMUM 128KB OF RAM).
;
; ;
; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION ; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION
; ;
@ -5428,7 +5439,7 @@ Z280_BNKCPY:
; SELECT I/O PAGE $FF ; SELECT I/O PAGE $FF
LD C,Z280_IOPR ; I/O PAGE REGISTER LD C,Z280_IOPR ; I/O PAGE REGISTER
LDCTL HL,(C) ; GET CURRENT I/O PAGE LDCTL HL,(C) ; GET CURRENT I/O PAGE
LD (IOPRVAL),HL ; SAVE IT
LD (IOPRSAV),HL ; SAVE IT
LD L,$FF ; I/O PAGE $FF LD L,$FF ; I/O PAGE $FF
LDCTL (C),HL LDCTL (C),HL
; ;
@ -5456,7 +5467,7 @@ Z2DMALOOP:
; ;
; RESTORE I/O PAGE ; RESTORE I/O PAGE
LD C,Z280_IOPR ; I/O PAGE REGISTER LD C,Z280_IOPR ; I/O PAGE REGISTER
LD HL,(IOPRVAL) ; RESTORE I/O PAGE
LD HL,(IOPRSAV) ; RESTORE I/O PAGE
LDCTL (C),HL LDCTL (C),HL
; ;
; SETUP RETURN VALUES ; SETUP RETURN VALUES

12
Source/HBIOS/std.asm

@ -513,13 +513,13 @@ BID_RAMN .EQU (BID_RAM0 + ((RAMSIZE / 32) - 1))
; ;
BID_RAMD0 .EQU BID_RAM0 ; FIRST RAM DRIVE BANK ^ RAM BID_RAMD0 .EQU BID_RAM0 ; FIRST RAM DRIVE BANK ^ RAM
BID_RAMDN .EQU BID_RAMN - TOT_RAM_RB ; LAST RAM DRIVE BANK | DRIVE BID_RAMDN .EQU BID_RAMN - TOT_RAM_RB ; LAST RAM DRIVE BANK | DRIVE
; ; OS BUFFERS CP/M3? -+ THESE
; ; OS BUFFERS CP/M3? | MAKE
; ; OS BUFFERS CP/M3? | UP
; ; OS BUFFERS CP/M3? | THE
BID_AUX .EQU BID_RAMN - 3 ; AUX BANK (BPBIOS, ETC.) | 256KB
; ; OS BUFFERS CP/M3? -+ THESE CPM3 BNK 5 (BUF)
; ; OS BUFFERS CP/M3? | MAKE CPM3 BNK 4 (BUF)
; ; OS BUFFERS CP/M3? | UP CPM3 BNK 3 (BUF)
; ; OS BUFFERS CP/M3? | THE CPM3 BNK 2 (BUF)
BID_AUX .EQU BID_RAMN - 3 ; AUX BANK (BPBIOS, ETC.) | 256KB CPM3 BNK 1 (TPA)
BID_BIOS .EQU BID_RAMN - 2 ; BIOS BANK | RESERVED BID_BIOS .EQU BID_RAMN - 2 ; BIOS BANK | RESERVED
BID_USR .EQU BID_RAMN - 1 ; USER BANK (CP/M TPA, ETC.) | RAM
BID_USR .EQU BID_RAMN - 1 ; USER BANK (CP/M TPA, ETC.) | RAM CPM3 BNK 0 (OS)
BID_COM .EQU BID_RAMN - 0 ; COMMON BANK, UPPER 32K -+ BANKS BID_COM .EQU BID_RAMN - 0 ; COMMON BANK, UPPER 32K -+ BANKS
BID_BOOT .EQU BID_ROM0 + 0 ; BOOT BANK -+ THESE MAKE BID_BOOT .EQU BID_ROM0 + 0 ; BOOT BANK -+ THESE MAKE
BID_IMG0 .EQU BID_ROM0 + 1 ; ROM LOADER AND FIRST IMAGES BANK | UP THE 128KB BID_IMG0 .EQU BID_ROM0 + 1 ; ROM LOADER AND FIRST IMAGES BANK | UP THE 128KB

2
Source/ver.inc

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

2
Source/ver.lib

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

3
Tools/Makefile.inc

@ -112,6 +112,9 @@ CPM=$(TOOLS)/cpm/bin80/
%.rel: %.mac %.rel: %.mac
$(ZXCC) $(CPM)/M80 -=$(basename $<) $(ZXCC) $(CPM)/M80 -=$(basename $<)
%.com: %.rel
$(ZXCC) $(CPM)/L80 -$(basename $<),$(basename $<).com/n/e
ifeq ($(UNAME), Linux) ifeq ($(UNAME), Linux)
%.eeprom: %.spin %.eeprom: %.spin
$(BSTC) -e -l $< $(BSTC) -e -l $<

Loading…
Cancel
Save