mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-07 23:13:13 -06:00
Compare commits
3 Commits
v3.3.0-dev
...
v3.3.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
364e48a5d3 | ||
|
|
63cb89dcfc | ||
|
|
6e316b46f0 |
@@ -7,6 +7,7 @@ Version 3.3
|
||||
- WBW: Support per-drive floppy configuration
|
||||
- WBW: Support for Bill Shen's VGARC
|
||||
- WBW: Support for MG014 Parallel Port module + printer
|
||||
- WBW: Support for Zip Drive on emm interface (much inspiration from Alan Cox)
|
||||
|
||||
Version 3.2.1
|
||||
-------------
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
**RomWBW ReadMe** \
|
||||
Version 3.3 \
|
||||
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
|
||||
03 May 2023
|
||||
23 May 2023
|
||||
|
||||
# Overview
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
RomWBW ReadMe
|
||||
Wayne Warthen (wwarthen@gmail.com)
|
||||
03 May 2023
|
||||
23 May 2023
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1918,8 +1918,8 @@ dev06 .db "SD",0
|
||||
dev07 .db "PRPSD",0
|
||||
dev08 .db "PPPSD",0
|
||||
dev09 .db "HDSK",0
|
||||
dev10 .equ devunk
|
||||
dev11 .equ devunk
|
||||
dev10 .db "PPA",0
|
||||
dev11 .db "IMM",0
|
||||
dev12 .equ devunk
|
||||
dev13 .equ devunk
|
||||
dev14 .equ devunk
|
||||
|
||||
@@ -2929,6 +2929,12 @@ DRV_INIT3:
|
||||
RET
|
||||
;
|
||||
DRV_INIT3A:
|
||||
; CHECK FOR HARD DISK REMOVABLE CARTRIDGE DRIVES
|
||||
CP DIODEV_PPA ; PPA (ZIP DRIVE) IS REMOVABLE
|
||||
JR Z,DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
|
||||
CP DIODEV_IMM ; IMM (ZIP DRIVE) IS REMOVABLE
|
||||
JR Z,DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
|
||||
|
||||
; CHECK FOR ACTIVE AND RETURN IF NOT
|
||||
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
|
||||
PUSH HL ; SAVE DRIVE LIST PTR
|
||||
@@ -2944,6 +2950,7 @@ DRV_INIT3A:
|
||||
|
||||
RET NZ ; IF NO MEDIA, JUST RETURN
|
||||
|
||||
DRV_INIT3B:
|
||||
; IF ACTIVE...
|
||||
LD (HL),C ; SAVE UNIT NUM IN LIST
|
||||
INC HL ; BUMP PTR
|
||||
@@ -3392,8 +3399,8 @@ DEV06 .DB "SD$"
|
||||
DEV07 .DB "PRPSD$"
|
||||
DEV08 .DB "PPPSD$"
|
||||
DEV09 .DB "HDSK$"
|
||||
DEV10 .EQU DEVUNK
|
||||
DEV11 .EQU DEVUNK
|
||||
DEV10 .DB "PPA$"
|
||||
DEV11 .DB "IMM$"
|
||||
DEV12 .EQU DEVUNK
|
||||
DEV13 .EQU DEVUNK
|
||||
DEV14 .EQU DEVUNK
|
||||
|
||||
@@ -181,6 +181,12 @@ dinit3:
|
||||
ret
|
||||
;
|
||||
dinit3a:
|
||||
; check for hard disk removable cartridge drives
|
||||
cp 0A0h ; ppa (zip drive) is removable
|
||||
jr z,dinit3b ; if so, skip media check
|
||||
cp 0B0h ; imm (zip drive) is removable
|
||||
jr z,dinit3b ; if so, skip media check
|
||||
|
||||
; check for active and return if not
|
||||
push de ; save de (hard disk volume counter)
|
||||
push hl ; save drive list ptr
|
||||
@@ -195,7 +201,8 @@ dinit3a:
|
||||
pop de ; restore de
|
||||
|
||||
ret nz ; if no media, just return
|
||||
|
||||
|
||||
dinit3b:
|
||||
; if active...
|
||||
ld (hl),c ; save unit num in list
|
||||
inc hl ; bump ptr
|
||||
|
||||
@@ -889,6 +889,28 @@ written in C and requires SDCC to compile. As such it is not part of
|
||||
the RomWBW build process. However, the full project and source code is
|
||||
found in the [FAT GitHub Repository](https://github.com/wwarthen/FAT).
|
||||
|
||||
## Known Issues
|
||||
|
||||
CP/M (and workalike) OSes have significant restrictions on filename
|
||||
characters. The FAT application will block any attempt to create a
|
||||
file on the CP/M filesystem containing any of these prohibited
|
||||
characters:
|
||||
|
||||
| `< > . , ; : = ? * [ ] _ % | ( ) / \`
|
||||
|
||||
The operation will be aborted with "`Error: Invalid Path Name`" if such
|
||||
a filename character is encountered.
|
||||
|
||||
Since MS-DOS does allow some of these characters, you can have
|
||||
issues when copying files from MS-DOS to CP/M if the MS-DOS filenames
|
||||
use these characters. Unfortunately, FAT is not yet smart enough to
|
||||
substitute illegal characters with legal ones. So, you will need to
|
||||
clean the filenames before trying to copy them to CP/M.
|
||||
|
||||
The FAT application does try to detect the scenario where you are
|
||||
copying a file to itself. However, this detection is not perfect and
|
||||
can corrupt a file if it occurs. Be careful to avoid this.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# TUNE
|
||||
|
||||
@@ -3896,7 +3896,8 @@ may be discovered by RomWBW in your system.
|
||||
| DSKY | System | Keypad & Display |
|
||||
| DSRTC | RTC | Maxim DS1302 Real-Time Clock w/ NVRAM |
|
||||
| DUART | Char | SCC2681 or compatible Dual UART |
|
||||
| FD | Disk | 8272 of compatible Floppy Disk Controller |
|
||||
| EMM | Disk | Disk drive on Parallel Port emm interface (Zip Drive) |
|
||||
| FD | Disk | 8272 or compatible Floppy Disk Controller |
|
||||
| GDC | Video | uPD7220 Video Display Controller |
|
||||
| HDSK | Disk | SIMH Simulator Hard Disk |
|
||||
| IDE | Disk | IDE/ATA Hard Disk Interface |
|
||||
|
||||
Binary file not shown.
@@ -75,5 +75,6 @@ IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
|
||||
@@ -72,5 +72,6 @@ IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
|
||||
@@ -67,5 +67,6 @@ IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
|
||||
@@ -61,5 +61,6 @@ PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|USR]
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
|
||||
@@ -82,5 +82,6 @@ IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
|
||||
@@ -59,5 +59,6 @@ IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
|
||||
@@ -63,5 +63,6 @@ IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
|
||||
@@ -252,6 +252,10 @@ PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
|
||||
;
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -317,6 +317,22 @@ LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
|
||||
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
|
||||
@@ -241,6 +241,22 @@ LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
|
||||
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
|
||||
@@ -254,6 +254,10 @@ LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
|
||||
@@ -247,6 +247,10 @@ PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
|
||||
;
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
|
||||
@@ -263,6 +263,22 @@ LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
|
||||
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -267,6 +267,22 @@ LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
|
||||
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -258,9 +258,25 @@ LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
|
||||
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
|
||||
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
|
||||
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -236,6 +236,10 @@ PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
|
||||
;
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
|
||||
@@ -234,11 +234,10 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
|
||||
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
|
||||
;
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
|
||||
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
|
||||
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
|
||||
|
||||
@@ -257,6 +257,22 @@ LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR
|
||||
LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
|
||||
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
|
||||
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -206,6 +206,10 @@ PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
;
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -177,6 +177,10 @@ PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
;
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -188,6 +188,10 @@ PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
;
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
|
||||
@@ -1261,11 +1261,11 @@ Z280_INITZ:
|
||||
|
||||
; SET DEFAULT CPU CLOCK MULTIPLIERS (XTAL / 2)
|
||||
;
|
||||
; IT HAS BEEN REPORTED THAT CMR NEEDS TO BE SET PRIOR TO CCR
|
||||
; WHEN USING AN INPUT FREQUENCY THAT IS XTAL / 2.
|
||||
; I NEVER EXPERIENCED A PROBLEM RELATED TO ORDER, BUT JUST
|
||||
; BILL MCMULLEN REPORTED THAT CMR NEEDS TO BE SET PRIOR TO CCR
|
||||
; WHEN USING A CPU FREQUENCY (PHI) THAT IS XTAL * 2.
|
||||
; HERE WE ARE SETTING CPU FREQUENCY TO XTAL / 2, BUT JUST
|
||||
; FOR GOOD MEASURE, CMR IS SET PRIOR TO CCR BELOW.
|
||||
; https://www.retrobrewcomputers.org/forum/index.php?t=msg&th=316&#msg_5045
|
||||
; https://www.retrobrewcomputers.org/forum/index.php?t=msg&th=316&goto=5045&#msg_5045
|
||||
XOR A
|
||||
OUT0 (Z180_CMR),A
|
||||
OUT0 (Z180_CCR),A
|
||||
@@ -3239,6 +3239,12 @@ HB_INITTBL:
|
||||
#IF (HDSKENABLE)
|
||||
.DW HDSK_INIT
|
||||
#ENDIF
|
||||
#IF (PPAENABLE)
|
||||
.DW PPA_INIT
|
||||
#ENDIF
|
||||
#IF (IMMENABLE)
|
||||
.DW IMM_INIT
|
||||
#ENDIF
|
||||
#IF (PRPENABLE)
|
||||
.DW PRP_INIT
|
||||
#ENDIF
|
||||
@@ -6348,6 +6354,24 @@ SIZ_HDSK .EQU $ - ORG_HDSK
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPAENABLE)
|
||||
ORG_PPA .EQU $
|
||||
#INCLUDE "ppa.asm"
|
||||
SIZ_PPA .EQU $ - ORG_PPA
|
||||
.ECHO "PPA occupies "
|
||||
.ECHO SIZ_PPA
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (IMMENABLE)
|
||||
ORG_IMM .EQU $
|
||||
#INCLUDE "imm.asm"
|
||||
SIZ_IMM .EQU $ - ORG_IMM
|
||||
.ECHO "IMM occupies "
|
||||
.ECHO SIZ_IMM
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (TERMENABLE)
|
||||
ORG_TERM .EQU $
|
||||
#INCLUDE "term.asm"
|
||||
@@ -6762,7 +6786,6 @@ PS_PRTDC:
|
||||
RES 7,D ; CLEAR LBA BIT
|
||||
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
|
||||
CALL SRL32 ; RIGHT SHIFT
|
||||
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
|
||||
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
|
||||
PRTS("MB$") ; PRINT SUFFIX
|
||||
CALL PC_COMMA
|
||||
@@ -6777,7 +6800,6 @@ PS_PRTDC1:
|
||||
RES 7,D ; CLEAR LBA BIT
|
||||
LD B,1 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
|
||||
CALL SRL32 ; RIGHT SHIFT
|
||||
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
|
||||
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
|
||||
PRTS("KB$") ; PRINT SUFFIX
|
||||
CALL PC_COMMA
|
||||
@@ -7134,6 +7156,8 @@ PS_DDSD .TEXT "SD$"
|
||||
PS_DDPRPSD .TEXT "PRPSD$"
|
||||
PS_DDPPPSD .TEXT "PPPSD$"
|
||||
PS_DDHDSK .TEXT "HDSK$"
|
||||
PS_DDPPA .TEXT "PPA$"
|
||||
PS_DDIMM .TEXT "IMM$"
|
||||
;
|
||||
; DISK TYPE STRINGS
|
||||
;
|
||||
|
||||
@@ -321,6 +321,8 @@ DIODEV_SD .EQU $60
|
||||
DIODEV_PRPSD .EQU $70
|
||||
DIODEV_PPPSD .EQU $80
|
||||
DIODEV_HDSK .EQU $90
|
||||
DIODEV_PPA .EQU $A0
|
||||
DIODEV_IMM .EQU $B0
|
||||
;
|
||||
; RTC DEVICE IDS
|
||||
;
|
||||
|
||||
1552
Source/HBIOS/imm.asm
Normal file
1552
Source/HBIOS/imm.asm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -372,7 +372,7 @@ LPT_PRTCFG:
|
||||
CALL PRTHEXBYTE ; PRINT BASE PORT
|
||||
|
||||
; PRINT THE LPT TYPE
|
||||
CALL PC_SPACE ; FORMATTING
|
||||
PRTS(": MODE=$") ; FORMATTING
|
||||
LD A,(IY+1) ; GET LPT TYPE BYTE
|
||||
RLCA ; MAKE IT A WORD OFFSET
|
||||
LD HL,LPT_TYPE_MAP ; POINT HL TO TYPE MAP TABLE
|
||||
|
||||
892
Source/HBIOS/ppa.asm
Normal file
892
Source/HBIOS/ppa.asm
Normal file
@@ -0,0 +1,892 @@
|
||||
;
|
||||
;=============================================================================
|
||||
; PPA DISK DRIVER
|
||||
;=============================================================================
|
||||
;
|
||||
; PARALLEL PORT INTERFACE FOR SCSI DISK DEVICES USING A PARALLEL PORT
|
||||
; ADAPTER. PRIMARILY TARGETS PARALLEL PORT IOMEGA ZIP DRIVES.
|
||||
;
|
||||
; CURRENTLY CODED SPECIFICALLY FOR RCBUS MG014 PARALLEL PORT HARDWARE.
|
||||
; INTENDED TO CO-EXIST WITH LPT DRIVER.
|
||||
;
|
||||
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
|
||||
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
|
||||
;
|
||||
; 5/23/2023 WBW - INITIAL RELEASE
|
||||
; 5/26/3023 WBW - CLEAN UP, LED ACTIVITY
|
||||
;
|
||||
;=============================================================================
|
||||
;
|
||||
; MG014 STYLE INTERFACE (USED BY RCBUS MG014 MODULE):
|
||||
;
|
||||
; PORT 0 (INPUT/OUTPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PD1 | PD0 |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
; PORT 1 (INPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | | | | /ERR | SEL | POUT | BUSY | /ACK |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
; PORT 2 (INPUT/OUTPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | LED | | | | /SEL | /RES | /LF | /STB |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
;=============================================================================
|
||||
;
|
||||
; TODO:
|
||||
;
|
||||
; - CLEAN UP WAIT LOOP STUFF
|
||||
;
|
||||
; - OPTIMIZE READ/WRITE LOOPS
|
||||
;
|
||||
; NOTES:
|
||||
;
|
||||
; - THIS DRIVER IS FOR THE ZIP DRIVE PPA INTERFACE. IT WILL SIMPLY
|
||||
; FAIL TO EVEN RECOGNIZE A ZIP DRIVE WITH THE OLDER PPA INTERFACE.
|
||||
; THERE DOES NOT SEEM TO BE A WAY TO VISUALLY DETERMINE IF A ZIP
|
||||
; DRIVE IS PPA OR PPA. SIGH.
|
||||
;
|
||||
; - THERE ARE SOME HARD CODED TIMEOUT LOOPS IN THE CODE. THEY ARE
|
||||
; WORKING OK ON A 7 MHZ Z80. THEY ARE LIKELY TO NEED TWEAKING ON
|
||||
; FASTER CPUS.
|
||||
;
|
||||
; - THIS DRIVER OPERATES PURELY IN NIBBLE MODE. I SUSPECT IT IS
|
||||
; POSSIBLE TO USE FULL BYTE MODE (PS2 STYLE), BUT I HAVE NOT
|
||||
; ATTEMPTED IT.
|
||||
;
|
||||
; - RELATIVE TO ABOVE, THIS BEAST IS SLOW. IN ADDITION TO THE
|
||||
; NIBBLE MODE READS, THE MG014 ASSIGNS SIGNALS DIFFERENTLY THAN
|
||||
; THE STANDARD IBM PARALLEL PORT WHICH NECESSITATES A BUNCH OF EXTRA
|
||||
; BIT FIDDLING ON EVERY READ.
|
||||
;
|
||||
; - SOME OF THE DATA TRANSFERS HAVE NO BUFFER OVERRUN CHECKS. IT IS
|
||||
; ASSUMED SCSI DEVICES WILL SEND/REQUEST THE EXPECTED NUMBER OF BYTES.
|
||||
;
|
||||
; PPA PORT OFFSETS
|
||||
;
|
||||
PPA_IODATA .EQU 0 ; PORT A, DATA, OUT
|
||||
PPA_IOSTAT .EQU 1 ; PORT B, STATUS, IN
|
||||
PPA_IOCTRL .EQU 2 ; PORT C, CTRL, OUT
|
||||
PPA_IOSETUP .EQU 3 ; PPI SETUP
|
||||
;
|
||||
; SCSI UNIT IDS
|
||||
;
|
||||
PPA_SELF .EQU 7
|
||||
PPA_TGT .EQU 6
|
||||
;
|
||||
; PPA DEVICE STATUS
|
||||
;
|
||||
PPA_STOK .EQU 0
|
||||
PPA_STINVUNIT .EQU -1
|
||||
PPA_STNOMEDIA .EQU -2
|
||||
PPA_STCMDERR .EQU -3
|
||||
PPA_STIOERR .EQU -4
|
||||
PPA_STTO .EQU -5
|
||||
PPA_STNOTSUP .EQU -6
|
||||
;
|
||||
; PPA DEVICE CONFIGURATION
|
||||
;
|
||||
PPA_CFGSIZ .EQU 12 ; SIZE OF CFG TBL ENTRIES
|
||||
;
|
||||
; PER DEVICE DATA OFFSETS IN CONFIG TABLE ENTRIES
|
||||
;
|
||||
PPA_DEV .EQU 0 ; OFFSET OF DEVICE NUMBER (BYTE)
|
||||
PPA_MODE .EQU 1 ; OPERATION MODE: PPA MODE (BYTE)
|
||||
PPA_STAT .EQU 2 ; LAST STATUS (BYTE)
|
||||
PPA_IOBASE .EQU 3 ; IO BASE ADDRESS (BYTE)
|
||||
PPA_MEDCAP .EQU 4 ; MEDIA CAPACITY (DWORD)
|
||||
PPA_LBA .EQU 8 ; OFFSET OF LBA (DWORD)
|
||||
;
|
||||
;=============================================================================
|
||||
; INITIALIZATION ENTRY POINT
|
||||
;=============================================================================
|
||||
;
|
||||
PPA_INIT:
|
||||
LD IY,PPA_CFG ; POINT TO START OF CONFIG TABLE
|
||||
;
|
||||
PPA_INIT1:
|
||||
LD A,(IY) ; LOAD FIRST BYTE TO CHECK FOR END
|
||||
CP $FF ; CHECK FOR END OF TABLE VALUE
|
||||
JR NZ,PPA_INIT2 ; IF NOT END OF TABLE, CONTINUE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
PPA_INIT2:
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("PPA:$") ; DRIVER LABEL
|
||||
;
|
||||
PRTS(" IO=0x$") ; LABEL FOR IO ADDRESS
|
||||
LD A,(IY+PPA_IOBASE) ; GET IO BASE ADDRES
|
||||
CALL PRTHEXBYTE ; DISPLAY IT
|
||||
;
|
||||
PRTS(" MODE=$") ; LABEL FOR MODE
|
||||
LD A,(IY+PPA_MODE) ; GET MODE BITS
|
||||
LD DE,PPA_STR_MODE_NONE ; MODE LABEL
|
||||
CP PPAMODE_NONE ; TEST FOR MODE
|
||||
JR Z,PPA_INIT3 ; IF SO, DISPLAY IT
|
||||
LD DE,PPA_STR_MODE_MG014 ; MODE LABEL
|
||||
CP PPAMODE_MG014 ; TEST FOR MODE
|
||||
JR Z,PPA_INIT3 ; IF SO, DISPLAY IT
|
||||
LD DE,PPA_STR_MODE_UNK ; MODE LABEL
|
||||
PPA_INIT3:
|
||||
CALL WRITESTR ; DISPLAY MODE
|
||||
;
|
||||
; CHECK FOR HARDWARE PRESENCE
|
||||
CALL PPA_DETECT ; PROBE FOR INTERFACE
|
||||
JR Z,PPA_INIT4 ; IF FOUND, CONTINUE
|
||||
CALL PC_SPACE ; FORMATTING
|
||||
LD DE,PPA_STR_NOHW ; NO PPA MESSAGE
|
||||
CALL WRITESTR ; DISPLAY IT
|
||||
JR PPA_INIT6 ; SKIP CFG ENTRY
|
||||
;
|
||||
PPA_INIT4:
|
||||
; UPDATE DRIVER RELATIVE UNIT NUMBER IN CONFIG TABLE
|
||||
LD A,(PPA_DEVNUM) ; GET NEXT UNIT NUM TO ASSIGN
|
||||
LD (IY+PPA_DEV),A ; UPDATE IT
|
||||
INC A ; BUMP TO NEXT UNIT NUM TO ASSIGN
|
||||
LD (PPA_DEVNUM),A ; SAVE IT
|
||||
;
|
||||
; ADD UNIT TO GLOBAL DISK UNIT TABLE
|
||||
LD BC,PPA_FNTBL ; BC := FUNC TABLE ADR
|
||||
PUSH IY ; CFG ENTRY POINTER
|
||||
POP DE ; COPY TO DE
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
|
||||
;
|
||||
CALL PPA_RESET ; RESET/INIT THE INTERFACE
|
||||
;
|
||||
; START PRINTING DEVICE INFO
|
||||
CALL PPA_PRTPREFIX ; PRINT DEVICE PREFIX
|
||||
;
|
||||
; CHECK FOR BAD STATUS
|
||||
LD A,(IY+PPA_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JP Z,PPA_INIT5 ; CONTINUE
|
||||
CALL PC_SPACE ; FORMATTING
|
||||
CALL PPA_PRTSTATSTR ; PRINT STATUS STRING
|
||||
JR PPA_INIT6 ; LOOP TILL DONE
|
||||
;
|
||||
PPA_INIT5:
|
||||
; PRINT STORAGE CAPACITY (BLOCK COUNT)
|
||||
PRTS(" BLOCKS=0x$") ; PRINT FIELD LABEL
|
||||
LD A,PPA_MEDCAP ; OFFSET TO CAPACITY FIELD
|
||||
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
|
||||
CALL LD32 ; GET THE CAPACITY VALUE
|
||||
CALL PRTHEX32 ; PRINT HEX VALUE
|
||||
;
|
||||
; PRINT STORAGE SIZE IN MB
|
||||
PRTS(" SIZE=$") ; PRINT FIELD LABEL
|
||||
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
|
||||
CALL SRL32 ; RIGHT SHIFT
|
||||
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
|
||||
PRTS("MB$") ; PRINT SUFFIX
|
||||
;
|
||||
PPA_INIT6:
|
||||
LD DE,PPA_CFGSIZ ; SIZE OF CFG TABLE ENTRY
|
||||
ADD IY,DE ; BUMP POINTER
|
||||
JP PPA_INIT1 ; AND LOOP
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; PROBE FOR PPA HARDWARE
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
|
||||
;
|
||||
PPA_DETECT:
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+PPA_IOBASE) ; BASE PORT
|
||||
ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT
|
||||
LD C,A ; MOVE TO C FOR I/O
|
||||
LD A,$82 ; CONFIG A OUT, B IN, C OUT
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
|
||||
;
|
||||
LD A,$AA
|
||||
CALL PPA_WRITEDATA
|
||||
CALL PPA_DISCONNECT
|
||||
CALL PPA_CONNECT
|
||||
LD A,$06
|
||||
CALL PPA_WRITECTRL
|
||||
CALL PPA_READSTATUS
|
||||
;
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
AND $F0
|
||||
CP $F0
|
||||
JR NZ,PPA_DETECT_FAIL
|
||||
LD A,$04
|
||||
CALL PPA_WRITECTRL
|
||||
CALL PPA_READSTATUS
|
||||
;
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
AND $F0
|
||||
CP $80
|
||||
JR NZ,PPA_DETECT_FAIL
|
||||
LD A,$AA
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$0C
|
||||
CALL PPA_WRITECTRL
|
||||
CALL PPA_CONNECT
|
||||
LD A,$40
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$08
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$0C
|
||||
CALL PPA_WRITECTRL
|
||||
CALL PPA_DISCONNECT
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
PPA_DETECT_FAIL:
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET NZ
|
||||
|
||||
;
|
||||
;=============================================================================
|
||||
; DRIVER FUNCTION TABLE
|
||||
;=============================================================================
|
||||
;
|
||||
PPA_FNTBL:
|
||||
.DW PPA_STATUS
|
||||
.DW PPA_RESET
|
||||
.DW PPA_SEEK
|
||||
.DW PPA_READ
|
||||
.DW PPA_WRITE
|
||||
.DW PPA_VERIFY
|
||||
.DW PPA_FORMAT
|
||||
.DW PPA_DEVICE
|
||||
.DW PPA_MEDIA
|
||||
.DW PPA_DEFMED
|
||||
.DW PPA_CAP
|
||||
.DW PPA_GEOM
|
||||
#IF (($ - PPA_FNTBL) != (DIO_FNCNT * 2))
|
||||
.ECHO "*** INVALID PPA FUNCTION TABLE ***\n"
|
||||
#ENDIF
|
||||
;
|
||||
PPA_VERIFY:
|
||||
PPA_FORMAT:
|
||||
PPA_DEFMED:
|
||||
SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_READ:
|
||||
CALL HB_DSKREAD ; HOOK DISK READ CONTROLLER
|
||||
LD A,SCSI_CMD_READ ; SETUP SCSI READ
|
||||
LD (PPA_CMD_RW),A ; AND SAVE IT IN SCSI CMD
|
||||
JP PPA_IO ; DO THE I/O
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_WRITE:
|
||||
CALL HB_DSKREAD ; HOOK DISK WRITE CONTROLLER
|
||||
LD A,SCSI_CMD_WRITE ; SETUP SCSI WRITE
|
||||
LD (PPA_CMD_RW),A ; AND SAVE IT IN SCSI CMD
|
||||
JP PPA_IO ; DO THE I/O
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_IO:
|
||||
LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
CALL PPA_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
|
||||
JR NZ,PPA_IO3 ; BAIL OUT ON ERROR
|
||||
;
|
||||
; SETUP LBA
|
||||
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
|
||||
LD HL,PPA_CMD_RW+1 ; START OF LBA FIELD IN CDB (MSB)
|
||||
LD A,(IY+PPA_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(IY+PPA_LBA+1)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(IY+PPA_LBA+0)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
;
|
||||
; DO SCSI IO
|
||||
LD DE,(PPA_DSKBUF) ; DISK BUFFER TO DE
|
||||
LD BC,512 ; ONE SECTOR, 512 BYTES
|
||||
LD HL,PPA_CMD_RW ; POINT TO READ/WRITE CMD TEMPLATE
|
||||
CALL PPA_RUNCMD ; RUN THE SCSI ENGINE
|
||||
CALL Z,PPA_CHKCMD ; IF EXIT OK, CHECK SCSI RESULTS
|
||||
JR NZ,PPA_IO2 ; IF ERROR, SKIP INCREMENT
|
||||
; INCREMENT LBA
|
||||
LD A,PPA_LBA ; LBA OFFSET
|
||||
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
|
||||
CALL INC32HL ; INCREMENT THE VALUE
|
||||
; INCREMENT DMA
|
||||
LD HL,IDE_DSKBUF+1 ; POINT TO MSB OF BUFFER ADR
|
||||
INC (HL) ; BUMP DMA BY
|
||||
INC (HL) ; ... 512 BYTES
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
;
|
||||
PPA_IO2:
|
||||
PPA_IO3:
|
||||
LD HL,(PPA_DSKBUF) ; CURRENT DMA TO HL
|
||||
OR A ; SET FLAGS BASED ON RETURN CODE
|
||||
RET Z ; RETURN IF SUCCESS
|
||||
LD A,ERR_IO ; SIGNAL IO ERROR
|
||||
OR A ; SET FLAGS
|
||||
RET ; AND DONE
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_STATUS:
|
||||
; RETURN UNIT STATUS
|
||||
LD A,(IY+PPA_STAT) ; GET STATUS OF SELECTED DEVICE
|
||||
OR A ; SET FLAGS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_RESET:
|
||||
JP PPA_INITDEV ; JUST (RE)INIT DEVICE
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_DEVICE:
|
||||
LD D,DIODEV_PPA ; D := DEVICE TYPE
|
||||
LD E,(IY+PPA_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%01000000 ; C := REMOVABLE HARD DISK
|
||||
LD H,(IY+PPA_MODE) ; H := MODE
|
||||
LD L,(IY+PPA_IOBASE) ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; PPA_GETMED
|
||||
;
|
||||
PPA_MEDIA:
|
||||
LD A,E ; GET FLAGS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,PPA_MEDIA1 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
;
|
||||
CALL PPA_RESET ; RESET INCLUDES MEDIA CHECK
|
||||
;
|
||||
PPA_MEDIA1:
|
||||
LD A,(IY+PPA_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
LD D,0 ; NO MEDIA CHANGE DETECTED
|
||||
LD E,MID_HD ; ASSUME WE ARE OK
|
||||
RET Z ; RETURN IF GOOD INIT
|
||||
LD E,MID_NONE ; SIGNAL NO MEDIA
|
||||
LD A,ERR_NOMEDIA ; NO MEDIA ERROR
|
||||
OR A ; SET FLAGS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_SEEK:
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD (IY+PPA_LBA+0),L ; SAVE NEW LBA
|
||||
LD (IY+PPA_LBA+1),H ; ...
|
||||
LD (IY+PPA_LBA+2),E ; ...
|
||||
LD (IY+PPA_LBA+3),D ; ...
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_CAP:
|
||||
LD A,(IY+PPA_STAT) ; GET STATUS
|
||||
PUSH AF ; SAVE IT
|
||||
LD A,PPA_MEDCAP ; OFFSET TO CAPACITY FIELD
|
||||
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
|
||||
CALL LD32 ; GET THE CURRENT CAPACITY INTO DE:HL
|
||||
LD BC,512 ; 512 BYTES PER BLOCK
|
||||
POP AF ; RECOVER STATUS
|
||||
OR A ; SET FLAGS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_GEOM:
|
||||
; FOR LBA, WE SIMULATE CHS ACCESS USING 16 HEADS AND 16 SECTORS
|
||||
; RETURN HS:CC -> DE:HL, SET HIGH BIT OF D TO INDICATE LBA CAPABLE
|
||||
CALL PPA_CAP ; GET TOTAL BLOCKS IN DE:HL, BLOCK SIZE TO BC
|
||||
LD L,H ; DIVIDE BY 256 FOR # TRACKS
|
||||
LD H,E ; ... HIGH BYTE DISCARDED, RESULT IN HL
|
||||
LD D,16 | $80 ; HEADS / CYL = 16, SET LBA CAPABILITY BIT
|
||||
LD E,16 ; SECTORS / TRACK = 16
|
||||
RET ; DONE, A STILL HAS PPA_CAP STATUS
|
||||
;
|
||||
;=============================================================================
|
||||
; FUNCTION SUPPORT ROUTINES
|
||||
;=============================================================================
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_DELAY:
|
||||
PUSH AF
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_WAITDONE:
|
||||
LD HL,0 ; TIMEOUT COUNTER
|
||||
PPA_WAITDONE1:
|
||||
CALL PPA_READSTATUS
|
||||
AND $F0
|
||||
BIT 7,A
|
||||
RET NZ
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JP Z,IMM_CMD_TIMEOUT ; TIMEOUT
|
||||
JR PPA_WAITDONE1
|
||||
;
|
||||
; OUTPUT BYTE IN A TO THE DATA PORT
|
||||
;
|
||||
PPA_WRITEDATA:
|
||||
LD C,(IY+PPA_IOBASE) ; DATA PORT IS AT IOBASE
|
||||
OUT (C),A ; WRITE THE BYTE
|
||||
;CALL DELAY ; IS THIS NEEDED???
|
||||
RET ; DONE
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_WRITECTRL:
|
||||
; IBM PC INVERTS ALL BUT C2 ON THE BUS, MG014 DOES NOT.
|
||||
; BELOW TRANSLATES FROM IBM -> MG014. IT ALSO INVERTS THE
|
||||
; MG014 LED SIMPLY TO MAKE IT EASY TO KEEP LED ON DURING
|
||||
; ALL ACTIVITY.
|
||||
XOR $0B | $80 ; HIGH BIT IS MG014 LED
|
||||
LD C,(IY+PPA_IOBASE) ; GET BASE IO ADDRESS
|
||||
INC C ; BUMP TO CONTROL PORT
|
||||
INC C
|
||||
OUT (C),A ; WRITE TO CONTROL PORT
|
||||
;CALL DELAY ; IS THIS NEEDED?
|
||||
RET ; DONE
|
||||
;
|
||||
; READ THE PARALLEL PORT INPUT LINES (STATUS) AND MAP SIGNALS FROM
|
||||
; MG014 TO IBM STANDARD. NOTE POLARITY CHANGE REQUIRED FOR BUSY.
|
||||
;
|
||||
; MG014 IBM PC
|
||||
; -------- --------
|
||||
; 0: /ACK 6: /ACK
|
||||
; 1: BUSY 7: /BUSY
|
||||
; 2: POUT 5: POUT
|
||||
; 3: SEL 4: SEL
|
||||
; 4: /ERR 3: /ERR
|
||||
;
|
||||
PPA_READSTATUS:
|
||||
LD C,(IY+PPA_IOBASE) ; IOBASE TO C
|
||||
INC C ; BUMP TO STATUS PORT
|
||||
IN A,(C) ; READ IT
|
||||
LD C,0 ; INIT RESULT
|
||||
;
|
||||
; SHUFFLE BITS
|
||||
BIT 0,A ; 0: /ACK
|
||||
JR Z,PPA_READSTATUS1
|
||||
SET 6,C ; 6: /ACK
|
||||
;
|
||||
PPA_READSTATUS1:
|
||||
;
|
||||
BIT 1,A ; 1: BUSY
|
||||
JR NZ,PPA_READSTATUS2 ; POLARITY CHANGE!
|
||||
SET 7,C ; 7: /BUSY
|
||||
;
|
||||
PPA_READSTATUS2:
|
||||
;
|
||||
BIT 2,A ; 2: POUT
|
||||
JR Z,PPA_READSTATUS3
|
||||
SET 5,C ; 5: POUT
|
||||
;
|
||||
PPA_READSTATUS3:
|
||||
;
|
||||
BIT 3,A ; 3: SEL
|
||||
JR Z,PPA_READSTATUS4
|
||||
SET 4,C ; 4: SEL
|
||||
;
|
||||
PPA_READSTATUS4:
|
||||
;
|
||||
BIT 4,A ; 4: /ERR
|
||||
JR Z,PPA_READSTATUS5
|
||||
SET 3,C ; 3: /ERR
|
||||
;
|
||||
PPA_READSTATUS5:
|
||||
LD A,C ; RESULT TO A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_DPULSE:
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$0C
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$0E
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$0C ;?
|
||||
CALL PPA_WRITECTRL ;?
|
||||
LD A,$04
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$0C
|
||||
CALL PPA_WRITECTRL
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_CPULSE:
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$04
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$06
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$04
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$0C
|
||||
CALL PPA_WRITECTRL
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_CONNECT:
|
||||
LD A,$00
|
||||
CALL PPA_CPULSE
|
||||
LD A,$3C
|
||||
CALL PPA_CPULSE
|
||||
LD A,$20
|
||||
CALL PPA_CPULSE
|
||||
LD A,$8F
|
||||
CALL PPA_CPULSE
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_DISCONNECT:
|
||||
LD A,$00
|
||||
CALL PPA_DPULSE
|
||||
LD A,$3C
|
||||
CALL PPA_DPULSE
|
||||
LD A,$20
|
||||
CALL PPA_DPULSE
|
||||
LD A,$0F
|
||||
CALL PPA_DPULSE
|
||||
RET
|
||||
;
|
||||
; SCSI SELECT PROCESS
|
||||
;
|
||||
;
|
||||
PPA_SELECT:
|
||||
LD A,1 << PPA_TGT
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$0E
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,$0C
|
||||
CALL PPA_WRITECTRL
|
||||
LD A,1 << PPA_SELF
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$08
|
||||
CALL PPA_WRITECTRL
|
||||
;
|
||||
LD HL,0 ; TIMEOUT COUNTER
|
||||
;
|
||||
PPA_SELECT1:
|
||||
CALL PPA_READSTATUS
|
||||
OR $F0
|
||||
RET NZ
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
RET Z ; TIMEOUT
|
||||
JR PPA_SELECT1
|
||||
;
|
||||
; SEND SCSI CMD BYTE STRING. AT ENTRY, HL POINTS TO START OF
|
||||
; COMMAND BYTES. THE LENGTH OF THE COMMAND STRING MUST PRECEED
|
||||
; THE COMMAND BYTES (HL - 1).
|
||||
;
|
||||
; NOTE THAT DATA IS SENT AS BYTE PAIRS! EACH LOOP SENDS 2 BYTES.
|
||||
; DATA OUTPOUT IS BURSTED (NO CHECK FOR BUSY). SEEMS TO WORK FINE.
|
||||
;
|
||||
PPA_SENDCMD:
|
||||
JP PPA_ERR ; NOW DO STANDARD ERR PROCESSING
|
||||
;
|
||||
; THIS IS THE MAIN SCSI ENGINE. BASICALLY, IT SELECTS THE DEVICE
|
||||
; ON THE BUS, SENDS THE COMMAND, THEN PROCESSES THE RESULT.
|
||||
;
|
||||
; HL: COMMAND BUFFER
|
||||
; DE: TRANSFER BUFFER
|
||||
; BC: TRANSFER LENGTH (0=VARIABLE)
|
||||
;
|
||||
PPA_RUNCMD:
|
||||
JP PPA_ERR ; NOW DO STANDARD ERR PROCESSING
|
||||
;
|
||||
; ERRORS SHOULD GENERALLY NOT CAUSE SCSI PROCESSING TO FAIL. IF A
|
||||
; DEVICE ERROR (I.E., READ ERROR) OCCURS, THEN THE SCSI PROTOCOL WILL
|
||||
; PROVIDE ERROR INFORMATION. THE STATUS RESULT OF THE SCSI COMMAND
|
||||
; WILL INDICATE IF AN ERROR OCCURRED. ADDITIONALLY, IF THE ERROR IS
|
||||
; A CHECK CONDITION ERROR, THEN IT IS MANDATORY TO ISSUE A SENSE
|
||||
; REQUEST SCSI COMMAND TO CLEAR THE ERROR AND RETRIEVE DETAILED ERROR
|
||||
; INFO.
|
||||
;
|
||||
PPA_CHKCMD:
|
||||
; SCSI COMMAND COMPLETED, CHECK SCSI CMD STATUS
|
||||
LD A,(PPA_CMDSTAT) ; GET STATUS BYTE
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; IF ZERO, ALL GOOD, DONE
|
||||
;
|
||||
; DO WE HAVE A CHECK CONDITION?
|
||||
CP 2 ; CHECK CONDITION RESULT?
|
||||
JR Z,PPA_CHKCMD1 ; IF SO, REQUEST SENSE
|
||||
JP PPA_IOERR ; ELSE, GENERAL I/O ERROR
|
||||
;
|
||||
PPA_CHKCMD1:
|
||||
; USE REQUEST SENSE CMD TO GET ERROR DETAILS
|
||||
LD DE,HB_WRKBUF ; PUT DATA IN WORK BUF
|
||||
LD BC,0 ; VARIABLE LENGTH REQUEST
|
||||
LD HL,PPA_CMD_SENSE ; REQUEST SENSE CMD
|
||||
CALL PPA_RUNCMD ; DO IT
|
||||
JP NZ,PPA_IOERR ; BAIL IF ERROR IN CMD
|
||||
;
|
||||
; REQ SENSE CMD COMPLETED
|
||||
#IF (PPATRACE >= 3)
|
||||
LD A,16
|
||||
LD DE,HB_WRKBUF
|
||||
CALL Z,PRTHEXBUF
|
||||
#ENDIF
|
||||
;
|
||||
; CHECK SCSI CMD STATUS
|
||||
LD A,(PPA_CMDSTAT) ; GET STATUS BYTE
|
||||
OR A ; SET FLAGS
|
||||
JP NZ,PPA_IOERR ; IF FAILED, GENERAL I/O ERROR
|
||||
;
|
||||
; RETURN RESULT BASED ON REQ SENSE DATA
|
||||
; TODO: WE NEED TO CHECK THE SENSE KEY FIRST!!!
|
||||
LD A,(HB_WRKBUF+12) ; GET ADDITIONAL SENSE CODE
|
||||
CP $3A ; NO MEDIA?
|
||||
JP Z,PPA_NOMEDIA ; IF SO, RETURN NO MEDIA ERR
|
||||
JP PPA_IOERR ; ELSE GENERAL I/O ERR
|
||||
;
|
||||
; CHECK CURRENT DEVICE FOR ERROR STATUS AND ATTEMPT TO RECOVER
|
||||
; VIA RESET IF DEVICE IS IN ERROR.
|
||||
;
|
||||
PPA_CHKERR:
|
||||
LD A,(IY+PPA_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
CALL NZ,PPA_RESET ; IF ERROR STATUS, RESET BUS
|
||||
RET
|
||||
;
|
||||
; (RE)INITIALIZE DEVICE
|
||||
;
|
||||
PPA_INITDEV:
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+PPA_IOBASE) ; BASE PORT
|
||||
ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT
|
||||
LD C,A ; MOVE TO C FOR I/O
|
||||
LD A,$82 ; CONFIG A OUT, B IN, C OUT
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; SHORT DELAY FOR BUS SETTLE
|
||||
;
|
||||
;=============================================================================
|
||||
; ERROR HANDLING AND DIAGNOSTICS
|
||||
;=============================================================================
|
||||
;
|
||||
; ERROR HANDLERS
|
||||
;
|
||||
PPA_INVUNIT:
|
||||
LD A,PPA_STINVUNIT
|
||||
JR PPA_ERR2 ; SPECIAL CASE FOR INVALID UNIT
|
||||
;
|
||||
PPA_NOMEDIA:
|
||||
LD A,PPA_STNOMEDIA
|
||||
JR PPA_ERR
|
||||
;
|
||||
PPA_CMDERR:
|
||||
LD A,PPA_STCMDERR
|
||||
JR PPA_ERR
|
||||
;
|
||||
PPA_IOERR:
|
||||
LD A,PPA_STIOERR
|
||||
JR PPA_ERR
|
||||
;
|
||||
PPA_TO:
|
||||
LD A,PPA_STTO
|
||||
JR PPA_ERR
|
||||
;
|
||||
PPA_NOTSUP:
|
||||
LD A,PPA_STNOTSUP
|
||||
JR PPA_ERR
|
||||
;
|
||||
PPA_ERR:
|
||||
LD (IY+PPA_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
PPA_ERR2:
|
||||
#IF (PPATRACE >= 2)
|
||||
CALL PPA_PRTSTAT
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_PRTERR:
|
||||
RET Z ; DONE IF NO ERRORS
|
||||
; FALL THRU TO PPA_PRTSTAT
|
||||
;
|
||||
; PRINT FULL DEVICE STATUS LINE
|
||||
;
|
||||
PPA_PRTSTAT:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD A,(IY+PPA_STAT)
|
||||
CP PPA_STINVUNIT
|
||||
JR Z,PPA_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE
|
||||
CALL PPA_PRTPREFIX ; PRINT UNIT PREFIX
|
||||
JR PPA_PRTSTAT3
|
||||
PPA_PRTSTAT2:
|
||||
CALL NEWLINE
|
||||
PRTS("PPA:$") ; NO UNIT NUM IN PREFIX FOR INVALID UNIT
|
||||
PPA_PRTSTAT3:
|
||||
CALL PC_SPACE ; FORMATTING
|
||||
CALL PPA_PRTSTATSTR
|
||||
POP HL
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT STATUS STRING
|
||||
;
|
||||
PPA_PRTSTATSTR:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
LD A,(IY+PPA_STAT)
|
||||
OR A
|
||||
LD DE,PPA_STR_STOK
|
||||
JR Z,PPA_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPA_STR_STINVUNIT
|
||||
JR Z,PPA_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPA_STR_STNOMEDIA
|
||||
JR Z,PPA_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPA_STR_STCMDERR
|
||||
JR Z,PPA_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPA_STR_STIOERR
|
||||
JR Z,PPA_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPA_STR_STTO
|
||||
JR Z,PPA_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPA_STR_STNOTSUP
|
||||
JR Z,PPA_PRTSTATSTR1
|
||||
LD DE,PPA_STR_STUNK
|
||||
PPA_PRTSTATSTR1:
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT DIAGNONSTIC PREFIX
|
||||
;
|
||||
PPA_PRTPREFIX:
|
||||
PUSH AF
|
||||
CALL NEWLINE
|
||||
PRTS("PPA$")
|
||||
LD A,(IY+PPA_DEV) ; GET CURRENT DEVICE NUM
|
||||
CP $FE ; NOT YET ASSIGNED?
|
||||
JR Z,PPA_PRTPREFIX1 ; SKIP DEV NUM IF SO
|
||||
CALL PRTDECB
|
||||
PPA_PRTPREFIX1:
|
||||
CALL PC_COLON
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;=============================================================================
|
||||
; STRING DATA
|
||||
;=============================================================================
|
||||
;
|
||||
PPA_STR_STOK .TEXT "OK$"
|
||||
PPA_STR_STINVUNIT .TEXT "INVALID UNIT$"
|
||||
PPA_STR_STNOMEDIA .TEXT "NO MEDIA$"
|
||||
PPA_STR_STCMDERR .TEXT "COMMAND ERROR$"
|
||||
PPA_STR_STIOERR .TEXT "IO ERROR$"
|
||||
PPA_STR_STTO .TEXT "TIMEOUT$"
|
||||
PPA_STR_STNOTSUP .TEXT "NOT SUPPORTED$"
|
||||
PPA_STR_STUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
PPA_STR_NOHW .TEXT "NOT PRESENT$"
|
||||
;
|
||||
PPA_STR_MODE_NONE .TEXT "NONE$"
|
||||
PPA_STR_MODE_MG014 .TEXT "MG014$"
|
||||
PPA_STR_MODE_UNK .TEXT "???$"
|
||||
;
|
||||
;=============================================================================
|
||||
; DATA STORAGE
|
||||
;=============================================================================
|
||||
;
|
||||
PPA_DEVNUM .DB 0 ; TEMP DEVICE NUM USED DURING INIT
|
||||
PPA_CMDSTK .DW 0 ; STACK PTR FOR CMD ABORTING
|
||||
PPA_DSKBUF .DW 0 ; WORKING DISK BUFFER POINTER
|
||||
PPA_XFRLEN .DW 0 ; WORKING TRANSFER LENGTH
|
||||
PPA_CMDSTAT .DB 0, 0 ; CMD RESULT STATUS
|
||||
;
|
||||
PPA_TYPE_MAP:
|
||||
.DW PPA_STR_NONE
|
||||
.DW PPA_STR_MG014
|
||||
;
|
||||
PPA_STR_NONE .DB "<NOT PRESENT>$"
|
||||
PPA_STR_MG014 .DB "MG014$"
|
||||
;
|
||||
; SCSI COMMAND TEMPLATES (LENGTH PREFIXED)
|
||||
;
|
||||
.DB 6
|
||||
PPA_CMD_RW .DB $00, $00, $00, $00, $01, $00 ; READ/WRITE SECTOR
|
||||
.DB 6
|
||||
PPA_CMD_SENSE .DB $03, $00, $00, $00, $FF, $00 ; REQUEST SENSE DATA
|
||||
.DB 10
|
||||
PPA_CMD_RDCAP .DB $25, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; READ CAPACITY
|
||||
;
|
||||
; PPA DEVICE CONFIGURATION TABLE
|
||||
;
|
||||
PPA_CFG:
|
||||
;
|
||||
#IF (PPACNT >= 1)
|
||||
;
|
||||
PPA0_CFG: ; DEVICE 0
|
||||
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
|
||||
.DB PPA0MODE ; DRIVER DEVICE MODE
|
||||
.DB 0 ; DEVICE STATUS
|
||||
.DB PPA0BASE ; IO BASE ADDRESS
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPACNT >= 2)
|
||||
;
|
||||
PPA1_CFG: ; DEVICE 1
|
||||
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
|
||||
.DB PPA1MODE ; DRIVER DEVICE MODE
|
||||
.DB 0 ; DEVICE STATUS
|
||||
.DB PPA1BASE ; IO BASE ADDRESS
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
#ENDIF
|
||||
;
|
||||
#IF ($ - PPA_CFG) != (PPACNT * PPA_CFGSIZ)
|
||||
.ECHO "*** INVALID PPA CONFIG TABLE ***\n"
|
||||
#ENDIF
|
||||
;
|
||||
.DB $FF ; END MARKER
|
||||
@@ -904,7 +904,7 @@ PPPSD_GETCSD:
|
||||
CALL PPP_SNDCMD ; SEND COMMAND
|
||||
RET NZ ; ABORT ON ERROR
|
||||
|
||||
LD B,16 ; GET 4 BYTES
|
||||
LD B,16 ; GET 16 BYTES
|
||||
LD HL,PPPSD_CSDBUF
|
||||
PPPSD_GETCSD1:
|
||||
CALL PPP_GETBYTE
|
||||
|
||||
@@ -248,6 +248,16 @@ LPTMODE_NONE .EQU 0 ; NONE
|
||||
LPTMODE_IBM .EQU 1 ; IBM STYLE INTERFACE
|
||||
LPTMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; PPA DRIVER MODE SELECTIONS
|
||||
;
|
||||
PPAMODE_NONE .EQU 0 ; NONE
|
||||
PPAMODE_MG014 .EQU 1 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; IMM DRIVER MODE SELECTIONS
|
||||
;
|
||||
IMMMODE_NONE .EQU 0 ; NONE
|
||||
IMMMODE_MG014 .EQU 1 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; GDC MONITOR SELECTIONS
|
||||
;
|
||||
GDCMON_NONE .EQU 0
|
||||
@@ -437,6 +447,16 @@ SPD_UNSUP .EQU 0 ; PLATFORM CAN CHANGE SPEEDS BUT IS UNSUPPORTED
|
||||
SPD_HIGH .EQU 1 ; PLATFORM CAN CHANGE SPEED, STARTS HIGH
|
||||
SPD_LOW .EQU 2 ; PLATFORM CAN CHANGE SPEED, STARTS LOW
|
||||
;
|
||||
; SCSI COMMAND CODES (SHOULD BE IT IT'S OWN FILE)
|
||||
;
|
||||
SCSI_CMD_READ .EQU $08
|
||||
SCSI_CMD_INQ .EQU $12
|
||||
SCSI_CMD_TEST .EQU $00
|
||||
SCSI_CMD_START .EQU $1B
|
||||
SCSI_CMD_SENSE .EQU $03
|
||||
SCSI_CMD_WRITE .EQU $0A
|
||||
SCSI_CMD_RDCAP .EQU $25
|
||||
;
|
||||
#INCLUDE "build.inc" ; INCLUDE USER CONFIG, ADD VARIANT, TIMESTAMP, & ROMSIZE
|
||||
;
|
||||
; INCLUDE Z180 REGISTER DEFINITIONS
|
||||
|
||||
@@ -48,7 +48,7 @@ The layout of the first track does not conform exactly to the
|
||||
recommended p-System layout. The recommended layout is not possible
|
||||
because it conflicts with the RomWBW definition for a boot track.
|
||||
However, the changes are only slightly different sector assignments for
|
||||
the different boot componets -- the general boot sequence and mechanism
|
||||
the different boot components -- the general boot sequence and mechanism
|
||||
for the p-System is completely standard.
|
||||
|
||||
The logical disk geometry used by this p-System
|
||||
@@ -77,14 +77,17 @@ escape sequence handling configuration. The debugger code as added to
|
||||
SYSTEM.PASCAL to enable the debug function. SYSTEM.INTERP was modified
|
||||
to enable the extended BIOS functions.
|
||||
|
||||
The build/makefile creates the psys disk image (psys.img) by adding
|
||||
concatentating psys.vol and blank.vol (after adding track 0 contents to
|
||||
The build/makefile creates the psys disk image (psys.img) by
|
||||
concatenating psys.vol and blank.vol (after adding track 0 contents to
|
||||
each). psys.vol and blank.vol are recognized by CiderPress and
|
||||
CiderPress can be used to add/remove files from these volumes.
|
||||
However, there is currently no straightforward way to extract the
|
||||
volumes from the disk image. If you are good with a binary disk
|
||||
editor, you can do it that way. Please contact me if you are
|
||||
interested in pursuing that.
|
||||
To extract volumes from a disk image, Andrew Davidson has created
|
||||
a nice Python script that can extract p-System volumes from an
|
||||
existing disk image file. The extracted volume can be manipulated
|
||||
by CiderPress. The script is also capable of re-inserting a modified
|
||||
volume back into the disk image file. This tool is available at:
|
||||
https://github.com/robosnacks/psysimg.
|
||||
|
||||
|
||||
There is currently no support for floppy drives.
|
||||
|
||||
@@ -119,7 +122,7 @@ that SofTech produced a IV.1 with some nice enhancements (like
|
||||
subsidiary volumes and decent support for ANSI/VT-100 terminals). I
|
||||
have been unable to track down the IV.1 distribution media despite
|
||||
trying very hard. If anyone knows of a source for the media of the
|
||||
Adapable p-System for Z80, I would love to get hold of it.
|
||||
Adaptable p-System for Z80, I would love to get hold of it.
|
||||
|
||||
3:58 PM Tuesday, January 17, 2023
|
||||
|
||||
@@ -138,4 +141,10 @@ arrow keys transmitted by an ANSI/VT-100 terminal. In this case,
|
||||
the setup program was used to define up/down/left/right like
|
||||
WordStar does: ^E,^X,^S,^D.
|
||||
|
||||
5:48 PM Tuesday, January 17, 2023
|
||||
5:48 PM Tuesday, January 17, 2023
|
||||
|
||||
Updated instructions above to include a reference to Andrew
|
||||
Davidson's Python script that will extract/insert volumes from/to
|
||||
a disk image.
|
||||
|
||||
1:31 PM Thursday, May 11, 2023
|
||||
Binary file not shown.
@@ -2,7 +2,7 @@
|
||||
#DEFINE RMN 3
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.3.0-dev.13"
|
||||
#DEFINE BIOSVER "3.3.0-dev.16"
|
||||
#define rmj RMJ
|
||||
#define rmn RMN
|
||||
#define rup RUP
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 3
|
||||
rup equ 0
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.3.0-dev.13"
|
||||
db "3.3.0-dev.16"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user