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
Version 3.1 Pre-release
02 Feb 2022
28 Feb 2022
Wayne Warthen <wwarthen@gmail.com>

4
ReadMe.txt

@ -1,6 +1,6 @@
RomWBW Getting Started
Wayne Warthen (mailto:wwarthen@gmail.com)
02 Feb 2022
28 Feb 2022
@ -17,7 +17,7 @@ RomWBW
Z80/Z180 System Software
Version 3.1 Pre-release
02 Feb 2022
28 Feb 2022
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 kbdtest && call Build || exit /b & popd
pushd ps2info && call Build || exit /b & popd
pushd 2piotst && call Build || exit /b & popd
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 kbdtest && 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 =
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
TOOLS =../../../Tools

101
Source/Apps/assign.asm

@ -22,12 +22,14 @@
; 2016-04-08 [WBW] Determine key memory addresses dynamically
; 2019-08-07 [WBW] Fixed DPB selection error
; 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-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-12 [WBW] Back out media change flag
; 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:
@ -43,6 +45,7 @@ stksiz .equ $40 ; Working stack size
;
restart .equ $0000 ; CP/M restart vector
bdos .equ $0005 ; BDOS invocation vector
bnksel .equ $FFF3 ; HBIOS bank select vector
;
stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp
;
@ -108,8 +111,11 @@ init:
ld c,$0C ; function number
call bdos ; do it, HL := version
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
ld hl,stamp ; HL := adr or RomWBW zero page stamp
@ -231,18 +237,24 @@ initx:
; CP/M 3 initialization
;
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
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
ld hl,(drvtbl) ; get drive table in HL
@ -278,11 +290,8 @@ initc4:
djnz initc2
;
; 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
xor a ; signal success
@ -397,6 +406,15 @@ usage:
call crlf ; formatting
ld de,msgban1 ; point to version message part 1
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
or a ; set flags
ld de,msghb ; point to HBIOS mode message
@ -404,7 +422,7 @@ usage:
ld de,msgub ; point to UBIOS mode message
call nz,prtstr ; if UNA, say so
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 crlf2 ; blank line
ld de,msguse ; point to usage message
@ -728,13 +746,13 @@ makdph3:
;
;
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
ld hl,(drvtbl) ; get drvtbl address
@ -802,11 +820,8 @@ instc3:
djnz instc1
;
; 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
ld a,$54 ; SCB drive door opened flag
@ -1733,6 +1748,23 @@ cbios:
call addhl ; determine specific function address
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)
;
addhl:
@ -1911,10 +1943,13 @@ stack .equ $ ; stack top
; Messages
;
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
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
.db " ex. ASSIGN (display all active assignments)",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
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
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
;
RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
;
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
RET
;
IOPRVAL .DW 0 ; TEMP STORAGE FOR IOPR
IOPRSAV .DW 0 ; TEMP STORAGE FOR IOPR
;
#ELSE
#IF (CPUFAM == CPU_Z280)
@ -1529,6 +1529,17 @@ MBC_SINGLE:
#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
;
@ -5428,7 +5439,7 @@ Z280_BNKCPY:
; SELECT I/O PAGE $FF
LD C,Z280_IOPR ; I/O PAGE REGISTER
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
LDCTL (C),HL
;
@ -5456,7 +5467,7 @@ Z2DMALOOP:
;
; RESTORE I/O PAGE
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
;
; 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_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_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_BOOT .EQU BID_ROM0 + 0 ; BOOT BANK -+ THESE MAKE
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 RUP 1
#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
rtp equ 0
biosver macro
db "3.1.1-pre.158"
db "3.1.1-pre.159"
endm

3
Tools/Makefile.inc

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

Loading…
Cancel
Save