mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-07 06:53:13 -06:00
Compare commits
12 Commits
v3.3.0-dev
...
v3.3.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c411f5552 | ||
|
|
364e48a5d3 | ||
|
|
63cb89dcfc | ||
|
|
6e316b46f0 | ||
|
|
3f23396536 | ||
|
|
c628ba10f2 | ||
|
|
9358299f14 | ||
|
|
d445c4a015 | ||
|
|
e32002545b | ||
|
|
7ac88efac1 | ||
|
|
9f71fe05aa | ||
|
|
ad3c533145 |
@@ -5,6 +5,9 @@ Version 3.3
|
||||
- A?C: Support for SD PIO
|
||||
- A?C: Support for Z80-Retro SD interface
|
||||
- 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)) \
|
||||
16 Apr 2023
|
||||
23 May 2023
|
||||
|
||||
# Overview
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
RomWBW ReadMe
|
||||
Wayne Warthen (wwarthen@gmail.com)
|
||||
16 Apr 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
|
||||
|
||||
@@ -2221,7 +2221,7 @@ rate of the ASCI port(s) will be affected.
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0xF8 | A: Status |
|
||||
| B: 0xF9 | A: Status |
|
||||
| C: 0xF4 | |
|
||||
| L: LEDs | |
|
||||
|
||||
|
||||
@@ -3808,6 +3808,7 @@ the RomWBW HBIOS configuration.
|
||||
- WDC Floppy Disk Controller w/ 3.5" HD Drives
|
||||
- Onboard IDE Hard Disk Interface Module
|
||||
- PPIDE Hard Disk Interface Module
|
||||
- VGARC Video & Keyboard Module
|
||||
- Serial baud rate is usually determined by hardware for ACIA and
|
||||
SIO interfaces
|
||||
|
||||
@@ -3831,6 +3832,7 @@ the RomWBW HBIOS configuration.
|
||||
- WDC Floppy Disk Controller w/ 3.5" HD Drives
|
||||
- Onboard IDE Hard Disk Interface Module
|
||||
- PPIDE Hard Disk Interface Module
|
||||
- VGARC Video & Keyboard Module
|
||||
- Serial baud rate is usually determined by hardware for ACIA and
|
||||
SIO interfaces
|
||||
|
||||
@@ -3854,6 +3856,7 @@ the RomWBW HBIOS configuration.
|
||||
- WDC Floppy Disk Controller w/ 3.5" HD Drives
|
||||
- Onboard IDE Hard Disk Interface Module
|
||||
- PPIDE Hard Disk Interface Module
|
||||
- VGARC Video & Keyboard Module
|
||||
- Serial baud rate is usually determined by hardware for ACIA and
|
||||
SIO interfaces
|
||||
|
||||
@@ -3893,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 |
|
||||
@@ -3923,5 +3927,6 @@ may be discovered by RomWBW in your system.
|
||||
| USB-FIFO | Char | FT232H-based ECB USB FIFO |
|
||||
| VDU | Video | MC6845 Family Video Display Controller |
|
||||
| VGA | Video | HD6445CP4-based Video Display Controller |
|
||||
| VRC | Video | VGARC Video Display Controller |
|
||||
| YM | Audio | YM2612 Programmable Sound Generator |
|
||||
| Z2U | Char | Zilog Z280 CPU Built-in Serial Ports |
|
||||
|
||||
Binary file not shown.
@@ -11,8 +11,8 @@ echo Preparing compressed font files...
|
||||
lzsa -f2 -r font8x8u.bin font8x8c.bin || exit /b
|
||||
lzsa -f2 -r font8x11u.bin font8x11c.bin || exit /b
|
||||
lzsa -f2 -r font8x16u.bin font8x16c.bin || exit /b
|
||||
|
||||
lzsa -f2 -r fontcgau.bin fontcgac.bin || exit /b
|
||||
lzsa -f2 -r fontvgarcu.bin fontvgarcc.bin || exit /b
|
||||
|
||||
fonttool font8x8u.bin > font8x8u.asm || exit /b
|
||||
fonttool font8x11u.bin > font8x11u.asm || exit /b
|
||||
@@ -20,6 +20,7 @@ fonttool font8x16u.bin > font8x16u.asm || exit /b
|
||||
fonttool font8x8c.bin > font8x8c.asm || exit /b
|
||||
fonttool font8x11c.bin > font8x11c.asm || exit /b
|
||||
fonttool font8x16c.bin > font8x16c.asm || exit /b
|
||||
|
||||
fonttool fontcgau.bin > fontcgau.asm || exit /b
|
||||
fonttool fontcgac.bin > fontcgac.asm || exit /b
|
||||
fonttool fontvgarcu.bin > fontvgarcu.asm || exit /b
|
||||
fonttool fontvgarcc.bin > fontvgarcc.asm || exit /b
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
OBJECTS = \
|
||||
font8x8u.asm font8x11u.asm font8x16u.asm fontcgau.asm \
|
||||
font8x8c.asm font8x11c.asm font8x16c.asm fontcgac.asm
|
||||
font8x8u.asm font8x11u.asm font8x16u.asm fontcgau.asm fontvgarcu.asm \
|
||||
font8x8c.asm font8x11c.asm font8x16c.asm fontcgac.asm fontvgarcc.asm
|
||||
|
||||
OTHERS = font8x8c.bin font8x11c.bin font8x16c.bin fontcgac.bin
|
||||
OTHERS = font8x8c.bin font8x11c.bin font8x16c.bin fontcgac.bin fontvgarcc.bin
|
||||
|
||||
TOOLS = ../../Tools
|
||||
|
||||
@@ -26,5 +26,8 @@ font8x16c.bin: font8x16u.bin
|
||||
fontcgac.bin: fontcgau.bin
|
||||
$(BINDIR)/lzsa -f2 -r $< $@
|
||||
|
||||
fontvgarcc.bin: fontvgarcu.bin
|
||||
$(BINDIR)/lzsa -f2 -r $< $@
|
||||
|
||||
%.asm: %.bin
|
||||
$(BINDIR)/bin2asm $< > $@
|
||||
|
||||
BIN
Source/Fonts/fontvgarcu.bin
Normal file
BIN
Source/Fonts/fontvgarcu.bin
Normal file
Binary file not shown.
@@ -48,6 +48,8 @@ DSKYMODE .SET DSKYMODE_NG ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
;UARTCFG .SET UARTCFG | SER_RTS
|
||||
;
|
||||
LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
;
|
||||
@@ -48,6 +49,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
;
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
;
|
||||
@@ -48,9 +49,9 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC]
|
||||
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
|
||||
@@ -30,7 +30,8 @@ CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
;
|
||||
@@ -47,6 +48,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
|
||||
@@ -30,7 +30,8 @@ CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280]
|
||||
;
|
||||
@@ -47,6 +48,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
|
||||
@@ -32,7 +32,8 @@ CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280]
|
||||
;
|
||||
@@ -53,7 +54,8 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC]
|
||||
|
||||
@@ -32,7 +32,8 @@ CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280]
|
||||
;
|
||||
@@ -61,7 +62,8 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC]
|
||||
|
||||
@@ -33,13 +33,12 @@ CPUOSC .SET 10000000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .SET $6F ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
;
|
||||
@@ -62,6 +61,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
@@ -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)
|
||||
|
||||
@@ -30,7 +30,8 @@ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
@@ -57,6 +58,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
@@ -70,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)
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
SKZENABLE .SET TRUE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
SKZDIV .SET DIV_12 ; UART CLK (CLK2) DIVIDER FOR Z80-512K
|
||||
@@ -52,6 +53,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
@@ -65,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)
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
@@ -39,10 +40,13 @@ ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM)
|
||||
;
|
||||
LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
@@ -57,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)
|
||||
|
||||
@@ -33,13 +33,13 @@ CPUOSC .SET 16000000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
EIPCENABLE .SET TRUE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .SET $6F ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED)
|
||||
LEDPORT .SET $6E ; STATUS LED PORT ADDRESS
|
||||
;
|
||||
@@ -67,6 +67,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
@@ -81,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)
|
||||
|
||||
@@ -30,7 +30,8 @@
|
||||
CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
@@ -44,7 +45,8 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC]
|
||||
@@ -57,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)
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
RAMSIZE .SET 2048 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
@@ -48,6 +49,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
@@ -61,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)
|
||||
|
||||
@@ -35,7 +35,8 @@ USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION
|
||||
;
|
||||
KIOENABLE .SET TRUE ; ENABLE ZILOG KIO SUPPORT
|
||||
;
|
||||
DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
DSKYENABLE .SET TRUE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
|
||||
@@ -35,9 +35,9 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .SET $0D ; DIAGNOSTIC PORT ADDRESS
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPLED_IO .SET $0D ; FP: PORT ADDRESS FOR FP LEDS
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
@@ -51,6 +51,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
|
||||
@@ -35,8 +35,10 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
@@ -50,6 +52,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
|
||||
@@ -34,8 +34,10 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
;
|
||||
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
|
||||
@@ -34,11 +34,10 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .SET $A0 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .SET $A0 ; DIAGNOSTIC PORT ADDRESS
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
|
||||
@@ -34,11 +34,10 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .SET $A0 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .SET $A0 ; DIAGNOSTIC PORT ADDRESS
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
|
||||
@@ -24,7 +24,8 @@ endif
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm fontcgac.asm fontcgau.asm
|
||||
FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm \
|
||||
fontcgac.asm fontcgau.asm fontvgarcc.asm fontvgarcu.asm
|
||||
|
||||
ifeq ($(CPUFAM),2)
|
||||
TASM=$(BINDIR)/uz80as -t hd64180
|
||||
|
||||
@@ -634,9 +634,9 @@ ANSI_BEL:
|
||||
ANSI_BS:
|
||||
LD A,(ANSI_COL) ; GET CURRENT COLUMN
|
||||
DEC A ; BACK IT UP BY ONE
|
||||
RET C ; IF CARRY, MARGIN EXCEEDED, ABORT
|
||||
RET M ; IF CARRY, MARGIN EXCEEDED, ABORT
|
||||
LD (ANSI_COL),A ; SAVE NEW COLUMN
|
||||
JP ANSI_XY ; UDPATE CUSROR AND RETURN
|
||||
JP ANSI_XY ; UDPATE CURSOR AND RETURN
|
||||
;
|
||||
ANSI_CR:
|
||||
XOR A ; ZERO ACCUM
|
||||
|
||||
@@ -66,11 +66,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
@@ -174,6 +175,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -250,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
|
||||
|
||||
@@ -95,11 +95,12 @@ SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
@@ -228,6 +229,7 @@ TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|M
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -309,10 +311,26 @@ 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|SPP|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)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
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)
|
||||
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
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)
|
||||
|
||||
@@ -60,11 +60,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU TRUE ; ENABLES STATUS LED
|
||||
@@ -156,6 +157,7 @@ TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -232,11 +234,27 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
|
||||
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
|
||||
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
|
||||
;
|
||||
LPTENABLE .EQU TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
LPTMODE .EQU LPTMODE_SPP ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|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)
|
||||
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
|
||||
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPAMODE .EQU PPAMODE_SPP ; PPA: DRIVER MODE: PPAMODE_[NONE|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
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)
|
||||
IMMMODE .EQU IMMMODE_SPP ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
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)
|
||||
|
||||
@@ -66,11 +66,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
@@ -167,6 +168,7 @@ TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -246,10 +248,16 @@ 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|SPP|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
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
|
||||
@@ -68,11 +68,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
|
||||
@@ -169,6 +170,7 @@ TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSX
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -245,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)
|
||||
|
||||
@@ -71,6 +71,13 @@ FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
;
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
@@ -174,6 +181,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -249,6 +257,25 @@ 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_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|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
|
||||
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)
|
||||
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
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)
|
||||
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
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)
|
||||
|
||||
@@ -66,11 +66,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
@@ -184,6 +185,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -259,6 +261,25 @@ 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_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|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
|
||||
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)
|
||||
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
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)
|
||||
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
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)
|
||||
|
||||
@@ -65,11 +65,12 @@ SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
@@ -86,8 +87,8 @@ VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
|
||||
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
|
||||
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
|
||||
MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
|
||||
;
|
||||
@@ -178,6 +179,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -253,6 +255,25 @@ 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_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|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 $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)
|
||||
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
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)
|
||||
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
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)
|
||||
|
||||
@@ -66,11 +66,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
|
||||
@@ -158,6 +159,7 @@ TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSX
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -234,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)
|
||||
|
||||
@@ -60,11 +60,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
|
||||
@@ -156,6 +157,7 @@ TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -232,9 +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)
|
||||
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
|
||||
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
|
||||
|
||||
@@ -66,11 +66,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $0D ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $0D ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $0D ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
@@ -174,6 +175,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -249,6 +251,25 @@ 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_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|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
|
||||
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)
|
||||
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
|
||||
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
|
||||
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)
|
||||
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
|
||||
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
|
||||
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)
|
||||
|
||||
@@ -19,7 +19,9 @@
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
;
|
||||
@@ -34,5 +36,3 @@ ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
RTCIO .EQU $70 ; RTC LATCH REGISTER ADR
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
|
||||
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
|
||||
@@ -63,11 +63,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
|
||||
@@ -158,6 +159,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -204,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
|
||||
|
||||
@@ -52,11 +52,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
|
||||
@@ -128,6 +129,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -175,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
|
||||
|
||||
@@ -63,11 +63,12 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS
|
||||
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
|
||||
;
|
||||
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
|
||||
@@ -139,6 +140,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
;
|
||||
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM)
|
||||
MDROM .EQU TRUE ; MD: ENABLE ROM DISK
|
||||
@@ -186,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
|
||||
|
||||
@@ -902,5 +902,6 @@ CVDU_INIT8563:
|
||||
;==================================================================================================
|
||||
;
|
||||
CVDU_IDAT:
|
||||
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
|
||||
.DB CVDU_KBDST
|
||||
.DB CVDU_KBDDATA
|
||||
|
||||
@@ -325,5 +325,6 @@ GDC_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
;==================================================================================================
|
||||
;
|
||||
GDC_IDAT:
|
||||
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
|
||||
.DB GDC_KBDST
|
||||
.DB GDC_KBDDATA
|
||||
|
||||
@@ -105,10 +105,11 @@ MODCNT .SET MODCNT + 1
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (DIAGENABLE)
|
||||
#IF (FPLED_ENABLE)
|
||||
#DEFINE DIAG(N) PUSH AF
|
||||
#DEFCONT \ LD A,N
|
||||
#DEFCONT \ OUT (DIAGPORT),A
|
||||
; #DEFCONT \ OUT (DIAGPORT),A
|
||||
#DEFCONT \ CALL FP_SETLEDS
|
||||
#DEFCONT \ POP AF
|
||||
#ELSE
|
||||
#DEFINE DIAG(N) \;
|
||||
@@ -1109,16 +1110,9 @@ HB_START:
|
||||
;
|
||||
#IFDEF APPBOOT
|
||||
#IF (MEMMGR == MM_Z280)
|
||||
LD A,DIAG_01
|
||||
OUT (DIAGPORT),A
|
||||
LD DE,Z280_BOOTERR
|
||||
LD C,9
|
||||
LD A,DIAG_02
|
||||
OUT (DIAGPORT),A
|
||||
CALL $0005
|
||||
LD A,DIAG_04
|
||||
OUT (DIAGPORT),A
|
||||
RET
|
||||
LD DE,Z280_BOOTERR ; POINT TO ERROR MESSAGE
|
||||
LD C,9 ; BDOS FUNC 9: WRITE STR
|
||||
JP $0005 ; DO IT AND RETURN TO OS
|
||||
;
|
||||
Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 native memory management!!!\r\n\r\n$"
|
||||
#ENDIF
|
||||
@@ -1144,9 +1138,10 @@ Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 n
|
||||
OUT0 (RPH_ACR),A ; ... REGISTER IS INITIALIZED
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DIAGENABLE)
|
||||
#IF (FPLED_ENABLE)
|
||||
; NO STACK YET, SO CAN'T USE DIAG() MACRO
|
||||
LD A,DIAG_01
|
||||
OUT (DIAGPORT),A
|
||||
OUT (FPLED_IO),A
|
||||
#ENDIF
|
||||
#IF (LEDENABLE)
|
||||
#IF (LEDMODE == LEDMODE_STD)
|
||||
@@ -1255,8 +1250,6 @@ Z280_INITZ:
|
||||
LD A,Z180_BASE
|
||||
OUT0 ($3F),A ; AT RESET, ICR IS AT $3F
|
||||
|
||||
DIAG(DIAG_02)
|
||||
|
||||
; DISABLE REFRESH
|
||||
XOR A
|
||||
OUT0 (Z180_RCR),A
|
||||
@@ -1268,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
|
||||
@@ -1349,10 +1342,12 @@ Z280_INITZ:
|
||||
; NOT WANT TO EFFECT RAM UNTIL AFTER THE BACKUP BATTERY STATUS CHECK
|
||||
; IS PERFORMED NEXT.
|
||||
;
|
||||
#IF (DIAGENABLE)
|
||||
#IF (FPLED_ENABLE)
|
||||
; NO STACK YET, SO CAN'T USE DIAG() MACRO
|
||||
LD A,DIAG_02
|
||||
OUT (DIAGPORT),A
|
||||
OUT (FPLED_IO),A
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE
|
||||
; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT.
|
||||
@@ -2232,29 +2227,6 @@ NOT_REC_M0:
|
||||
CALL DSKY_SHOW
|
||||
#ENDIF
|
||||
;
|
||||
#IF FPENABLE
|
||||
;
|
||||
; IF FRONT PANEL IS ENABLED IN CONFIG, WE NEED TO CHECK TO SEE IF THE
|
||||
; HARDWARE REALLY EXISTS. THE ONLY WAY TO DO THAT IS TO SEE IF THE
|
||||
; FRONT PANEL PORT SEEMS TO BE VALID (NOT FLOATING). HERE WE JUST
|
||||
; DO THE CHECKING AND RECORD WHETHER THE FP SWITCHES ARE USEABLE.
|
||||
;
|
||||
; THE SWITCH HARDWARE MAY OR MAY NOT BE INSTALLED. SO, HERE WE
|
||||
; ATTEMPT TO CONFIRM WE HAVE A VALID PORT. CREDIT TO STEPHEN
|
||||
; COUSINS FOR THIS APPROACH.
|
||||
LD C,FPBASE ; ADR OF SWITCH PORT
|
||||
IN C,(C) ; READ IT USING IN (C)
|
||||
IN A,(FPBASE) ; READ IT USING IN (PORT)
|
||||
CP C ; PORT FLOATING ON MISMATCH
|
||||
JR NZ,HB_SWZ ; ABORT IF FLOATING
|
||||
CP $FF ; $FF ALSO MEANS PORT INACTIVE
|
||||
JR Z,HB_SWZ ; ABORT IF SO
|
||||
OR $FF ; SIGNAL FP EXISTS
|
||||
LD (HB_HASFP),A ; AND SAVE IT
|
||||
HB_SWZ:
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF FALSE
|
||||
;
|
||||
; TEST DEBUG ***************************************************************************************
|
||||
@@ -2792,7 +2764,12 @@ HB_WDZ:
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF FPENABLE
|
||||
; THIS IS A GOOD PLACE TO DETERMINE IF FRONT PANEL HARDWARE REALLY
|
||||
; EXISTS.
|
||||
;
|
||||
CALL FP_DETECT
|
||||
;
|
||||
#IF (FPSW_ENABLE)
|
||||
;
|
||||
; IF WE HAVE FRONT PANEL SWITCHES, THIS IS THE RIGHT PLACE TO HANDLE
|
||||
; ANY CONSOLE CHANGE REQUESTS. THE FRONT PANEL HAS TWO SWITCHES
|
||||
@@ -2802,12 +2779,12 @@ HB_WDZ:
|
||||
; DEVICE.
|
||||
;
|
||||
PRTS("\r\nFP: IO=0x$")
|
||||
LD A,FPBASE
|
||||
LD A,FPSW_IO
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
; THE EXISTENCE OF THE FP WAS TESTED EARLIER. IF IT DOESN'T
|
||||
; EXIST, BAIL OUT.
|
||||
LD A,(HB_HASFP) ; GET FP EXISTENCE FLAG
|
||||
LD A,(FPSW_ACTIVE) ; GET FP EXISTENCE FLAG
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,HB_FP1 ; IF WE HAVE ONE, CONTINUE
|
||||
;
|
||||
@@ -2823,7 +2800,7 @@ HB_FP1:
|
||||
; OF A CRT DEVICE -- IT WILL JUST FAILBACK TO FIRST SERIAL
|
||||
; PORT.
|
||||
PRTS(" SWITCHES=0x$") ; TAG
|
||||
IN A,(FPBASE) ; GET SWITCH SETTINGS
|
||||
CALL FP_GETSWITCHES ; GET SWITCH SETTINGS
|
||||
CALL PRTHEXBYTE ; DISPLAY VALUE
|
||||
LD B,A ; SAVE IN REG B
|
||||
AND SW_CRT ; TEST CRT BIT
|
||||
@@ -3232,6 +3209,9 @@ HB_INITTBL:
|
||||
#IF (TMSENABLE)
|
||||
.DW TMS_INIT
|
||||
#ENDIF
|
||||
#IF (VRCENABLE)
|
||||
.DW VRC_INIT
|
||||
#ENDIF
|
||||
;#IF (DSKYENABLE)
|
||||
; .DW DSKY_INIT
|
||||
;#ENDIF
|
||||
@@ -3259,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
|
||||
@@ -3488,7 +3474,7 @@ HB_DSKREAD:
|
||||
;
|
||||
LD (HB_DSKCMD),BC ; SAVE HBIOS FUNC & UNIT
|
||||
;
|
||||
#IF (DIAGENABLE)
|
||||
#IF (FPLED_ENABLE & FPLED_DSKACT)
|
||||
; SAVE DISK UNIT NUMBER BIT MASK
|
||||
LD A,C ; GET DISK UNIT NUMBER
|
||||
LD B,A ; PUT IN B FOR LOOP COUNTER
|
||||
@@ -3578,7 +3564,7 @@ HB_DSKWRITE:
|
||||
;
|
||||
LD (HB_DSKCMD),BC ; SAVE HBIOS FUNC & UNIT
|
||||
;
|
||||
#IF (DIAGENABLE)
|
||||
#IF (FPLED_ENABLE & FPLED_DSKACT)
|
||||
; SAVE DISK UNIT NUMBER BIT MASK
|
||||
LD A,C ; GET DISK UNIT NUMBER
|
||||
LD B,A ; PUT IN B FOR LOOP COUNTER
|
||||
@@ -3675,9 +3661,9 @@ HB_DSKIOX:
|
||||
;
|
||||
HB_DSKFN:
|
||||
PUSH BC ; SAVE COUNTERS
|
||||
#IF (DIAGENABLE & DIAGDISKIO)
|
||||
#IF (FPLED_ENABLE & FPLED_DSKACT)
|
||||
LD A,(HB_DSKBIT) ; LOAD UNIT DISK BIT MASK
|
||||
OUT (DIAGPORT),A ; DISPLAY ON DIAG LEDS
|
||||
CALL FP_SETLEDS ; DISPLAY ON DIAG LEDS
|
||||
#ENDIF
|
||||
#IF (LEDENABLE & LEDDISKIO)
|
||||
LED(%00000101) ; BIT 0 FOR TINY Z80 & MBC, BIT 2 FOR SCXXX
|
||||
@@ -3685,8 +3671,8 @@ HB_DSKFN:
|
||||
LD E,1 ; ONE SECTOR
|
||||
HB_DSKFNADR .EQU $+1
|
||||
CALL PANIC ; READ ONE SECTOR
|
||||
#IF (DIAGENABLE & DIAGDISKIO)
|
||||
DIAG(DIAG_00) ; CLEAR DIAG LEDS
|
||||
#IF (FPLED_ENABLE & FPLED_DSKACT)
|
||||
DIAG($00) ; CLEAR DIAG LEDS
|
||||
#ENDIF
|
||||
#IF (LEDENABLE & LEDDISKIO)
|
||||
LED($00)
|
||||
@@ -4536,11 +4522,11 @@ SYS_GETCPUSPD1:
|
||||
;
|
||||
SYS_GETPANEL:
|
||||
;
|
||||
#IF FPENABLE
|
||||
LD A,(HB_HASFP) ; GET FP EXISTS FLAG
|
||||
#IF (FPSW_ENABLE)
|
||||
LD A,(FPSW_ACTIVE) ; FP SWITCHES ACTIVE?
|
||||
OR A ; SET FLAGS
|
||||
JR Z,SYS_GETPANEL1 ; HANDLE NOT EXISTS
|
||||
IN A,(FPBASE) ; READ SWITCHES
|
||||
CALL FP_GETSWITCHES ; READ SWITCHES
|
||||
LD H,0 ; FOR FUTURE
|
||||
LD L,A ; PUT SWITCHES VALUE IN L
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -4848,9 +4834,9 @@ SYS_SETCPUSPD_ERR:
|
||||
;
|
||||
SYS_SETPANEL:
|
||||
;
|
||||
#IF DIAGENABLE
|
||||
#IF (FPLED_ENABLE)
|
||||
LD A,L
|
||||
OUT (DIAGPORT),A
|
||||
CALL FP_SETLEDS
|
||||
XOR A
|
||||
RET
|
||||
#ELSE
|
||||
@@ -6181,6 +6167,15 @@ SIZ_GDC .EQU $ - ORG_GDC
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (VRCENABLE)
|
||||
ORG_VRC .EQU $
|
||||
#INCLUDE "vrc.asm"
|
||||
SIZ_VRC .EQU $ - ORG_VRC
|
||||
.ECHO "VRC occupies "
|
||||
.ECHO SIZ_VRC
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DMAENABLE)
|
||||
ORG_DMA .EQU $
|
||||
#INCLUDE "dma.asm"
|
||||
@@ -6236,12 +6231,22 @@ FONTCGA:
|
||||
.ECHO " CGA"
|
||||
#ENDIF
|
||||
;
|
||||
#IFDEF USEFONTVGARC
|
||||
FONTVGARC:
|
||||
#IF USELZSA2
|
||||
#INCLUDE "fontvgarcc.asm"
|
||||
#ELSE
|
||||
#INCLUDE "fontvgarcu.asm"
|
||||
#ENDIF
|
||||
.ECHO " VGARC"
|
||||
#ENDIF
|
||||
;
|
||||
SIZ_FONTS .EQU $ - ORG_FONTS
|
||||
.ECHO " occupy "
|
||||
.ECHO SIZ_FONTS
|
||||
.ECHO " bytes.\n"
|
||||
;
|
||||
#IF (CVDUENABLE | VGAENABLE) | GDCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC)))
|
||||
#IF (CVDUENABLE | VGAENABLE | GDCENABLE | VRCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC))))
|
||||
ORG_KBD .EQU $
|
||||
#INCLUDE "kbd.asm"
|
||||
SIZ_KBD .EQU $ - ORG_KBD
|
||||
@@ -6349,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"
|
||||
@@ -6438,11 +6461,101 @@ SIZ_YM2612 .EQU $ - ORG_YM2612
|
||||
;
|
||||
; INCLUDE LZSA2 decompression engine if required.
|
||||
;
|
||||
#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE) & USELZSA2)
|
||||
#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE | VRCENABLE) & USELZSA2)
|
||||
#INCLUDE "unlzsa2s.asm"
|
||||
#ENDIF
|
||||
;
|
||||
; DETECT CPU SPEED USING DS-1302 RTC
|
||||
;==================================================================================================
|
||||
; FRONT PANEL SUPPORT
|
||||
;==================================================================================================
|
||||
;
|
||||
; FRONT PANEL HARDWARE DETECTION
|
||||
;
|
||||
; WE ARE REALLY JUST CHECKING FOR SWITCHES. NO WAY TO QUERY FOR
|
||||
; LEDS. WE CHECK FOR I/O CONFLICT WITH VGARC IF ACTIVE.
|
||||
;
|
||||
FP_DETECT:
|
||||
; D: LEDS ACTIVE, E: SWITCHES ACTIVE
|
||||
LD D,TRUE ; ASSUME ACTIVE FOR NOW
|
||||
LD E,TRUE ; ASSUME ACTIVE FOR NOW
|
||||
;
|
||||
; IF VGARC IS ENABLED, CHECK IF IT IS ACTIVE. IF SO AND THE
|
||||
; I/O PORTS CONFLICT, DEACTIVATE FRONT PANEL.
|
||||
;
|
||||
#IF (VRCENABLE)
|
||||
LD A,(VRC_ACTIVE) ; GET VGARC ACTIVE STATUS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,FP_DETECT1 ; IF NO, CONTINUE
|
||||
#IF ((FPLED_IO >= $00) & (FPLED_IO <= $0F))
|
||||
; CONFLICT, DEACTIVATE LEDS
|
||||
LD D,FALSE ; FP LEDS NOT ACTIVE
|
||||
#ENDIF
|
||||
#IF ((FPSW_IO >= $00) & (FPSW_IO <= $0F))
|
||||
; CONFLICT, DEACTIVATE SWITCHES
|
||||
LD E,FALSE ; FP SWITCHES NOT ACTIVE
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
FP_DETECT1:
|
||||
; THE SWITCH HARDWARE MAY OR MAY NOT BE INSTALLED. SO, HERE WE
|
||||
; ATTEMPT TO CONFIRM WE HAVE A VALID PORT. CREDIT TO STEPHEN
|
||||
; COUSINS FOR THIS APPROACH.
|
||||
LD C,FPSW_IO ; ADR OF SWITCH PORT
|
||||
IN C,(C) ; READ IT USING IN (C)
|
||||
IN A,(FPSW_IO) ; READ IT USING IN (PORT)
|
||||
CP C ; PORT FLOATING ON MISMATCH
|
||||
JR NZ,FP_DETECT2 ; NO H/W, SET FLAG
|
||||
CP $FF ; PORT FLOATING ON $FF
|
||||
JR Z,FP_DETECT2 ; NO H/W, SET FLAG
|
||||
JR FP_DETECTZ ; H/W EXISTS, DONE
|
||||
;
|
||||
FP_DETECT2:
|
||||
LD E,FALSE ; RECORD NOT PRESENT
|
||||
;
|
||||
FP_DETECTZ:
|
||||
LD (FP_ACTIVE),DE ; RECORD RESULTS
|
||||
RET ; DONE
|
||||
;
|
||||
#IF (FPLED_ENABLE)
|
||||
;
|
||||
; SET FRONT PANEL LEDS FROM VALUE IN A
|
||||
;
|
||||
FP_SETLEDS:
|
||||
PUSH HL ; SAVE HL
|
||||
LD L,A ; LED VALUE TO L
|
||||
LD A,(FPLED_ACTIVE) ; LEDS ACTIVE?
|
||||
OR A ; SET FLAGS
|
||||
LD A,L ; RESTORE REG A
|
||||
JR Z,FP_SETLEDS1 ; BAIL OUT IF NOT ACTIVE
|
||||
OUT (FPLED_IO),A ; WRITE
|
||||
FP_SETLEDS1:
|
||||
POP HL ; RESTORE HL
|
||||
RET ; DONE
|
||||
;
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF (FPSW_ENABLE)
|
||||
;
|
||||
; GET FRONT PANEL SWITCH SETTINGS
|
||||
;
|
||||
FP_GETSWITCHES:
|
||||
LD A,(FPSW_ACTIVE) ; SWITCHES ACTIVE?
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; BAIL OUT IF NOT ACTIVE
|
||||
IN A,(FPSW_IO) ; READ SWITCHES
|
||||
RET ; DONE
|
||||
;
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
FP_ACTIVE:
|
||||
FPSW_ACTIVE .DB TRUE
|
||||
FPLED_ACTIVE .DB TRUE
|
||||
;
|
||||
;==================================================================================================
|
||||
; CPU SPEED DETECTION USING DS-1302 RTC
|
||||
;==================================================================================================
|
||||
;
|
||||
HB_CPUSPD:
|
||||
;
|
||||
@@ -6558,116 +6671,6 @@ HB_CPUSPD2:
|
||||
OR $FF ; SIGNAL ERROR
|
||||
RET ; AND DONE
|
||||
;
|
||||
; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE?
|
||||
;
|
||||
SYSCHKA:
|
||||
; CHECK DIAG LEVEL TO SEE IF WE SHOULD DISPLAY
|
||||
PUSH AF ; PRESERVE INCOMING AF VALUE
|
||||
LD A,(CB_DIAGLVL) ; GET DIAGNOSTIC LEVEL
|
||||
CP DL_ERROR ; >= ERROR LEVEL
|
||||
JR C,SYSCHK1 ; IF NOT, GO HOME
|
||||
POP AF ; RESTORE INCOMING AF VALUE
|
||||
;
|
||||
; DISPLAY SYSCHK MESSAGE
|
||||
PUSH DE ; PRESERVE DE VALUE
|
||||
LD DE,STR_SYSCHK ; POINT TO PREFIX STRING
|
||||
CALL WRITESTR ; PRINT IT
|
||||
POP DE ; RESTORE DE VALUE
|
||||
CALL XREGDMP ; DUMP REGISTERS
|
||||
|
||||
; DISPLAY ERROR CODE. IT IS AT RETURN ADDRESS+1 .. LD A,XX
|
||||
EX (SP),HL ; GET RETURN ADDRESS
|
||||
INC HL ; POINT TO THE ERROR CODE
|
||||
PUSH AF
|
||||
LD A,(HL) ; DISPLAY
|
||||
CALL PRTHEXBYTE
|
||||
POP AF
|
||||
DEC HL ; RESTORE RETURN ADDRESS
|
||||
EX (SP),HL
|
||||
;
|
||||
JR CONTINUE ; CHECK W/ USER
|
||||
;
|
||||
SYSCHK1:
|
||||
; RETURN IF MESSAGING BYPASSED BY DIAG LEVEL
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PANIC: DUMP MACHINE STATE AND HALT
|
||||
;
|
||||
PANIC:
|
||||
PUSH DE
|
||||
LD DE,STR_PANIC
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
CALL XREGDMP ; DUMP REGISTERS
|
||||
JR SYSHALT ; FULL STOP
|
||||
;
|
||||
;
|
||||
;
|
||||
CONTINUE:
|
||||
PUSH AF
|
||||
CONTINUE1:
|
||||
PUSH DE
|
||||
LD DE,STR_CONTINUE
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
CALL CIN
|
||||
RES 5,A ; FORCE UPPERCASE (IMPERFECTLY)
|
||||
CALL COUT ; ECHO
|
||||
CP 'Y'
|
||||
JR Z,CONTINUE3
|
||||
CP 'N'
|
||||
JR Z,SYSHALT
|
||||
JR CONTINUE1
|
||||
CONTINUE3:
|
||||
CALL NEWLINE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
SYSHALT:
|
||||
LD DE,STR_HALT
|
||||
CALL WRITESTR
|
||||
DI
|
||||
HALT
|
||||
;
|
||||
; PRINT VALUE OF HL AS THOUSANDTHS, IE. 0.000
|
||||
;
|
||||
PRTD3M:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD E,'0'
|
||||
LD BC,-10000
|
||||
CALL PRTD3M1
|
||||
LD E,0
|
||||
LD BC,-1000
|
||||
CALL PRTD3M1
|
||||
CALL PC_PERIOD
|
||||
LD BC,-100
|
||||
CALL PRTD3M1
|
||||
LD C,-10
|
||||
CALL PRTD3M1
|
||||
LD C,-1
|
||||
CALL PRTD3M1
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
PRTD3M1:
|
||||
LD A,'0' - 1
|
||||
PRTD3M2:
|
||||
INC A
|
||||
ADD HL,BC
|
||||
JR C,PRTD3M2
|
||||
SBC HL,BC
|
||||
CP E
|
||||
JR Z,PRTD3M3
|
||||
LD E,0
|
||||
CALL COUT
|
||||
PRTD3M3:
|
||||
RET
|
||||
;==================================================================================================
|
||||
; DISPLAY SUMMARY OF ATTACHED UNITS/DEVICES
|
||||
;==================================================================================================
|
||||
@@ -6783,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
|
||||
@@ -6798,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
|
||||
@@ -7155,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
|
||||
;
|
||||
@@ -7221,6 +7224,7 @@ PS_VDCVDU .TEXT "CVDU$"
|
||||
PS_VDGDC .TEXT "GDC$"
|
||||
PS_VDTMS .TEXT "TMS$"
|
||||
PS_VDVGA .TEXT "VGA$"
|
||||
PS_VDVRC .TEXT "VRC$"
|
||||
;
|
||||
; VIDEO TYPE STRINGS
|
||||
;
|
||||
@@ -7360,7 +7364,7 @@ CST2:
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; MISCELLANEOUS UTILITY FUNCTIONS
|
||||
; INTERNAL UTILITY FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
; SET HL TO IY+A, A IS TRASHED
|
||||
@@ -7397,6 +7401,117 @@ HB_CHS2LBA:
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE?
|
||||
;
|
||||
SYSCHKA:
|
||||
; CHECK DIAG LEVEL TO SEE IF WE SHOULD DISPLAY
|
||||
PUSH AF ; PRESERVE INCOMING AF VALUE
|
||||
LD A,(CB_DIAGLVL) ; GET DIAGNOSTIC LEVEL
|
||||
CP DL_ERROR ; >= ERROR LEVEL
|
||||
JR C,SYSCHK1 ; IF NOT, GO HOME
|
||||
POP AF ; RESTORE INCOMING AF VALUE
|
||||
;
|
||||
; DISPLAY SYSCHK MESSAGE
|
||||
PUSH DE ; PRESERVE DE VALUE
|
||||
LD DE,STR_SYSCHK ; POINT TO PREFIX STRING
|
||||
CALL WRITESTR ; PRINT IT
|
||||
POP DE ; RESTORE DE VALUE
|
||||
CALL XREGDMP ; DUMP REGISTERS
|
||||
|
||||
; DISPLAY ERROR CODE. IT IS AT RETURN ADDRESS+1 .. LD A,XX
|
||||
EX (SP),HL ; GET RETURN ADDRESS
|
||||
INC HL ; POINT TO THE ERROR CODE
|
||||
PUSH AF
|
||||
LD A,(HL) ; DISPLAY
|
||||
CALL PRTHEXBYTE
|
||||
POP AF
|
||||
DEC HL ; RESTORE RETURN ADDRESS
|
||||
EX (SP),HL
|
||||
;
|
||||
JR CONTINUE ; CHECK W/ USER
|
||||
;
|
||||
SYSCHK1:
|
||||
; RETURN IF MESSAGING BYPASSED BY DIAG LEVEL
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PANIC: DUMP MACHINE STATE AND HALT
|
||||
;
|
||||
PANIC:
|
||||
PUSH DE
|
||||
LD DE,STR_PANIC
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
CALL XREGDMP ; DUMP REGISTERS
|
||||
JR SYSHALT ; FULL STOP
|
||||
;
|
||||
;
|
||||
;
|
||||
CONTINUE:
|
||||
PUSH AF
|
||||
CONTINUE1:
|
||||
PUSH DE
|
||||
LD DE,STR_CONTINUE
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
CALL CIN
|
||||
RES 5,A ; FORCE UPPERCASE (IMPERFECTLY)
|
||||
CALL COUT ; ECHO
|
||||
CP 'Y'
|
||||
JR Z,CONTINUE3
|
||||
CP 'N'
|
||||
JR Z,SYSHALT
|
||||
JR CONTINUE1
|
||||
CONTINUE3:
|
||||
CALL NEWLINE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
SYSHALT:
|
||||
LD DE,STR_HALT
|
||||
CALL WRITESTR
|
||||
DI
|
||||
HALT
|
||||
;
|
||||
; PRINT VALUE OF HL AS THOUSANDTHS, IE. 0.000
|
||||
;
|
||||
PRTD3M:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD E,'0'
|
||||
LD BC,-10000
|
||||
CALL PRTD3M1
|
||||
LD E,0
|
||||
LD BC,-1000
|
||||
CALL PRTD3M1
|
||||
CALL PC_PERIOD
|
||||
LD BC,-100
|
||||
CALL PRTD3M1
|
||||
LD C,-10
|
||||
CALL PRTD3M1
|
||||
LD C,-1
|
||||
CALL PRTD3M1
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
PRTD3M1:
|
||||
LD A,'0' - 1
|
||||
PRTD3M2:
|
||||
INC A
|
||||
ADD HL,BC
|
||||
JR C,PRTD3M2
|
||||
SBC HL,BC
|
||||
CP E
|
||||
JR Z,PRTD3M3
|
||||
LD E,0
|
||||
CALL COUT
|
||||
PRTD3M3:
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS GLOBAL DATA
|
||||
;==================================================================================================
|
||||
|
||||
@@ -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
|
||||
;
|
||||
@@ -338,7 +340,7 @@ VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563
|
||||
VDADEV_GDC .EQU $20 ; GRAPHICS DISPLAY CTLR - UPD7220
|
||||
VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918
|
||||
VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445
|
||||
;VDADEV_V9958 .EQU $50 ; V9958 VDU
|
||||
VDADEV_VRC .EQU $50 ; VGARC
|
||||
;
|
||||
; SOUND DEVICE IDS
|
||||
;
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
;=============================================================================
|
||||
;
|
||||
; TODO:
|
||||
; - FIX SCALER CONSTANT
|
||||
; - GOPARTNER NEEDS TO HANDLE "NO PARTNER" CONDITION
|
||||
; - IMPLEMENT H/W PROBES FOR DIO AND DIDE
|
||||
;
|
||||
@@ -126,9 +125,13 @@ IDE_REG_DRVADR .EQU $0F ; DRIVE ADDRESS REGISTER (R)
|
||||
;
|
||||
; COMMAND BYTES
|
||||
;
|
||||
IDE_CIDE_NOP .EQU $00
|
||||
IDE_CIDE_DEVRES .EQU $08
|
||||
IDE_CIDE_RECAL .EQU $10
|
||||
IDE_CIDE_READ .EQU $20
|
||||
IDE_CIDE_WRITE .EQU $30
|
||||
IDE_CIDE_DEVDIAG .EQU $90
|
||||
IDE_CIDE_IDPKTDEV .EQU $A1
|
||||
IDE_CIDE_IDDEV .EQU $EC
|
||||
IDE_CIDE_SETFEAT .EQU $EF
|
||||
;
|
||||
@@ -153,6 +156,7 @@ IDE_STIOERR .EQU -4
|
||||
IDE_STRDYTO .EQU -5
|
||||
IDE_STDRQTO .EQU -6
|
||||
IDE_STBSYTO .EQU -7
|
||||
IDE_STNOTSUP .EQU -8
|
||||
;
|
||||
; DRIVE SELECTION BYTES (FOR USE IN DRIVE/HEAD REGISTER)
|
||||
;
|
||||
@@ -290,15 +294,18 @@ IDE_DEV2S: ; DEVICE 2, SLAVE
|
||||
;
|
||||
; THE IDE_WAITXXX FUNCTIONS ARE BUILT TO TIMEOUT AS NEEDED SO DRIVER WILL
|
||||
; NOT HANG IF DEVICE IS UNRESPONSIVE. DIFFERENT TIMEOUTS ARE USED DEPENDING
|
||||
; ON THE SITUATION. GENERALLY, THE FAST TIMEOUT IS USED TO PROBE FOR DEVICES
|
||||
; USING FUNCTIONS THAT PERFORM NO I/O. OTHERWISE THE NORMAL TIMEOUT IS USED.
|
||||
; IDE SPEC ALLOWS FOR UP TO 30 SECS MAX TO RESPOND. IN PRACTICE, THIS IS WAY
|
||||
; TOO LONG, BUT IF YOU ARE USING A VERY OLD DEVICE, THESE TIMEOUTS MAY NEED TO
|
||||
; BE ADJUSTED. NOTE THAT THESE ARE BYTE VALUES, SO YOU CANNOT EXCEED 255.
|
||||
; THE TIMEOUTS ARE IN UNITS OF .05 SECONDS.
|
||||
; ON THE SITUATION. THE SLOW TIMEOUT IS USED TO WAIT FOR A DEVICE TO
|
||||
; BECOME READY AFTER A HARD RESET (SPIN UP, ETC.). THE NORMAL TIMEOUT
|
||||
; IS USED DURING NORMAL OPERATION FOR ALL I/O OPERATIONS WHICH SHOULD
|
||||
; OCCUR PRETTY FAST. NOTE THAT THE ATA SPEC ALLOWS UP TO 30 SECONDS
|
||||
; FOR DEVICES TO RESPOND. WE ARE USING MUCH MORE AGGRESSIVE VALUES
|
||||
; BASED ON REAL WORLD EXPERIENCE.
|
||||
; THE PICO TIMEOUT (TOPICO) IS A SPECIAL TIMEOUT FOR THE RC2014 SD
|
||||
; PICO TO WAIT FOR THE PICO DEVICE TO INITIALIZE.
|
||||
;
|
||||
IDE_TONORM .EQU 200 ; NORMAL TIMEOUT IS 10 SECS
|
||||
IDE_TOFAST .EQU 10 ; FAST TIMEOUT IS 0.5 SECS
|
||||
IDE_TOSLOW .EQU 200 ; SLOW TIMEOUT IS 20 SECS
|
||||
IDE_TONORM .EQU 5 ; NORMAL TIMEOUT IS 0.55 SECS
|
||||
IDE_TOPICO .EQU 50 ; RC2014 SD PICO (5 SECONDS)
|
||||
;
|
||||
;=============================================================================
|
||||
; INITIALIZATION ENTRY POINT
|
||||
@@ -306,9 +313,12 @@ IDE_TOFAST .EQU 10 ; FAST TIMEOUT IS 0.5 SECS
|
||||
;
|
||||
IDE_INIT:
|
||||
; COMPUTE CPU SPEED COMPENSATED TIMEOUT SCALER
|
||||
; AT 1MHZ, THE SCALER IS 218 (50000US / 229TS = 218)
|
||||
; SCALER IS THEREFORE 218 * CPU SPEED IN MHZ
|
||||
LD DE,961 ; LOAD SCALER FOR 1MHZ
|
||||
; ONE INTERNAL LOOP IN WAITBSY IS 180TS. ON A 1 MHZ CPU, 1 TS
|
||||
; TAKES 1NS. SO 1/10 SECOND IS 100000 TS ON A 1 MHZ CPU.
|
||||
; SINCE 1 INTERNAL LOOP IS 180 TS, IT TAKES 100000 / 180 = 556
|
||||
; INTERNAL LOOPS FOR 1/10 SECOND. SO, WE WANT TO USE
|
||||
; 523 * CPU MHZ FOR INTERNAL LOOP COUNT.
|
||||
LD DE,556 ; LOAD SCALER FOR 1MHZ
|
||||
LD A,(CB_CPUMHZ) ; LOAD CPU SPEED IN MHZ
|
||||
CALL MULT8X16 ; HL := DE * A
|
||||
LD (IDE_TOSCALER),HL ; SAVE IT
|
||||
@@ -359,7 +369,7 @@ IDE_INIT2A:
|
||||
LD DE,IDE_STR_NOHW ; NOT PRESENT MESSAGE
|
||||
CALL WRITESTR ; DISPLAY IT
|
||||
JR IDE_INIT4 ; SKIP CFG ENTRY
|
||||
;
|
||||
;
|
||||
IDE_INIT3:
|
||||
CALL IDE_RESET ; RESET THE BUS
|
||||
CALL IDE_INIT5 ; DETECT/INIT MASTER
|
||||
@@ -367,7 +377,7 @@ IDE_INIT3:
|
||||
CALL IDE_GOPARTNER ; SWITCH IY TO PARTNER CFG
|
||||
CALL IDE_INIT5 ; DETECT/INIT SLAVE
|
||||
POP IY ; RESTORE CFG PTR
|
||||
;
|
||||
;
|
||||
IDE_INIT4:
|
||||
LD DE,IDE_CFGSIZ ; SIZE OF CFG TABLE ENTRY
|
||||
ADD IY,DE ; BUMP POINTER
|
||||
@@ -385,13 +395,28 @@ IDE_INIT5:
|
||||
PUSH IY ; CFG ENTRY POINTER
|
||||
POP DE ; COPY TO DE
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
|
||||
;
|
||||
; START PRINTING DEVICE INFO
|
||||
CALL IDE_PRTPREFIX ; PRINT DEVICE PREFIX
|
||||
LD A,(IY+IDE_TYPE)
|
||||
LD DE,IDE_STR_TYPEATA
|
||||
CP IDE_TYPEATA
|
||||
CALL Z,WRITESTR
|
||||
LD DE,IDE_STR_TYPEATAPI
|
||||
CP IDE_TYPEATAPI
|
||||
CALL Z,WRITESTR
|
||||
;
|
||||
; CHECK FOR BAD STATUS
|
||||
LD A,(IY+IDE_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JP NZ,IDE_PRTSTAT ; EXIT VIA PRINT STATUS
|
||||
JP Z,IDE_INIT6
|
||||
CALL PC_SPACE
|
||||
JP NZ,IDE_PRTSTATSTR ; EXIT VIA PRINT STATUS STRING
|
||||
;
|
||||
CALL IDE_PRTPREFIX ; PRINT DEVICE PREFIX
|
||||
IDE_INIT6:
|
||||
LD A,(IY+IDE_TYPE) ; GET DEVICE TYPE
|
||||
CP IDE_TYPEATA ; ATA?
|
||||
RET NZ ; IF NOT, THEN DONE
|
||||
;
|
||||
LD DE,IDE_STR_8BIT
|
||||
BIT 1,(IY+IDE_ACC) ; 8 BIT ACCESS?
|
||||
@@ -555,26 +580,12 @@ IDE_DEVICE1:
|
||||
IDE_MEDIA:
|
||||
LD A,E ; GET FLAGS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,IDE_MEDIA2 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
JR Z,IDE_MEDIA1 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
;
|
||||
; GET CURRENT STATUS
|
||||
LD A,(IY+IDE_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,IDE_MEDIA1 ; ERROR ACTIVE, GO RIGHT TO RESET
|
||||
;
|
||||
; USE IDENTIFY COMMAND TO CHECK DEVICE
|
||||
LD HL,IDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),IDE_TOFAST ; USE FAST TIMEOUT DURING IDENTIFY COMMAND
|
||||
CALL IDE_SELUNIT ; HARDWARE SELECTION OF TARGET UNIT
|
||||
CALL IDE_IDENTIFY ; EXECUTE IDENTIFY COMMAND
|
||||
LD HL,IDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),IDE_TONORM ; BACK TO NORMAL TIMEOUT
|
||||
JR Z,IDE_MEDIA2 ; IF SUCCESS, BYPASS RESET
|
||||
;CALL IDE_RESET ; RESET IDE INTERFACE
|
||||
CALL IDE_INITUNIT ; RE-INITIALIZE UNIT
|
||||
;
|
||||
IDE_MEDIA1:
|
||||
CALL IDE_RESET ; RESET IDE INTERFACE
|
||||
;
|
||||
IDE_MEDIA2:
|
||||
LD A,(IY+IDE_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
LD D,0 ; NO MEDIA CHANGE DETECTED
|
||||
@@ -655,6 +666,32 @@ IDE_SETFEAT:
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_NOP:
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_PRTPREFIX
|
||||
PRTS(" NOP$")
|
||||
#ENDIF
|
||||
LD A,(IDE_DRVHD)
|
||||
;OUT (IDE_IO_DRVHD),A
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_DRVHD
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; EXECUTE THE NOP COMMAND, BUT DON'T WAIT FOR DRDY, JUST
|
||||
; MAKE SURE BUSY IS CLEAR. THIS COMMAND IS USED DURING
|
||||
; DEVICE DETECTION/INITIALIZATION AND ATAPI DEVICES WILL
|
||||
; NOT ASSERT DRDY AFTER RESET.
|
||||
LD A,IDE_CIDE_NOP ; CMD = NOP
|
||||
LD (IDE_CMD),A ; SAVE IT
|
||||
CALL IDE_WAITBSY
|
||||
RET NZ
|
||||
JP IDE_RUNCMD1 ; RUN COMMAND AND EXIT
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_IDENTIFY:
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_PRTPREFIX
|
||||
@@ -672,6 +709,40 @@ IDE_IDENTIFY:
|
||||
LD (IDE_CMD),A
|
||||
CALL IDE_RUNCMD
|
||||
RET NZ
|
||||
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
BIT 3,A ; IS DRQ SET?
|
||||
JP Z,IDE_NOMEDIA
|
||||
;
|
||||
LD HL,HB_WRKBUF
|
||||
JP IDE_GETBUF ; EXIT THRU BUFRD
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_IDENTIFYPACKET:
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_PRTPREFIX
|
||||
PRTS(" IDPKTDEV$")
|
||||
#ENDIF
|
||||
LD A,(IDE_DRVHD)
|
||||
;OUT (IDE_IO_DRVHD),A
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_DRVHD
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
LD A,IDE_CIDE_IDPKTDEV
|
||||
LD (IDE_CMD),A
|
||||
CALL IDE_RUNCMD
|
||||
RET NZ
|
||||
;
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
BIT 3,A ; IS DRQ SET?
|
||||
JP Z,IDE_NOMEDIA
|
||||
;
|
||||
LD HL,HB_WRKBUF
|
||||
JP IDE_GETBUF ; EXIT THRU BUFRD
|
||||
;
|
||||
@@ -766,10 +837,6 @@ IDE_SETADDR:
|
||||
#ENDIF
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_COUNT
|
||||
;;;
|
||||
;;#IF (DSKYENABLE)
|
||||
;; CALL IDE_DSKY
|
||||
;;#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
@@ -781,6 +848,7 @@ IDE_RUNCMD:
|
||||
CALL IDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
RET NZ ; BAIL OUT ON TIMEOUT
|
||||
;
|
||||
IDE_RUNCMD1:
|
||||
LD A,(IDE_CMD) ; GET THE COMMAND
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
@@ -937,47 +1005,14 @@ IDE_RESET:
|
||||
PRTS(" RESET$")
|
||||
#ENDIF
|
||||
;
|
||||
;#IF (IDEMODE == IDEMODE_RC)
|
||||
; HARD RESET
|
||||
;
|
||||
; OLDER CF CARDS DO NOT SEEM TO SET THE
|
||||
; REGISTERS ON RESET, SO HERE WE FAKE THINGS BY
|
||||
; SETTING THEM AS A RESET WOULD. SO WE ALWAYS
|
||||
; DO THE FAKE.
|
||||
;LD A,(IY+IDE_MODE) ; GET MODE
|
||||
;CP IDEMODE_RC ; RCBUS?
|
||||
;JR NZ,IDE_RESET2 ; IF NOT, BYPASS
|
||||
;
|
||||
; RCBUS CANNOT ADDRESS THE DEVICE CONTROL PORT AND
|
||||
; HAS NO WAY TO PERFORM A HARD RESET FROM SOFTWARE,
|
||||
; SO FAKE IT BY SETTING THE REGISTERS TO THE SAME
|
||||
; VALUES THAT A RESET WOULD CAUSE.
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" FAKE$")
|
||||
#ENDIF
|
||||
XOR A
|
||||
;OUT (IDE_IO_CYLLO),A
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_CYLLO
|
||||
;OUT (IDE_IO_CYLHI),A
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_CYLHI
|
||||
INC A
|
||||
;OUT (IDE_IO_COUNT),A
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_COUNT
|
||||
;OUT (IDE_IO_SECT),A
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_SECT
|
||||
;
|
||||
IDE_RESET2:
|
||||
;
|
||||
;#ENDIF
|
||||
;
|
||||
;#IF (IDEMODE == IDEMODE_MK4)
|
||||
; RESET LINE IS NORMALLY PULSED AT POWER ON. HOWEVER, THIS IS NOT
|
||||
; DONE FOR MK4 BUILT-IN IDE PORT, SO WE DO IT NOW.
|
||||
;
|
||||
LD A,(IY+IDE_MODE) ; GET MODE
|
||||
CP IDEMODE_MK4 ; MK4?
|
||||
JR NZ,IDE_RESET1 ; IF NOT, BYPASS
|
||||
JR NZ,IDE_RESET2 ; IF NOT, BYPASS
|
||||
;
|
||||
; USE HARDWARE RESET LINE
|
||||
#IF (IDETRACE >= 3)
|
||||
@@ -996,66 +1031,59 @@ IDE_RESET2:
|
||||
LD DE,20
|
||||
CALL VDELAY
|
||||
;
|
||||
IDE_RESET1:
|
||||
; SOME CF CARDS AND CF CARD EMULATORS NEED A LITTLE TIME TO
|
||||
; "BOOT" THEIR INTERNAL ELECTRONICS, SO THEY CANNOT ASSERT BUSY
|
||||
; IMMEDIATELY. A SMALL WAIT IS PERFORMED HERE TO GIVE SUCH DEVICES
|
||||
; A BETTER CHANCE TO SUCCEED LATER.
|
||||
;
|
||||
;#ENDIF
|
||||
;;; CALL LDELAY ; DELAY FOR SLAVE INIT
|
||||
LD DE,150000 / 16 ;
|
||||
CALL VDELAY ; SMALL DELAY
|
||||
;
|
||||
;#IF ((IDEMODE != IDEMODE_MK4) & (IDEMODE != IDEMODE_RC))
|
||||
JR IDE_RESET3 ; SKIP SOFT RESET
|
||||
;
|
||||
; SOFT RESET
|
||||
;
|
||||
; RC CANNOT ACCESS DEVICE CONTROL REG, SO SKIP THIS
|
||||
;
|
||||
IDE_RESET2:
|
||||
LD A,(IY+IDE_MODE) ; GET MODE
|
||||
CP IDEMODE_MK4 ; MK4?
|
||||
JR Z,IDE_RESET3 ; IF SO, BYPASS
|
||||
CP IDEMODE_RC ; RCBUS?
|
||||
JR Z,IDE_RESET3 ; IF SO, BYPASS
|
||||
JR Z,IDE_RESET4 ; IF SO, BYPASS
|
||||
;
|
||||
; INITIATE SOFT RESET
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" SOFT$")
|
||||
#ENDIF
|
||||
LD A,%00001110 ; NO INTERRUPTS, ASSERT RESET BOTH DRIVES
|
||||
LD A,%00001110 ; ASSERT RESET, NO INTERRUPTS
|
||||
;OUT (IDE_IO_CTRL),A
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_CTRL
|
||||
LD DE,20 ; DELAY 320US (SPEC IS >= 25US)
|
||||
CALL VDELAY
|
||||
;
|
||||
IDE_RESET3:
|
||||
;
|
||||
;#ENDIF
|
||||
; CONFIGURE OPERATION AND END SOFT RESET
|
||||
;
|
||||
LD DE,2 ; DELAY 32US (SPEC IS >= 25US)
|
||||
CALL VDELAY
|
||||
;
|
||||
;#IF (IDEMODE != IDEMODE_RC)
|
||||
;
|
||||
LD A,(IY+IDE_MODE) ; GET MODE
|
||||
CP IDEMODE_RC ; RCBUS?
|
||||
JR Z,IDE_RESET4 ; IF SO, BYPASS
|
||||
;
|
||||
; CONFIGURE OPERATION AND END SOFT RESET
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" CONFIG$")
|
||||
#ENDIF
|
||||
LD A,%00001010 ; NO INTERRUPTS, DEASSERT RESET
|
||||
LD DE,20 ; DELAY 320US (SPEC IS >= 25US)
|
||||
CALL VDELAY
|
||||
LD A,%00001010 ; DEASSERT RESET, NO INTERRUPTS
|
||||
;OUT (IDE_IO_CTRL),A ; PUSH TO REGISTER
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_CTRL
|
||||
;
|
||||
IDE_RESET4:
|
||||
;
|
||||
;#ENDIF
|
||||
;
|
||||
; SPEC ALLOWS UP TO 450MS FOR DEVICES TO ASSERT THEIR PRESENCE
|
||||
; VIA -DASP. I ENCOUNTER PROBLEMS LATER ON IF I DON'T WAIT HERE
|
||||
; FOR THAT TO OCCUR. THUS FAR, IT APPEARS THAT 150MS IS SUFFICIENT
|
||||
; FOR ANY DEVICE ENCOUNTERED. MAY NEED TO EXTEND BACK TO 500MS
|
||||
; IF A SLOWER DEVICE IS ENCOUNTERED.
|
||||
;
|
||||
;LD DE,500000/16 ; ~500MS
|
||||
LD DE,150000/16 ; ~???MS
|
||||
CALL VDELAY
|
||||
LD HL,IDE_TONORM ; NORMAL TIMEOUT NOW
|
||||
LD (IDE_TIMEOUT),HL ; AND RESTORE IT
|
||||
;
|
||||
; INITIALIZE THE INDIVIDUAL UNITS (MASTER AND SLAVE).
|
||||
; BASED ON TESTING, IT APPEARS THAT THE MASTER UNIT MUST
|
||||
; BE DONE FIRST OR THIS BEHAVES BADLY.
|
||||
;
|
||||
PUSH IY ; SAVE CFG PTR
|
||||
BIT 0,(IY+IDE_ACC) ; MASTER?
|
||||
CALL Z,IDE_GOPARTNER ; IF NOT, SWITCH TO MASTER
|
||||
@@ -1073,14 +1101,10 @@ IDE_INITUNIT:
|
||||
CALL IDE_SELUNIT ; SELECT UNIT
|
||||
RET NZ ; ABORT IF ERROR
|
||||
|
||||
LD HL,IDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),IDE_TONORM ; SET NORMAL TIMEOUT
|
||||
|
||||
CALL IDE_PROBE ; DO PROBE
|
||||
RET NZ ; JUST RETURN IF NOTHING THERE
|
||||
|
||||
CALL IDE_INITDEV ; IF FOUND, ATTEMPT TO INIT DEVICE
|
||||
RET ; DONE
|
||||
JP IDE_INITDEV ; EXIT VIA INITDEV
|
||||
;
|
||||
; TAKE ANY ACTIONS REQUIRED TO SELECT DESIRED PHYSICAL UNIT
|
||||
; UNIT IS SPECIFIED IN IDE_UNIT
|
||||
@@ -1095,9 +1119,15 @@ IDE_SELUNIT:
|
||||
BIT 0,(IY+IDE_ACC) ; MASTER?
|
||||
JR Z,IDE_SELUNIT1 ; HANDLE SLAVE
|
||||
LD A,IDE_DRVMASTER ; MASTER
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" MASTER$")
|
||||
#ENDIF
|
||||
JR IDE_SELUNIT2
|
||||
IDE_SELUNIT1:
|
||||
LD A,IDE_DRVSLAVE ; SLAVE
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" SLAVE$")
|
||||
#ENDIF
|
||||
IDE_SELUNIT2:
|
||||
LD (IDE_DRVHD),A ; SAVE IT
|
||||
XOR A ; SUCCESS
|
||||
@@ -1106,10 +1136,25 @@ IDE_SELUNIT2:
|
||||
;
|
||||
;
|
||||
IDE_PROBE:
|
||||
;
|
||||
; PROBE FOR A DRIVE ON THE INTERFACE (EITHER MASTER OR SLAVE).
|
||||
; IDEALLY, THIS IS BEING CALLED IMMEDIATELY AFTER A HARD OR SOFT
|
||||
; INTERFACE RESET. HOWEVER, THERE ARE SOME HARDWARE IMPLEMENTATTIONS
|
||||
; WHICH ARE NOT CAPABLE OF EITHER A HARD NOR SOFT RESET. SO THIS
|
||||
; CODE SHOULD TRY TO HANDLE THE SCENARIO WHERE NO INTERFACE RESET
|
||||
; HAS OCCURRED.
|
||||
;
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_PRTPREFIX
|
||||
PRTS(" PROBE$") ; LABEL FOR IO ADDRESS
|
||||
#ENDIF
|
||||
;
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; SELECT DEVICE (MASTER/SLAVE)
|
||||
LD A,(IDE_DRVHD)
|
||||
@@ -1120,20 +1165,96 @@ IDE_PROBE:
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CALL DELAY ; DELAY ~16US
|
||||
;
|
||||
; THE RC2014 SD PICO TAKES A FEW SECONDS TO INITIALIZE. DURING THIS
|
||||
; TIME IT APPEARS TO RETURN $00. BELOW IS A SPECIAL CASE FOR RC2014
|
||||
; TO WAIT FOR THIS DEVICE TO INITIALIZE. WE ONLY DO THIS IF THE
|
||||
; MASTER DEVICE IS BEING PROBED. WHEN THE SLAVE DEVICE IS
|
||||
; SELECTED, THE SD PICO WILL ALWAYS RETURN ZERO AND CAUSE AN
|
||||
; UNNECESSARY DELAY.
|
||||
;
|
||||
LD A,(IY+IDE_MODE) ; GET MODE BITS
|
||||
CP IDEMODE_RC ; RCBUS?
|
||||
JR NZ,IDE_PROBE0 ; IF NOT, BYPASS
|
||||
;
|
||||
LD A,(IDE_DRVHD) ; GET CURRENT SETTING
|
||||
BIT 4,A ; TEST SLAVE BIT
|
||||
JR NZ,IDE_PROBE0 ; IF SO, BYPASS
|
||||
;
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,IDE_PROBE0 ; SKIP IF NOT $00
|
||||
;
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" WAIT$")
|
||||
#ENDIF
|
||||
LD HL,(IDE_TIMEOUT) ; GET CURRENT TIMEOUT
|
||||
PUSH HL ; SAVE IT
|
||||
LD HL,IDE_TOPICO ; SLOW TIMEOUT FOR THIS
|
||||
LD (IDE_TIMEOUT),HL ; SET IT
|
||||
CALL IDE_WAIT00 ; WAIT FOR $00 TO CLEAR
|
||||
POP HL ; RECOVER TIMEOUT
|
||||
LD (IDE_TIMEOUT),HL ; SET IT
|
||||
;
|
||||
; IF WE GET HERE AND THE DRIVE IS STILL INITIALIZING, WE NEED TO
|
||||
; WAIT UNTIL THE DRIVE IS READY. IN THIS CASE BUSY *WILL* BE HIGH.
|
||||
; BASED ON TESTING, DRDY AND DSC VALUES VARY. EVERYTHING ELSE SEEMS
|
||||
; TO BE ZERO. SO, WE FILTER OUT DRDY & DSC, THEN LOOK FOR BUSY=1
|
||||
; AND ALL ELSE ZERO. THIS GENERALLY AVOIDS VALUES THAT ARE TYPICAL
|
||||
; FOR FLOATING PORTS AND SO CAN BE USED TO DETERMINE IF WE NEED TO
|
||||
; WAIT FOR THE DEVICE TO BE READY. THIS WAIT IS MANDATORY BECAUSE
|
||||
; SOME (IF NOT ALL) DEVICES WILL NOT PERSIST REGISTER VALUES UNTIL
|
||||
; THE DRIVE IS READY.
|
||||
;
|
||||
IDE_PROBE0:
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
AND %10101111 ; FILTER OUT DRDY & DSC
|
||||
CP $80 ; INIT IN PROGRESS?
|
||||
JR NZ,IDE_PROBE1 ; IF NOT, SKIP AHEAD
|
||||
;
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" WAIT$")
|
||||
#ENDIF
|
||||
;
|
||||
LD HL,(IDE_TIMEOUT) ; GET CURRENT TIMEOUT
|
||||
PUSH HL ; SAVE IT
|
||||
LD HL,IDE_TOSLOW ; SLOW TIMEOUT FOR THIS
|
||||
LD (IDE_TIMEOUT),HL ; SET IT
|
||||
CALL IDE_WAITBSY ; WAIT FOR BUSY TO CLEAR
|
||||
POP HL ; RECOVER TIMEOUT
|
||||
LD (IDE_TIMEOUT),HL ; SET IT
|
||||
;
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; TEST FOR PRESENCE OF IDE REGISTERS. USE LBA0/1 TO SEE
|
||||
; IF VALUE CAN BE PERSISTED. THE USE OF BOTH LBA0 AND LBA1
|
||||
; IS TO MAINTAIN CONSISTENCY WITH TGHE THE PPIDE DRIVER BECAUSE
|
||||
; IS TO MAINTAIN CONSISTENCY WITH THE THE PPIDE DRIVER BECAUSE
|
||||
; PPI ITSELF WILL PERSIST THE LAST VALUE WRITTEN, SO WE USE
|
||||
; MULTIPLE REGISTERS TO WORK AROUND THIS FALSE POSITIVE.
|
||||
; MULTIPLE REGISTERS TO WORK AROUND THIS.
|
||||
;
|
||||
IDE_PROBE1:
|
||||
; $AA -> LBA0
|
||||
LD A,$AA
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_LBA0
|
||||
;
|
||||
;
|
||||
; $55 => LBA1
|
||||
LD A,$55
|
||||
CALL IDE_OUT
|
||||
@@ -1163,42 +1284,34 @@ IDE_PROBE:
|
||||
CALL IDE_REGDUMP
|
||||
#ENDIF
|
||||
;
|
||||
;JR IDE_PROBE1 ; *DEBUG*
|
||||
;
|
||||
IDE_PROBE0:
|
||||
CALL IDE_WAITBSY ; WAIT FOR BUSY TO CLEAR
|
||||
JP NZ,IDE_NOMEDIA ; CONVERT TIMEOUT TO NO MEDIA AND RETURN
|
||||
;
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_REGDUMP
|
||||
#ENDIF
|
||||
;
|
||||
; CHECK STATUS
|
||||
;IN A,(IDE_IO_STAT) ; GET STATUS
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE ; IF DEBUG, PRINT STATUS
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS TO TEST FOR ZERO
|
||||
JP Z,IDE_NOMEDIA
|
||||
;
|
||||
IDE_PROBE1:
|
||||
; ASSUME ATA DEVICE FOR NOW, RECORD TYPE AND RETURN SUCCESS
|
||||
LD A,IDE_TYPEATA ; TYPE = ATA
|
||||
LD (IY+IDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; DONE, NOTE THAT A=0 AND Z IS SET
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; (RE)INITIALIZE DEVICE
|
||||
;
|
||||
IDE_INITDEV:
|
||||
;
|
||||
LD A,(IY+IDE_TYPE) ; GET THE DEVICE TYPE
|
||||
OR A ; SET FLAGS
|
||||
JP Z,IDE_NOMEDIA ; EXIT SETTING NO MEDIA STATUS
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_PRTPREFIX
|
||||
PRTS(" INITDEV$") ; LABEL FOR IO ADDRESS
|
||||
#ENDIF
|
||||
;
|
||||
; IF THE IDE STATUS BYTE IS $00, WE HAVE EITHER A NON-PRESENT SLAVE
|
||||
; OR AN ATAPI DEVICE. TO DIFFERENTIATE THESE POSSIBILITIES, WE RUN
|
||||
; A NOP COMMAND. IF WE HAVE AN ATAPI DEVICE, THIS WILL CAUSE THE
|
||||
; STATUS BYTE TO BE "NORMAL" (NON-ZERO). IF THE STATUS IS STILL
|
||||
; ZERO, WE ABORT WITH A NO MEDIA STATUS. NOTE THAT THE NOP COMMAND
|
||||
; RETURNS A COMMAND ERROR BY DESIGN. WE JUST IGNORE THE ERROR.
|
||||
;
|
||||
CALL IDE_NOP
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
OR A
|
||||
JP Z,IDE_NOMEDIA
|
||||
;
|
||||
; WE NEED TO SETUP 8-BIT MODE BEFORE DOING ANYTHING ELSE
|
||||
;
|
||||
IDE_INITDEV0A:
|
||||
BIT 1,(IY+IDE_ACC) ; 8 BIT ACCESS?
|
||||
JR Z,IDE_INITDEV0 ; NO, DO 16 BIT INIT
|
||||
LD A,IDE_FEAT_ENABLE8BIT ; FEATURE VALUE = ENABLE 8-BIT PIO
|
||||
@@ -1216,10 +1329,14 @@ IDE_INITDEV0:
|
||||
IDE_INITDEV00:
|
||||
;
|
||||
CALL IDE_IDENTIFY ; EXECUTE IDENTIFY COMMAND
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
JR NZ,IDE_INITDEVP ; ON ERROR, TRY PACKET DEVICE
|
||||
;
|
||||
; DECLARE WE ARE ATA
|
||||
LD A,IDE_TYPEATA ; OTHERWISE TYPE=ATA
|
||||
LD (IY+IDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
;
|
||||
LD DE,HB_WRKBUF ; POINT TO BUFFER
|
||||
#IF (IDETRACE >= 3)
|
||||
#IF (IDETRACE >= 4)
|
||||
CALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
|
||||
#ENDIF
|
||||
;
|
||||
@@ -1239,38 +1356,15 @@ IDE_INITDEV00:
|
||||
CALL PRTHEXWORD
|
||||
#ENDIF
|
||||
;
|
||||
; SEE PAGE 114 OF CF+ & CF SPECIFICATION REV. 3.0 FOR CF CARD
|
||||
; SIGNATURE VALUES. ALL OF THE BELOW ARE DOCUMENTED THERE EXCEPT
|
||||
; $045A WHICH IS A VALUE DISCOVERED ON A CF<->SD CARD ADAPTER.
|
||||
;
|
||||
; SIGNATURE $045A IS NOT LISTED IN THE CF SPEC. IT WAS ADDED BECAUSE
|
||||
; IT WAS SEEN IN THE WILD ON A CF-SD ADAPTER. HOWEVER IT HAS NOW
|
||||
; ALSO BEEN SEEN ON A SPINNING HARD DISK. SINCE IT IS AMBIGUOUS, I
|
||||
; WILL CONSIDER IT TO BE A HARD DISK.
|
||||
;
|
||||
LD BC,$848A ; STANDARD CF CARD SIGNATURE %1000 1111 1000 1010
|
||||
CALL IDE_INITDEV000 ; TEST & SET
|
||||
LD BC,$044A ; ALT SIG FOR CF NON-REMOVABLE %0000 0100 0100 1010
|
||||
CALL IDE_INITDEV000 ; TEST & SET
|
||||
;LD BC,$045A ; ?ALT SIG FOR CF NON-REMOVABLE %0000 0100 0101 1010
|
||||
;CALL IDE_INITDEV000 ; TEST & SET
|
||||
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE %0000 0000 0100 0000
|
||||
CALL IDE_INITDEV000 ; TEST & SET
|
||||
JR IDE_INITDEV1 ; CONTINUE INIT
|
||||
;
|
||||
IDE_INITDEV000:
|
||||
; CHECK IF FIRST WORD OF IDENTIFY DATA MATCHES VALUE IN BC
|
||||
; AND SET CF FLAG IF SO
|
||||
LD HL,(HB_WRKBUF) ; FIRST WORD OF IDENTIFY DATA
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,BC ; COMPARE
|
||||
RET NZ ; ABORT IF NOT EQUAL
|
||||
; DETERMINE IF COMPACTFLASH MEDIA
|
||||
LD A,(HB_WRKBUF+(83*2)) ; LOW BYTE OF WORD 83
|
||||
BIT 2,A ; TEST CFA FEATURE SET BIT
|
||||
JR Z,IDE_INITDEV1 ; IF NOT, SKIP
|
||||
SET 0,(IY+IDE_MED) ; ELSE SET FLAGS BIT FOR CF MEDIA
|
||||
RET ; AND RETURN
|
||||
;
|
||||
IDE_INITDEV1:
|
||||
; DETERMINE IF LBA CAPABLE
|
||||
LD A,(HB_WRKBUF+98+1) ; GET BYTE WITH LBA BIT FROM BUFFER
|
||||
LD A,(HB_WRKBUF+98+1) ; HIGH BYTE OF WORD 49
|
||||
BIT 1,A ; CHECK THE LBA BIT
|
||||
JR Z,IDE_INITDEV2 ; NOT SET, BYPASS
|
||||
SET 1,(IY+IDE_MED) ; SET FLAGS BIT FOR LBA
|
||||
@@ -1287,12 +1381,39 @@ IDE_INITDEV2:
|
||||
POP BC ; RECOVER POINTER TO CAPACITY ENTRY
|
||||
CALL ST32 ; SAVE CAPACITY
|
||||
;
|
||||
; RESET CARD STATUS TO 0 (OK)
|
||||
; RECORD STATUS OK
|
||||
XOR A ; A := 0 (STATUS = OK)
|
||||
LD (IY+IDE_STAT),A ; SAVE IT
|
||||
;
|
||||
RET ; RETURN, A=0, Z SET
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_INITDEVP:
|
||||
CALL IDE_IDENTIFYPACKET ; EXECUTE IDENTIFY COMMAND
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
;
|
||||
; DECLARE WE ARE ATAPI
|
||||
LD A,IDE_TYPEATAPI ; OTHERWISE TYPE=ATAPI
|
||||
LD (IY+IDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
;
|
||||
LD DE,HB_WRKBUF ; POINT TO BUFFER
|
||||
#IF (IDETRACE >= 4)
|
||||
CALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
|
||||
#ENDIF
|
||||
;
|
||||
LD (IY+IDE_MED),0 ; CLEAR FLAGS
|
||||
;
|
||||
; DONE FOR NOW, ATAPI NOT INPLEMENTED
|
||||
;
|
||||
; RETURN NOT SUPPORTED STATUS
|
||||
JP IDE_NOTSUP ; NOT SUPPORTED
|
||||
;
|
||||
; ; RECORD STATUS OK
|
||||
; XOR A ; A := 0 (STATUS = OK)
|
||||
; LD (IY+IDE_STAT),A ; SAVE IT
|
||||
; RET
|
||||
;
|
||||
; SWITCH IY POINTER FROM CURRENT UNIT CFG TO PARTNER UNIT CFG
|
||||
;
|
||||
IDE_GOPARTNER:
|
||||
@@ -1338,7 +1459,7 @@ IDE_WAITRDY2:
|
||||
;
|
||||
;
|
||||
IDE_WAITDRQ:
|
||||
LD A,(IDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS
|
||||
LD A,(IDE_TIMEOUT) ; GET TIMEOUT IN 0.1 SECS
|
||||
LD B,A ; PUT IN OUTER LOOP VAR
|
||||
IDE_WAITDRQ1:
|
||||
LD DE,(IDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR
|
||||
@@ -1360,14 +1481,14 @@ IDE_WAITDRQ2:
|
||||
;
|
||||
;
|
||||
IDE_WAITBSY:
|
||||
LD A,(IDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS
|
||||
LD A,(IDE_TIMEOUT) ; GET TIMEOUT IN 0.1 SECS
|
||||
LD B,A ; PUT IN OUTER LOOP VAR
|
||||
IDE_WAITBSY1:
|
||||
LD DE,(IDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR
|
||||
IDE_WAITBSY2:
|
||||
;IN A,(IDE_IO_STAT) ; WAIT FOR DRIVE'S 512 BYTE READ BUFFER ; 11TS
|
||||
CALL IDE_IN ; 17TS + ???TS
|
||||
.DB IDE_REG_STAT ; 0TS
|
||||
;IN A,(IDE_IO_STAT) ; WAIT FOR DRIVE'S 512 BYTE READ BUFFER
|
||||
CALL IDE_IN ; 17TS + 121TS
|
||||
.DB IDE_REG_STAT
|
||||
LD C,A ; SAVE IT ; 4TS
|
||||
AND %10000000 ; TO FILL (OR READY TO FILL) ; 7TS
|
||||
RET Z ; 5TS
|
||||
@@ -1376,25 +1497,45 @@ IDE_WAITBSY2:
|
||||
OR E ; 4TS
|
||||
JR NZ,IDE_WAITBSY2 ; 12TS
|
||||
DJNZ IDE_WAITBSY1 ; -----
|
||||
JP IDE_BSYTO ; EXIT WITH BSYTO ERR ; ??TS
|
||||
JP IDE_BSYTO ; EXIT WITH BSYTO ERR ; 180
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_WAIT00:
|
||||
LD A,(IDE_TIMEOUT) ; GET TIMEOUT IN 0.1 SECS
|
||||
LD B,A ; PUT IN OUTER LOOP VAR
|
||||
IDE_WAIT001:
|
||||
LD DE,(IDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR
|
||||
IDE_WAIT002:
|
||||
;IN A,(IDE_IO_STAT) ; WAIT FOR DRIVE'S 512 BYTE READ BUFFER
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; DONE IF NOT ZERO
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,IDE_WAIT002
|
||||
DJNZ IDE_WAIT001
|
||||
RET ; DONE
|
||||
;
|
||||
; READ A VALUE FROM THE DEVICE POINTED TO BY IY AND RETURN IT IN A
|
||||
;
|
||||
IDE_IN:
|
||||
EX (SP),HL ; GET PARM POINTER
|
||||
PUSH BC
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
LD C,(IY+IDE_IOBASE)
|
||||
ADD A,C
|
||||
LD C,A
|
||||
IN A,(C)
|
||||
POP BC
|
||||
EX (SP),HL ; RESTORE STACK
|
||||
RET
|
||||
;
|
||||
; OUTPUT VALUE IN A TO THE DEVICE POINTED TO BY IY
|
||||
;
|
||||
IDE_IN:
|
||||
EX (SP),HL ; GET PARM POINTER ; 19TS
|
||||
PUSH BC ; 11TS
|
||||
LD A,(HL) ; 7TS
|
||||
INC HL ; 6TS
|
||||
LD C,(IY+IDE_IOBASE) ; 19TS
|
||||
ADD A,C ; 4TS
|
||||
LD C,A ; 4TS
|
||||
IN A,(C) ; 12TS
|
||||
POP BC ; 10TS
|
||||
EX (SP),HL ; RESTORE STACK ; 19TS
|
||||
RET ; 10TS
|
||||
; ; ----
|
||||
; OUTPUT VALUE IN A TO THE DEVICE POINTED TO BY IY ; 121TS
|
||||
;
|
||||
IDE_OUT:
|
||||
EX (SP),HL ; GET PARM POINTER
|
||||
PUSH BC
|
||||
@@ -1444,6 +1585,10 @@ IDE_BSYTO:
|
||||
LD A,IDE_STBSYTO
|
||||
JR IDE_ERR
|
||||
;
|
||||
IDE_NOTSUP:
|
||||
LD A,IDE_STNOTSUP
|
||||
JR IDE_ERR
|
||||
;
|
||||
IDE_ERR:
|
||||
LD (IY+IDE_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
@@ -1461,39 +1606,15 @@ IDE_PRTERR:
|
||||
RET Z ; DONE IF NO ERRORS
|
||||
; FALL THRU TO IDE_PRTSTAT
|
||||
;
|
||||
; PRINT STATUS STRING (STATUS NUM IN A)
|
||||
; PRINT FULL DEVICE STATUS LINE
|
||||
;
|
||||
IDE_PRTSTAT:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD A,(IY+IDE_STAT)
|
||||
OR A
|
||||
LD DE,IDE_STR_STOK
|
||||
JR Z,IDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,IDE_STR_STINVUNIT
|
||||
CP IDE_STINVUNIT
|
||||
JR Z,IDE_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE
|
||||
INC A
|
||||
LD DE,IDE_STR_STNOMEDIA
|
||||
JR Z,IDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,IDE_STR_STCMDERR
|
||||
JR Z,IDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,IDE_STR_STIOERR
|
||||
JR Z,IDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,IDE_STR_STRDYTO
|
||||
JR Z,IDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,IDE_STR_STDRQTO
|
||||
JR Z,IDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,IDE_STR_STBSYTO
|
||||
JR Z,IDE_PRTSTAT1
|
||||
LD DE,IDE_STR_STUNK
|
||||
IDE_PRTSTAT1:
|
||||
CALL IDE_PRTPREFIX ; PRINT UNIT PREFIX
|
||||
JR IDE_PRTSTAT3
|
||||
IDE_PRTSTAT2:
|
||||
@@ -1501,12 +1622,52 @@ IDE_PRTSTAT2:
|
||||
PRTS("IDE:$") ; NO UNIT NUM IN PREFIX FOR INVALID UNIT
|
||||
IDE_PRTSTAT3:
|
||||
CALL PC_SPACE ; FORMATTING
|
||||
CALL WRITESTR
|
||||
CALL IDE_PRTSTATSTR
|
||||
POP HL
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT STATUS STRING
|
||||
;
|
||||
IDE_PRTSTATSTR:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
LD A,(IY+IDE_STAT)
|
||||
OR A
|
||||
LD DE,IDE_STR_STOK
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STINVUNIT
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STNOMEDIA
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STCMDERR
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STIOERR
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STRDYTO
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STDRQTO
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STBSYTO
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,IDE_STR_STNOTSUP
|
||||
JR Z,IDE_PRTSTATSTR1
|
||||
LD DE,IDE_STR_STUNK
|
||||
IDE_PRTSTATSTR1:
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT ALL REGISTERS DIRECTLY FROM DEVICE
|
||||
; DEVICE MUST BE SELECTED PRIOR TO CALL
|
||||
;
|
||||
@@ -1546,30 +1707,6 @@ IDE_PRTPREFIX1:
|
||||
CALL PC_COLON
|
||||
POP AF
|
||||
RET
|
||||
;;;
|
||||
;;;
|
||||
;;;
|
||||
;;#IF (DSKYENABLE)
|
||||
;;IDE_DSKY:
|
||||
;; LD HL,DSKY_HEXBUF ; POINT TO DSKY BUFFER
|
||||
;; CALL IDE_IN
|
||||
;; .DB IDE_REG_DRVHD
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; INC HL ; INCREMENT BUFFER POINTER
|
||||
;; CALL IDE_IN
|
||||
;; .DB IDE_REG_CYLHI
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; INC HL ; INCREMENT BUFFER POINTER
|
||||
;; CALL IDE_IN
|
||||
;; .DB IDE_REG_CYLLO
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; INC HL ; INCREMENT BUFFER POINTER
|
||||
;; CALL IDE_IN
|
||||
;; .DB IDE_REG_SECT
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; CALL DSKY_HEXOUT ; SEND IT TO DSKY
|
||||
;; RET
|
||||
;;#ENDIF
|
||||
;
|
||||
;=============================================================================
|
||||
; STRING DATA
|
||||
@@ -1583,6 +1720,7 @@ IDE_STR_STIOERR .TEXT "IO ERROR$"
|
||||
IDE_STR_STRDYTO .TEXT "READY TIMEOUT$"
|
||||
IDE_STR_STDRQTO .TEXT "DRQ TIMEOUT$"
|
||||
IDE_STR_STBSYTO .TEXT "BUSY TIMEOUT$"
|
||||
IDE_STR_STNOTSUP .TEXT "NOT SUPPORTED$"
|
||||
IDE_STR_STUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
IDE_STR_NO .TEXT "NO$"
|
||||
@@ -1594,12 +1732,15 @@ IDE_STR_MODE_DIDE .TEXT "DIDE$"
|
||||
IDE_STR_MODE_MK4 .TEXT "MK4$"
|
||||
IDE_STR_MODE_RC .TEXT "RC$"
|
||||
;
|
||||
IDE_STR_TYPEATA .TEXT " ATA$"
|
||||
IDE_STR_TYPEATAPI .TEXT " ATAPI$"
|
||||
;
|
||||
;=============================================================================
|
||||
; DATA STORAGE
|
||||
;=============================================================================
|
||||
;
|
||||
IDE_TIMEOUT .DB IDE_TONORM ; WAIT FUNCS TIMEOUT IN TENTHS OF SEC
|
||||
IDE_TOSCALER .DW CPUMHZ * 961 ; WAIT FUNCS SCALER FOR CPU SPEED
|
||||
IDE_TOSCALER .DW CPUMHZ * 556 ; WAIT FUNCS SCALER FOR CPU SPEED
|
||||
;
|
||||
IDE_CMD .DB 0 ; PENDING COMMAND TO PROCESS
|
||||
IDE_IOFNADR .DW 0 ; PENDING IO FUNCTION ADDRESS
|
||||
|
||||
1435
Source/HBIOS/imm.asm
Normal file
1435
Source/HBIOS/imm.asm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -14,9 +14,10 @@
|
||||
;
|
||||
; DRIVER DATA OFFSETS (FROM IY)
|
||||
;
|
||||
KBD_ST .EQU 0 ; BYTE, STATUS PORT NUM (R)
|
||||
KBD_MODE .EQU 0 ; BYTE, KEYBOARD MODE (STD OR VRC)
|
||||
KBD_ST .EQU 1 ; BYTE, STATUS PORT NUM (R)
|
||||
KBD_CMD .EQU KBD_ST ; BYTE, CMD PORT NUM (W)
|
||||
KBD_DAT .EQU 1 ; BYTE, DATA PORT NUM (R/W)
|
||||
KBD_DAT .EQU 2 ; BYTE, DATA PORT NUM (R/W)
|
||||
;
|
||||
; TIMING CONSTANTS
|
||||
;
|
||||
@@ -69,17 +70,33 @@ KBD_INIT:
|
||||
LD (KBD_REPEAT),A ; SAVE IT
|
||||
LD A,KBD_DEFSTATE ; GET DEFAULT STATE
|
||||
LD (KBD_STATE),A ; SAVE IT
|
||||
|
||||
;
|
||||
LD A,(IY+KBD_MODE) ; GET KBD MODE BYTE
|
||||
CP KBDMODE_VRC ; VRC?
|
||||
JR Z,KBD_INIT1 ; IF SO, MUST ASSUME PRESENT
|
||||
;
|
||||
LD A,$AA ; CONTROLLER SELF TEST
|
||||
CALL KBD_PUTCMD ; SEND IT
|
||||
CALL KBD_GETDATA ; CONTROLLER SHOULD RESPOND WITH $55 (ACK)
|
||||
|
||||
;
|
||||
CP $55 ; IS IT THERE?
|
||||
JR Z,KBD_INIT1 ; IF SO, CONTINUE
|
||||
PRTS(" NOT PRESENT$") ; DIAGNOSE PROBLEM
|
||||
RET ; BAIL OUT
|
||||
|
||||
;
|
||||
KBD_INIT1:
|
||||
PRTS(" MODE=$") ; TAG
|
||||
LD A,(IY+KBD_MODE) ; GET MODE VALUE
|
||||
LD DE,KBD_STR_MODEPS2
|
||||
CP KBDMODE_PS2
|
||||
JR Z,KBD_INIT2
|
||||
LD DE,KBD_STR_MODEVRC
|
||||
CP KBDMODE_VRC
|
||||
JR Z,KBD_INIT2
|
||||
LD DE,KBD_STR_MODEUNK
|
||||
KBD_INIT2:
|
||||
CALL WRITESTR
|
||||
;
|
||||
LD A,$60 ; SET COMMAND REGISTER
|
||||
CALL KBD_PUTCMD ; SEND IT
|
||||
; LD A,$60 ; XLAT ENABLED, MOUSE DISABLED, NO INTS
|
||||
@@ -88,11 +105,6 @@ KBD_INIT1:
|
||||
|
||||
CALL KBD_GETDATA ; GOBBLE UP $AA FROM POWER UP, AS NEEDED
|
||||
|
||||
; LD A,$AE ; COMMAND = ENABLE KEYBOARD
|
||||
; CALL KBD_PUTCMD ; SEND IT
|
||||
; LD A,$A7 ; COMMAND = DISABLE MOUSE
|
||||
; CALL KBD_PUTCMD ; SEND IT
|
||||
|
||||
CALL KBD_RESET ; RESET THE KEYBOARD
|
||||
CALL KBD_SETLEDS ; UPDATE LEDS BASED ON CURRENT TOGGLE STATE BITS
|
||||
CALL KBD_SETRPT ; UPDATE REPEAT RATE BASED ON CURRENT SETTING
|
||||
@@ -177,6 +189,9 @@ KBD_PUTCMD:
|
||||
; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT
|
||||
;
|
||||
LD E,A ; SAVE INCOMING VALUE IN E
|
||||
LD A,(IY+KBD_MODE) ; GET MODE BYTE
|
||||
CP KBDMODE_VRC ; VGARC KEYBOARD?
|
||||
JR Z,KBD_PUTCMD2 ; BAIL OUT
|
||||
LD B,KBD_WAITTO ; SETUP TO LOOP
|
||||
KBD_PUTCMD0:
|
||||
CALL KBD_OST ; GET OUTPUT REGISTER STATUS
|
||||
@@ -194,6 +209,7 @@ KBD_PUTCMD1:
|
||||
#ENDIF
|
||||
LD C,(IY+KBD_CMD) ; COMMAND PORT
|
||||
OUT (C),A ; WRITE IT
|
||||
KBD_PUTCMD2:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
@@ -203,6 +219,9 @@ KBD_PUTDATA:
|
||||
; PUT A DATA BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT
|
||||
;
|
||||
LD E,A ; SAVE INCOMING VALUE IN E
|
||||
LD A,(IY+KBD_MODE) ; GET MODE BYTE
|
||||
CP KBDMODE_VRC ; VGARC KEYBOARD?
|
||||
JR Z,KBD_PUTDATA2 ; BAIL OUT
|
||||
LD B,KBD_WAITTO ; SETUP TO LOOP
|
||||
KBD_PUTDATA0:
|
||||
CALL KBD_OST ; GET OUTPUT REGISTER STATUS
|
||||
@@ -219,6 +238,7 @@ KBD_PUTDATA1:
|
||||
#ENDIF
|
||||
LD C,(IY+KBD_DAT) ; DATA PORT
|
||||
OUT (C),A ; WRITE IT
|
||||
KBD_PUTDATA2:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
@@ -681,11 +701,21 @@ KBD_DECNEW: ; START NEW KEYPRESS (CLEAR ALL STATUS BITS)
|
||||
LD (KBD_STATUS),A ; CLEAR STATUS
|
||||
JP KBD_DEC1 ; RESTART THE ENGINE
|
||||
;
|
||||
; DRIVER DATA
|
||||
;
|
||||
KBD_STR_MODEPS2 .TEXT "PS2$"
|
||||
KBD_STR_MODEVRC .TEXT "VRC$"
|
||||
KBD_STR_MODEUNK .TEXT "???$"
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (KBDKBLOUT == KBD_US)
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; MAPPING TABLES US/ENGLISH
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
KBD_MAPSTD: ; SCANCODE IS INDEX INTO TABLE TO RESULTANT LOOKUP KEYCODE
|
||||
.DB $FF,$E8,$FF,$E4,$E2,$E0,$E1,$EB,$FF,$E9,$E7,$E5,$E3,$09,'`',$FF
|
||||
.DB $FF,$B4,$B0,$FF,$B2,'q','1',$FF,$FF,$FF,'z','s','a','w','2',$FF
|
||||
@@ -722,7 +752,9 @@ KBD_MAPNUMPAD: ; KEYCODE TRANSLATION FROM NUMPAD RANGE TO STD ASCII/KEYCODES
|
||||
.DB $F3,$F7,$F5,$F8,$FF,$F9,$F2,$F6,$F4,$F0,$F1,$2F,$2A,$2D,$2B,$0D
|
||||
.DB $31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$2E,$2F,$2A,$2D,$2B,$0D
|
||||
#ENDIF
|
||||
;
|
||||
#IF (KBDKBLOUT == KBD_DE)
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; MAPPING TABLES GERMAN
|
||||
|
||||
@@ -3,13 +3,17 @@
|
||||
; CENTRONICS (LPT) INTERFACE DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; CENTRONICS-STYLE PARALLEL PRINTER DRIVER. ASSUMES IBM STYLE
|
||||
; HARDWARE INTERFACE AS DESCRIBED BELOW.
|
||||
; CENTRONICS-STYLE PARALLEL PRINTER DRIVER.
|
||||
;
|
||||
; IMPLEMENTED AS A ROMWBW CHARACTER DEVICE. CURRENTLY HANDLES OUPUT
|
||||
; ONLY.
|
||||
;
|
||||
; PORT 0 (INPUT/OUTPUT):
|
||||
;==================================================================================================
|
||||
;
|
||||
; IBM PC STANDARD PARALLEL PORT (SPP):
|
||||
; - NHYODYNE PRINT MODULE
|
||||
;
|
||||
; PORT 0 (OUTPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
@@ -20,26 +24,51 @@
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | BUSY | ACK | POUT | SEL | ERR | 0 | 0 | 0 |
|
||||
; | /BUSY | /ACK | POUT | SEL | /ERR | 0 | 0 | 0 |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
; PORT 2 (INPUT/OUTPUT):
|
||||
; PORT 2 (OUTPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | STAT1 | STAT0 | ENBL | PINT | SEL | RES | LF | STB |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
LPT_NONE .EQU 0 ; NOT PRESENT
|
||||
LPT_IBM .EQU 1 ; IBM PC STYLE INTERFACE
|
||||
;==================================================================================================
|
||||
;
|
||||
; MG014 STYLE INTERFACE:
|
||||
; - RCBUS MG014 MODULE
|
||||
;
|
||||
; PORT 0 (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 (OUTPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | LED | | | | /SEL | /RES | /LF | /STB |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
;==================================================================================================
|
||||
;
|
||||
; PRE-CONSOLE INITIALIZATION - DETECT AND INIT HARDWARE
|
||||
;
|
||||
LPT_PREINIT:
|
||||
;
|
||||
; SETUP THE DISPATCH TABLE ENTRIES
|
||||
; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST REMIAIN
|
||||
; DISABLED.
|
||||
; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST
|
||||
; REMAIN DISABLED.
|
||||
;
|
||||
LD B,LPT_CFGCNT ; LOOP CONTROL
|
||||
XOR A ; ZERO TO ACCUM
|
||||
@@ -136,18 +165,26 @@ LPT_IN:
|
||||
LPT_OUT:
|
||||
CALL LPT_OST ; READY TO SEND?
|
||||
JR Z,LPT_OUT ; LOOP IF NOT
|
||||
LD A,(IY+3)
|
||||
LD C,A ; PORT 0 (DATA)
|
||||
OUT (C),E ; OUTPUT DATA TO PORT
|
||||
CALL DELAY ; IGNORE ANYTHING BACK AFTER A RESET
|
||||
LD A,%00001101 ; SELECT & STROBE, LEDS OFF
|
||||
INC C ; PUT CONTROL PORT IN C
|
||||
INC C
|
||||
OUT (C),A ; OUTPUT DATA TO PORT
|
||||
CALL DELAY ; IGNORE ANYTHING BACK AFTER A RESET
|
||||
LD A,%00001100 ; SELECT, LEDS OFF
|
||||
OUT (C),A ; OUTPUT DATA TO PORT
|
||||
|
||||
LD C,(IY+3) ; PORT 0 (DATA)
|
||||
OUT (C),E ; OUTPUT DATA TO PORT
|
||||
#IF (LPTMODE == LPTMODE_SPP)
|
||||
LD A,%00001101 ; SELECT & STROBE, LEDS OFF
|
||||
#ENDIF
|
||||
#IF (LPTMODE == LPTMODE_MG014)
|
||||
LD A,%00000100 ; SELECT & STROBE, LED OFF
|
||||
#ENDIF
|
||||
INC C ; PUT CONTROL PORT IN C
|
||||
INC C
|
||||
OUT (C),A ; OUTPUT DATA TO PORT
|
||||
CALL DELAY
|
||||
#IF (LPTMODE == LPTMODE_SPP)
|
||||
LD A,%00001100 ; SELECT, LEDS OFF
|
||||
#ENDIF
|
||||
#IF (LPTMODE == LPTMODE_MG014)
|
||||
LD A,%00000101 ; SELECT, LED OFF
|
||||
#ENDIF
|
||||
OUT (C),A ; OUTPUT DATA TO PORT
|
||||
CALL DELAY
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
@@ -161,11 +198,16 @@ LPT_IST:
|
||||
; OUTPUT STATUS
|
||||
;
|
||||
LPT_OST:
|
||||
LD A,(IY+3)
|
||||
LD C,A ; PORT 0 (DATA)
|
||||
INC C ; SELECT STATUS PORT
|
||||
IN A,(C) ; GET STATUS INFO
|
||||
AND %10000000 ; ONLY INTERESTED IN BUSY FLAG
|
||||
LD C,(IY+3) ; BASE PORT
|
||||
INC C ; SELECT STATUS PORT
|
||||
IN A,(C) ; GET STATUS INFO
|
||||
#IF (LPTMODE == LPTMODE_SPP)
|
||||
AND %10000000 ; ISOLATE /BUSY
|
||||
#ENDIF
|
||||
#IF (LPTMODE == LPTMODE_MG014)
|
||||
AND %00000010 ; ISOLATE BUSY
|
||||
XOR %00000010 ; INVERT TO READY
|
||||
#ENDIF
|
||||
RET ; DONE
|
||||
;
|
||||
; INITIALIZE DEVICE
|
||||
@@ -180,20 +222,40 @@ LPT_INITDEV:
|
||||
; PREINIT ABOVE. PREINIT IS NOT ALLOWED TO ENABLE INTS!
|
||||
;
|
||||
LPT_INITDEVX:
|
||||
LD A,(IY+3)
|
||||
LD C,A ; PORT 0 (DATA)
|
||||
;
|
||||
#IF (LPTMODE == LPTMODE_SPP)
|
||||
;
|
||||
LD C,(IY+3) ; PORT 0 (DATA)
|
||||
XOR A ; CLEAR ACCUM
|
||||
OUT (C),A ; SEND IT
|
||||
INC C ; BUMP TO
|
||||
INC C ; ... PORT 2
|
||||
LD A,%00001000 ; SELECT AND ASSERT RESET, LEDS OFF
|
||||
OUT (C),A ; SEND IT
|
||||
CALL LDELAY ; HALF SECOND DELAY
|
||||
CALL LDELAY ; HALF SECOND DELAY
|
||||
LD A,%00001100 ; SELECT AND DEASSERT RESET, LEDS OFF
|
||||
OUT (C),A ; SEND IT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; RETURN
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF (LPTMODE == LPTMODE_MG014)
|
||||
LD A,(IY+3) ; BASE PORT
|
||||
ADD A,3 ; BUMP TO CONTROL 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
|
||||
DEC C ; OUTPUT PORT
|
||||
LD A,$81 ; STROBE OFF, SELECT ON, RES ON, LED ON
|
||||
OUT (C),A ; SEND IT
|
||||
CALL LDELAY ; HALF SECOND DELAY
|
||||
LD A,$05 ; STROBE OFF, SELECT ON, RES OFF, LED OFF
|
||||
OUT (C),A ; SEND IT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; RETURN
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
LPT_QUERY:
|
||||
@@ -215,17 +277,26 @@ LPT_DEVICE:
|
||||
;
|
||||
; LPT DETECTION ROUTINE
|
||||
;
|
||||
#IF (LPTMODE == LPTMODE_NONE)
|
||||
;
|
||||
LPT_DETECT:
|
||||
LD A,(IY+3) ; BASE PORT ADDRESS
|
||||
LD C,A ; PUT IN C FOR I/O
|
||||
LD A,LPTMODE_NONE ; NOTHING TO DETECT
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF (LPTMODE == LPTMODE_SPP)
|
||||
;
|
||||
LPT_DETECT:
|
||||
LD C,(IY+3) ; BASE PORT ADDRESS
|
||||
CALL LPT_DETECT2 ; CHECK IT
|
||||
JR Z,LPT_DETECT1 ; FOUND IT, RECORD IT
|
||||
LD A,LPT_NONE ; NOTHING FOUND
|
||||
LD A,LPTMODE_NONE ; NOTHING FOUND
|
||||
RET ; DONE
|
||||
;
|
||||
LPT_DETECT1:
|
||||
; LPT FOUND, RECORD IT
|
||||
LD A,LPT_IBM ; RETURN CHIP TYPE
|
||||
LD A,LPTMODE_SPP ; RETURN CHIP TYPE
|
||||
RET ; DONE
|
||||
;
|
||||
LPT_DETECT2:
|
||||
@@ -253,6 +324,43 @@ LPT_DETECT2:
|
||||
CP $A5 ; CORRECT?
|
||||
RET ; RETURN (ZF SET CORRECTLY)
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF (LPTMODE == LPTMODE_MG014)
|
||||
LPT_DETECT:
|
||||
;
|
||||
; TEST FOR PPI EXISTENCE
|
||||
; WE SETUP THE PPI TO WRITE, THEN WRITE A VALUE OF $A5
|
||||
; TO PORT A (DATALO), THEN READ IT BACK. IF THE PPI IS THERE
|
||||
; THEN THE BUS HOLD CIRCUITRY WILL READ BACK THE $A5. SINCE
|
||||
; WE ARE IN WRITE MODE, AN IDE CONTROLLER WILL NOT BE ABLE TO
|
||||
; INTERFERE WITH THE VALUE BEING READ.
|
||||
;
|
||||
LD A,(IY+3) ; BASE IO ADDRESS
|
||||
ADD A,3 ; BUMP TO CONTROL PORT
|
||||
LD C,A ; PUT IN C
|
||||
LD A,$80 ; SET PORT A TO WRITE
|
||||
OUT (C),A ; WRITE IT
|
||||
;
|
||||
LD C,(IY+3) ; PPI PORT A
|
||||
LD A,$A5 ; TEST VALUE
|
||||
OUT (C),A ; PUSH VALUE TO PORT
|
||||
IN A,(C) ; GET PORT VALUE
|
||||
#IF (LPTTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $A5 ; CHECK FOR TEST VALUE
|
||||
JR Z,LPT_DETECT1 ; FOUND IT
|
||||
LD A,LPTMODE_NONE ; NOT FOUND
|
||||
RET
|
||||
;
|
||||
LPT_DETECT1:
|
||||
; LPT FOUND, RECORD IT
|
||||
LD A,LPTMODE_MG014 ; RETURN CHIP TYPE
|
||||
RET ; DONE
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
LPT_PRTCFG:
|
||||
@@ -266,7 +374,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
|
||||
@@ -290,10 +398,12 @@ LPT_PRTCFG:
|
||||
;
|
||||
LPT_TYPE_MAP:
|
||||
.DW LPT_STR_NONE
|
||||
.DW LPT_STR_IBM
|
||||
.DW LPT_STR_SPP
|
||||
.DW LPT_STR_MG014
|
||||
;
|
||||
LPT_STR_NONE .DB "<NOT PRESENT>$"
|
||||
LPT_STR_IBM .DB "IBM$"
|
||||
LPT_STR_SPP .DB "SPP$"
|
||||
LPT_STR_MG014 .DB "MG014$"
|
||||
;
|
||||
; WORKING VARIABLES
|
||||
;
|
||||
|
||||
861
Source/HBIOS/ppa.asm
Normal file
861
Source/HBIOS/ppa.asm
Normal file
@@ -0,0 +1,861 @@
|
||||
;
|
||||
;=============================================================================
|
||||
; PPA DISK DRIVER
|
||||
;=============================================================================
|
||||
;
|
||||
; PARALLEL PORT INTERFACE FOR SCSI DISK DEVICES USING A PARALLEL PORT
|
||||
; ADAPTER. PRIMARILY TARGETS PARALLEL PORT IOMEGA ZIP DRIVES.
|
||||
;
|
||||
; 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
|
||||
; 5/27/2023 WBW - ADDED SPP MODE
|
||||
;
|
||||
;=============================================================================
|
||||
;
|
||||
; IBM PC STANDARD PARALLEL PORT (SPP):
|
||||
; - NHYODYNE PRINT MODULE
|
||||
;
|
||||
; PORT 0 (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
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | /BUSY | /ACK | POUT | SEL | /ERR | 0 | 0 | 0 |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
; PORT 2 (OUTPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | STAT1 | STAT0 | ENBL | PINT | SEL | RES | LF | STB |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
;=============================================================================
|
||||
;
|
||||
; MG014 STYLE INTERFACE:
|
||||
; - RCBUS MG014 MODULE
|
||||
;
|
||||
; PORT 0 (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 (OUTPUT):
|
||||
;
|
||||
; D7 D6 D5 D4 D3 D2 D1 D0
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
; | LED | | | | /SEL | /RES | /LF | /STB |
|
||||
; +-------+-------+-------+-------+-------+-------+-------+-------+
|
||||
;
|
||||
;=============================================================================
|
||||
;
|
||||
; TODO:
|
||||
;
|
||||
; - 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_STNOMEDIA .EQU -1
|
||||
PPA_STCMDERR .EQU -2
|
||||
PPA_STIOERR .EQU -3
|
||||
PPA_STTO .EQU -4
|
||||
PPA_STNOTSUP .EQU -5
|
||||
;
|
||||
; 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 HL,PPA_STR_MODE_MAP
|
||||
ADD A,A
|
||||
CALL ADDHLA
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
CALL WRITESTR
|
||||
;
|
||||
; 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
|
||||
#IF (PPATRACE == 0)
|
||||
CALL PPA_PRTSTAT
|
||||
#ENDIF
|
||||
JR NZ,PPA_INIT6
|
||||
;
|
||||
; START PRINTING DEVICE INFO
|
||||
CALL PPA_PRTPREFIX ; PRINT DEVICE PREFIX
|
||||
;
|
||||
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,PPA_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.
|
||||
#IF (PPAMODE == PPAMODE_MG014
|
||||
XOR $0B | $80 ; HIGH BIT IS MG014 LED
|
||||
#ENDIF
|
||||
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
|
||||
;
|
||||
#IF (PPAMODE == PPAMODE_MG014
|
||||
;
|
||||
; SHUFFLE BITS ON MG014
|
||||
LD C,0 ; INIT RESULT
|
||||
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
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
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
|
||||
;
|
||||
JP PPA_NOTSUP
|
||||
;
|
||||
;=============================================================================
|
||||
; ERROR HANDLING AND DIAGNOSTICS
|
||||
;=============================================================================
|
||||
;
|
||||
; ERROR HANDLERS
|
||||
;
|
||||
;
|
||||
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 >= 1)
|
||||
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)
|
||||
CALL PPA_PRTPREFIX ; PRINT UNIT PREFIX
|
||||
CALL PC_SPACE ; FORMATTING
|
||||
CALL PPA_PRTSTATSTR
|
||||
POP HL
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT STATUS STRING
|
||||
;
|
||||
PPA_PRTSTATSTR:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD A,(IY+PPA_STAT)
|
||||
NEG
|
||||
LD HL,PPA_STR_ST_MAP
|
||||
ADD A,A
|
||||
CALL ADDHLA
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
CALL WRITESTR
|
||||
POP HL
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT DIAGNONSTIC PREFIX
|
||||
;
|
||||
PPA_PRTPREFIX:
|
||||
PUSH AF
|
||||
CALL NEWLINE
|
||||
PRTS("PPA$")
|
||||
LD A,(IY+IMM_DEV) ; GET CURRENT DEVICE NUM
|
||||
CALL PRTDECB
|
||||
CALL PC_COLON
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;=============================================================================
|
||||
; STRING DATA
|
||||
;=============================================================================
|
||||
;
|
||||
PPA_STR_ST_MAP:
|
||||
.DW PPA_STR_STOK
|
||||
.DW PPA_STR_STNOMEDIA
|
||||
.DW PPA_STR_STCMDERR
|
||||
.DW PPA_STR_STIOERR
|
||||
.DW PPA_STR_STTO
|
||||
.DW PPA_STR_STNOTSUP
|
||||
;
|
||||
PPA_STR_STOK .TEXT "OK$"
|
||||
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_MODE_MAP:
|
||||
.DW PPA_STR_MODE_NONE
|
||||
.DW PPA_STR_MODE_SPP
|
||||
.DW PPA_STR_MODE_MG014
|
||||
;
|
||||
PPA_STR_MODE_NONE .DB "NONE$"
|
||||
PPA_STR_MODE_SPP .DB "SPP$"
|
||||
PPA_STR_MODE_MG014 .DB "MG014$"
|
||||
;
|
||||
PPA_STR_NOHW .TEXT "NOT PRESENT$"
|
||||
;
|
||||
;=============================================================================
|
||||
; 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
|
||||
;
|
||||
; 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 PPAMODE ; 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 PPAMODE ; 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
|
||||
@@ -4,7 +4,6 @@
|
||||
;=============================================================================
|
||||
;
|
||||
; TODO:
|
||||
; - FIX SCALER CONSTANT
|
||||
; - GOPARTNER NEEDS TO HANDLE "NO PARTNER" CONDITION
|
||||
;
|
||||
; NOTES:
|
||||
@@ -144,9 +143,13 @@ PPIDE_REG_DRVADR .EQU PPIDE_CTL_CS3 | $07 ; DRIVE ADDRESS REGISTER (R)
|
||||
;
|
||||
; COMMAND BYTES
|
||||
;
|
||||
PPIDE_CIDE_NOP .EQU $00
|
||||
PPIDE_CIDE_DEVRES .EQU $08
|
||||
PPIDE_CMD_RECAL .EQU $10
|
||||
PPIDE_CMD_READ .EQU $20
|
||||
PPIDE_CMD_WRITE .EQU $30
|
||||
PPIDE_CIDE_DEVDIAG .EQU $90
|
||||
PPIDE_CIDE_IDPKTDEV .EQU $A1
|
||||
PPIDE_CMD_IDDEV .EQU $EC
|
||||
PPIDE_CMD_SETFEAT .EQU $EF
|
||||
;
|
||||
@@ -171,6 +174,7 @@ PPIDE_STIOERR .EQU -4
|
||||
PPIDE_STRDYTO .EQU -5
|
||||
PPIDE_STDRQTO .EQU -6
|
||||
PPIDE_STBSYTO .EQU -7
|
||||
PPIDE_STNOTSUP .EQU -8
|
||||
;
|
||||
; DRIVE SELECTION BYTES (FOR USE IN DRIVE/HEAD REGISTER)
|
||||
;
|
||||
@@ -217,7 +221,7 @@ PPIDE_DEV0M: ; DEVICE 0, MASTER
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
.DB PPIDE0BASE ; DATALO
|
||||
.DB PPIDE0BASE+2 ; CTL
|
||||
.DB PPIDE0BASE+2 ; CTL
|
||||
.DB PPIDE0BASE+3 ; PPI
|
||||
.DW PPIDE_DEV0S ; PARTNER
|
||||
;
|
||||
@@ -230,7 +234,7 @@ PPIDE_DEV0S: ; DEVICE 0, SLAVE
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
.DB PPIDE0BASE ; DATALO
|
||||
.DB PPIDE0BASE+2 ; CTL
|
||||
.DB PPIDE0BASE+2 ; CTL
|
||||
.DB PPIDE0BASE+3 ; PPI
|
||||
.DW PPIDE_DEV0M ; PARTNER
|
||||
;
|
||||
@@ -247,7 +251,7 @@ PPIDE_DEV1M: ; DEVICE 1, MASTER
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
.DB PPIDE1BASE ; DATALO
|
||||
.DB PPIDE1BASE+2 ; CTL
|
||||
.DB PPIDE1BASE+2 ; CTL
|
||||
.DB PPIDE1BASE+3 ; PPI
|
||||
.DW PPIDE_DEV1S ; PARTNER
|
||||
;
|
||||
@@ -260,7 +264,7 @@ PPIDE_DEV1S: ; DEVICE 1, SLAVE
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
.DB PPIDE1BASE ; DATALO
|
||||
.DB PPIDE1BASE+2 ; CTL
|
||||
.DB PPIDE1BASE+2 ; CTL
|
||||
.DB PPIDE1BASE+3 ; PPI
|
||||
.DW PPIDE_DEV1M ; PARTNER
|
||||
;
|
||||
@@ -277,10 +281,10 @@ PPIDE_DEV2M: ; DEVICE 2, MASTER
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
.DB PPIDE2BASE ; DATALO
|
||||
.DB PPIDE2BASE+2 ; CTL
|
||||
.DB PPIDE2BASE+2 ; CTL
|
||||
.DB PPIDE2BASE+3 ; PPI
|
||||
.DW PPIDE_DEV2S ; PARTNER
|
||||
;
|
||||
;
|
||||
PPIDE_DEV2S: ; DEVICE 2, SLAVE
|
||||
.DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
|
||||
.DB 0 ; DEVICE STATUS
|
||||
@@ -290,7 +294,7 @@ PPIDE_DEV2S: ; DEVICE 2, SLAVE
|
||||
.DW 0,0 ; DEVICE CAPACITY
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
.DB PPIDE2BASE ; DATALO
|
||||
.DB PPIDE2BASE+2 ; CTL
|
||||
.DB PPIDE2BASE+2 ; CTL
|
||||
.DB PPIDE2BASE+3 ; PPI
|
||||
.DW PPIDE_DEV2M ; PARTNER
|
||||
;
|
||||
@@ -302,17 +306,17 @@ PPIDE_DEV2S: ; DEVICE 2, SLAVE
|
||||
;
|
||||
.DB $FF ; END OF TABLE MARKER
|
||||
;
|
||||
; THE IDE_WAITXXX FUNCTIONS ARE BUILT TO TIMEOUT AS NEEDED SO DRIVER WILL
|
||||
; THE PPIDE_WAITXXX FUNCTIONS ARE BUILT TO TIMEOUT AS NEEDED SO DRIVER WILL
|
||||
; NOT HANG IF DEVICE IS UNRESPONSIVE. DIFFERENT TIMEOUTS ARE USED DEPENDING
|
||||
; ON THE SITUATION. GENERALLY, THE FAST TIMEOUT IS USED TO PROBE FOR DEVICES
|
||||
; USING FUNCTIONS THAT PERFORM NO I/O. OTHERWISE THE NORMAL TIMEOUT IS USED.
|
||||
; IDE SPEC ALLOWS FOR UP TO 30 SECS MAX TO RESPOND. IN PRACTICE, THIS IS WAY
|
||||
; TOO LONG, BUT IF YOU ARE USING A VERY OLD DEVICE, THESE TIMEOUTS MAY NEED TO
|
||||
; BE ADJUSTED. NOTE THAT THESE ARE BYTE VALUES, SO YOU CANNOT EXCEED 255.
|
||||
; THE TIMEOUTS ARE IN UNITS OF .05 SECONDS.
|
||||
; ON THE SITUATION. THE SLOW TIMEOUT IS USED TO WAIT FOR A DEVICE TO
|
||||
; BECOME READY AFTER A HARD RESET (SPIN UP, ETC.). THE NORMAL TIMEOUT
|
||||
; IS USED DURING NORMAL OPERATION FOR ALL I/O OPERATIONS WHICH SHOULD
|
||||
; OCCUR PRETTY FAST. NOTE THAT THE ATA SPEC ALLOWS UP TO 30 SECONDS
|
||||
; FOR DEVICES TO RESPOND. WE ARE USING MUCH MORE AGGRESSIVE VALUES
|
||||
; BASED ON REAL WORLD EXPERIENCE.
|
||||
;
|
||||
PPIDE_TONORM .EQU 200 ; NORMAL TIMEOUT IS 10 SECS
|
||||
PPIDE_TOFAST .EQU 10 ; FAST TIMEOUT IS 0.5 SECS
|
||||
PPIDE_TOSLOW .EQU 200 ; SLOW TIMEOUT IS 20 SECS
|
||||
PPIDE_TONORM .EQU 5 ; NORMAL TIMEOUT IS 0.5 SECS
|
||||
;
|
||||
;=============================================================================
|
||||
; INITIALIZATION ENTRY POINT
|
||||
@@ -320,9 +324,12 @@ PPIDE_TOFAST .EQU 10 ; FAST TIMEOUT IS 0.5 SECS
|
||||
;
|
||||
PPIDE_INIT:
|
||||
; COMPUTE CPU SPEED COMPENSATED TIMEOUT SCALER
|
||||
; AT 1MHZ, THE SCALER IS 218 (50000US / 229TS = 218)
|
||||
; SCALER IS THEREFORE 218 * CPU SPEED IN MHZ
|
||||
LD DE,218 ; LOAD SCALER FOR 1MHZ
|
||||
; ONE INTERNAL LOOP IN WAITBSY IS 263TS. ON A 1 MHZ CPU, 1 TS
|
||||
; TAKES 1NS. SO 1/10 SECOND IS 100000 TS ON A 1 MHZ CPU.
|
||||
; SINCE 1 INTERNAL LOOP IS 263 TS, IT TAKES 100000 / 263 = 356
|
||||
; INTERNAL LOOPS FOR 1/10 SECOND. SO, WE WANT TO USE
|
||||
; 356 * CPU MHZ FOR INTERNAL LOOP COUNT.
|
||||
LD DE,380 ; LOAD SCALER FOR 1MHZ
|
||||
LD A,(CB_CPUMHZ) ; LOAD CPU SPEED IN MHZ
|
||||
CALL MULT8X16 ; HL := DE * A
|
||||
LD (PPIDE_TOSCALER),HL ; SAVE IT
|
||||
@@ -355,7 +362,7 @@ PPIDE_INIT2:
|
||||
LD DE,PPIDE_STR_NOPPI ; NO PPI MESSAGE
|
||||
CALL WRITESTR ; DISPLAY IT
|
||||
JR PPIDE_INIT4 ; SKIP CFG ENTRY
|
||||
;
|
||||
;
|
||||
PPIDE_INIT3:
|
||||
CALL PPIDE_RESET ; RESET THE BUS
|
||||
CALL PPIDE_INIT5 ; DETECT/INIT MASTER
|
||||
@@ -363,7 +370,7 @@ PPIDE_INIT3:
|
||||
CALL PPIDE_GOPARTNER ; SWITCH IY TO PARTNER CFG
|
||||
CALL PPIDE_INIT5 ; DETECT/INIT SLAVE
|
||||
POP IY ; RESTORE CFG PTR
|
||||
;
|
||||
;
|
||||
PPIDE_INIT4:
|
||||
LD DE,PPIDE_CFGSIZ ; SIZE OF CFG TABLE ENTRY
|
||||
ADD IY,DE ; BUMP POINTER
|
||||
@@ -381,13 +388,28 @@ PPIDE_INIT5:
|
||||
PUSH IY ; CFG ENTRY POINTER
|
||||
POP DE ; COPY TO DE
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
|
||||
;
|
||||
; START PRINTING DEVICE INFO
|
||||
CALL PPIDE_PRTPREFIX ; PRINT DEVICE PREFIX
|
||||
LD A,(IY+PPIDE_TYPE)
|
||||
LD DE,PPIDE_STR_TYPEATA
|
||||
CP PPIDE_TYPEATA
|
||||
CALL Z,WRITESTR
|
||||
LD DE,PPIDE_STR_TYPEATAPI
|
||||
CP PPIDE_TYPEATAPI
|
||||
CALL Z,WRITESTR
|
||||
;
|
||||
; CHECK FOR BAD STATUS
|
||||
LD A,(IY+PPIDE_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JP NZ,PPIDE_PRTSTAT ; EXIT VIA PRINT STATUS
|
||||
JP Z,PPIDE_INIT6
|
||||
CALL PC_SPACE
|
||||
JP NZ,PPIDE_PRTSTATSTR ; EXIT VIA PRINT STATUS STRING
|
||||
;
|
||||
CALL PPIDE_PRTPREFIX ; PRINT DEVICE PREFIX
|
||||
PPIDE_INIT6:
|
||||
LD A,(IY+PPIDE_TYPE) ; GET DEVICE TYPE
|
||||
CP PPIDE_TYPEATA ; ATA?
|
||||
RET NZ ; IF NOT, THEN DONE
|
||||
;
|
||||
LD DE,PPIDE_STR_8BIT
|
||||
BIT 1,(IY+PPIDE_ACC) ; 8 BIT ACCESS?
|
||||
@@ -426,9 +448,9 @@ PPIDE_INIT5:
|
||||
PPIDE_DETECT:
|
||||
;
|
||||
; TEST FOR PPI EXISTENCE
|
||||
; WE SETUP THE PPI TO WRITE, THEN WRITE A VALUE OF ZERO
|
||||
; WE SETUP THE PPI TO WRITE, THEN WRITE A VALUE OF $A5
|
||||
; TO PORT A (DATALO), THEN READ IT BACK. IF THE PPI IS THERE
|
||||
; THEN THE BUS HOLD CIRCUITRY WILL READ BACK THE ZERO. SINCE
|
||||
; THEN THE BUS HOLD CIRCUITRY WILL READ BACK THE $A5. SINCE
|
||||
; WE ARE IN WRITE MODE, AN IDE CONTROLLER WILL NOT BE ABLE TO
|
||||
; INTERFERE WITH THE VALUE BEING READ.
|
||||
;
|
||||
@@ -437,14 +459,14 @@ PPIDE_DETECT:
|
||||
OUT (C),A ; WRITE IT
|
||||
;
|
||||
LD C,(IY+PPIDE_DATALO) ; PPI PORT A, DATALO
|
||||
XOR A ; VALUE ZERO
|
||||
LD A,$A5 ; TEST VALUE
|
||||
OUT (C),A ; PUSH VALUE TO PORT
|
||||
IN A,(C) ; GET PORT VALUE
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS
|
||||
CP $A5 ; CHECK FOR TEST VALUE
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;=============================================================================
|
||||
@@ -564,26 +586,12 @@ PPIDE_DEVICE1:
|
||||
PPIDE_MEDIA:
|
||||
LD A,E ; GET FLAGS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,PPIDE_MEDIA2 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
JR Z,PPIDE_MEDIA1 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
;
|
||||
; GET CURRENT STATUS
|
||||
LD A,(IY+PPIDE_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,PPIDE_MEDIA1 ; ERROR ACTIVE, GO RIGHT TO RESET
|
||||
;
|
||||
; USE IDENTIFY COMMAND TO CHECK DEVICE
|
||||
LD HL,PPIDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),PPIDE_TOFAST ; USE FAST TIMEOUT DURING IDENTIFY COMMAND
|
||||
CALL PPIDE_SELUNIT ; HARDWARE SELECTION OF TARGET UNIT
|
||||
CALL PPIDE_IDENTIFY ; EXECUTE IDENTIFY COMMAND
|
||||
LD HL,PPIDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),PPIDE_TONORM ; BACK TO NORMAL TIMEOUT
|
||||
JR Z,PPIDE_MEDIA2 ; IF SUCCESS, BYPASS RESET
|
||||
;CALL PPIDE_RESET ; RESET IDE INTERFACE
|
||||
CALL PPIDE_INITUNIT ; RE-INITIALIZE UNIT
|
||||
;
|
||||
PPIDE_MEDIA1:
|
||||
CALL PPIDE_RESET ; RESET IDE INTERFACE
|
||||
;
|
||||
PPIDE_MEDIA2:
|
||||
LD A,(IY+PPIDE_STAT) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
LD D,0 ; NO MEDIA CHANGE DETECTED
|
||||
@@ -666,6 +674,32 @@ PPIDE_SETFEAT:
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_NOP:
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_PRTPREFIX
|
||||
PRTS(" NOP$")
|
||||
#ENDIF
|
||||
LD A,(PPIDE_DRVHD)
|
||||
;OUT (PPIDE_IO_DRVHD),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_DRVHD
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; EXECUTE THE NOP COMMAND, BUT DON'T WAIT FOR DRDY, JUST
|
||||
; MAKE SURE BUSY IS CLEAR. THIS COMMAND IS USED DURING
|
||||
; DEVICE DETECTION/INITIALIZATION AND ATAPI DEVICES WILL
|
||||
; NOT ASSERT DRDY AFTER RESET.
|
||||
LD A,PPIDE_CIDE_NOP ; CMD = NOP
|
||||
LD (PPIDE_CMD),A ; SAVE IT
|
||||
CALL PPIDE_WAITBSY
|
||||
RET NZ
|
||||
JP PPIDE_RUNCMD1 ; RUN COMMAND AND EXIT
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_IDENTIFY:
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_PRTPREFIX
|
||||
@@ -683,6 +717,35 @@ PPIDE_IDENTIFY:
|
||||
LD (PPIDE_CMD),A
|
||||
CALL PPIDE_RUNCMD
|
||||
RET NZ
|
||||
;
|
||||
LD HL,HB_WRKBUF
|
||||
JP PPIDE_GETBUF ; EXIT THRU BUFRD
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_IDENTIFYPACKET:
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_PRTPREFIX
|
||||
PRTS(" IDPKTDEV$")
|
||||
#ENDIF
|
||||
LD A,(PPIDE_DRVHD)
|
||||
;OUT (PPIDE_IO_DRVHD),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_DRVHD
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
LD A,PPIDE_CIDE_IDPKTDEV
|
||||
LD (PPIDE_CMD),A
|
||||
CALL PPIDE_RUNCMD
|
||||
RET NZ
|
||||
;
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
BIT 6,A ; IS DRQ SET?
|
||||
JP Z,PPIDE_NOMEDIA
|
||||
;
|
||||
LD HL,HB_WRKBUF
|
||||
JP PPIDE_GETBUF ; EXIT THRU BUFRD
|
||||
;
|
||||
@@ -777,10 +840,6 @@ PPIDE_SETADDR:
|
||||
#ENDIF
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_COUNT
|
||||
;
|
||||
;;#IF (DSKYENABLE)
|
||||
;; CALL PPIDE_DSKY
|
||||
;;#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
@@ -792,6 +851,7 @@ PPIDE_RUNCMD:
|
||||
CALL PPIDE_WAITRDY ; WAIT FOR DRIVE READY
|
||||
RET NZ ; BAIL OUT ON TIMEOUT
|
||||
;
|
||||
PPIDE_RUNCMD1:
|
||||
LD A,(PPIDE_CMD) ; GET THE COMMAND
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
@@ -982,7 +1042,7 @@ PPIDE_GETRES:
|
||||
; HARDWARE INTERFACE ROUTINES
|
||||
;=============================================================================
|
||||
;
|
||||
; SOFT RESET OF ALL DEVICES ON BUS
|
||||
; RESET ALL DEVICES ON BUS
|
||||
;
|
||||
PPIDE_RESET:
|
||||
#IF (PPIDETRACE >= 3)
|
||||
@@ -990,26 +1050,10 @@ PPIDE_RESET:
|
||||
PRTS(" RESET$")
|
||||
#ENDIF
|
||||
;
|
||||
; OLDER CF CARDS DO NOT SEEM TO SET THE
|
||||
; REGISTERS ON RESET, SO HERE WE FAKE THINGS BY
|
||||
; SETTING THEM AS A RESET WOULD
|
||||
#IF (PPIDETRACE >= 3)
|
||||
PRTS(" FAKE$")
|
||||
#ENDIF
|
||||
XOR A
|
||||
;OUT (IDE_IO_CYLLO),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_CYLLO
|
||||
;OUT (IDE_IO_CYLHI),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_CYLHI
|
||||
INC A
|
||||
;OUT (IDE_IO_COUNT),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_COUNT
|
||||
;OUT (IDE_IO_SECT),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_SECT
|
||||
; HARD RESET
|
||||
;
|
||||
; RESET LINE IS NORMALLY PULSED AT POWER ON. HOWEVER, THIS IS NOT
|
||||
; DONE FOR PPIDE DEVICES, SO WE DO IT NOW.
|
||||
;
|
||||
; SETUP PPI TO READ
|
||||
LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ
|
||||
@@ -1034,18 +1078,21 @@ PPIDE_RESET:
|
||||
#ENDIF
|
||||
;
|
||||
; PULSE IDE RESET LINE
|
||||
#IF (PPIDETRACE >= 3)
|
||||
PRTS(" HARD$")
|
||||
#ENDIF
|
||||
LD A,PPIDE_CTL_RESET
|
||||
;OUT (PPIDE_IO_CTL),A
|
||||
LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS
|
||||
OUT (C),A
|
||||
LD DE,20
|
||||
LD DE,20 ; DELAY 320US (SPEC IS >= 25US)
|
||||
CALL VDELAY
|
||||
XOR A
|
||||
;OUT (PPIDE_IO_CTL),A
|
||||
OUT (C),A
|
||||
LD DE,20
|
||||
CALL VDELAY
|
||||
;
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
; REININT DSKY AND RESTORE CONTENTS
|
||||
@@ -1057,24 +1104,55 @@ PPIDE_RESET:
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
LD A,%00001010 ; SET ~IEN, NO INTERRUPTS
|
||||
; SOME CF CARDS AND CF CARD EMULATORS NEED A LITTLE TIME TO
|
||||
; "BOOT" THEIR INTERNAL ELECTRONICS, SO THEY CANNOT ASSERT BUSY
|
||||
; IMMEDIATELY. A SMALL WAIT IS PERFORMED HERE TO GIVE SUCH DEVICES
|
||||
; A BETTER CHANCE TO SUCCEED LATER.
|
||||
;
|
||||
;;; CALL LDELAY ; DELAY FOR SLAVE INIT
|
||||
LD DE,150000 / 16 ;
|
||||
CALL VDELAY ; SMALL DELAY
|
||||
;
|
||||
JR PPIDE_RESET3 ; SKIP SOFT RESET
|
||||
;
|
||||
; SOFT RESET
|
||||
;
|
||||
; RC CANNOT ACCESS DEVICE CONTROL REG, SO SKIP THIS
|
||||
;
|
||||
PPIDE_RESET2:
|
||||
; INITIATE SOFT RESET
|
||||
#IF (IDETRACE >= 3)
|
||||
PRTS(" SOFT$")
|
||||
#ENDIF
|
||||
LD A,%00001110 ; ASSERT RESET, NO INTERRUPTS
|
||||
;OUT (PPIDE_IO_CTRL),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_CTRL
|
||||
LD DE,20 ; DELAY 320US (SPEC IS >= 25US)
|
||||
CALL VDELAY
|
||||
;
|
||||
PPIDE_RESET3:
|
||||
;
|
||||
; CONFIGURE OPERATION AND END SOFT RESET
|
||||
;
|
||||
#IF (PPIDETRACE >= 3)
|
||||
PRTS(" CONFIG$")
|
||||
#ENDIF
|
||||
LD A,%00001010 ; DEASSERT RESET, NO INTERRUPTS
|
||||
;OUT (PPIDE_REG_CTRL),A
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_CTRL
|
||||
;
|
||||
; SPEC ALLOWS UP TO 450MS FOR DEVICES TO ASSERT THEIR PRESENCE
|
||||
; VIA -DASP. I ENCOUNTER PROBLEMS LATER ON IF I DON'T WAIT HERE
|
||||
; FOR THAT TO OCCUR. THUS FAR, IT APPEARS THAT 150MS IS SUFFICIENT
|
||||
; FOR ANY DEVICE ENCOUNTERED. MAY NEED TO EXTEND BACK TO 500MS
|
||||
; IF A SLOWER DEVICE IS ENCOUNTERED.
|
||||
;
|
||||
;LD DE,500000/16 ; ~500MS
|
||||
LD DE,150000/16 ; ~???MS
|
||||
LD DE,20 ; DELAY 320US (SPEC IS >= 25US)
|
||||
CALL VDELAY
|
||||
;
|
||||
PPIDE_RESET5:
|
||||
LD HL,PPIDE_TONORM ; NORMAL TIMEOUT NOW
|
||||
LD (PPIDE_TIMEOUT),HL ; AND RESTORE IT
|
||||
;
|
||||
; INITIALIZE THE INDIVIDUAL UNITS (MASTER AND SLAVE).
|
||||
; BASED ON TESTING, IT APPEARS THAT THE MASTER UNIT MUST
|
||||
; BE DONE FIRST OR THIS BEHAVES BADLY.
|
||||
;
|
||||
PUSH IY ; SAVE CFG PTR
|
||||
BIT 0,(IY+PPIDE_ACC) ; MASTER?
|
||||
CALL Z,PPIDE_GOPARTNER ; IF NOT, SWITCH TO MASTER
|
||||
@@ -1082,7 +1160,7 @@ PPIDE_RESET:
|
||||
CALL PPIDE_GOPARTNER ; POINT TO SLAVE
|
||||
CALL PPIDE_INITUNIT ; INIT PARTNER UNIT
|
||||
POP IY ; RECOVER ORIG CFG PTR
|
||||
;
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND DONE
|
||||
;
|
||||
@@ -1092,14 +1170,10 @@ PPIDE_INITUNIT:
|
||||
CALL PPIDE_SELUNIT ; SELECT UNIT
|
||||
RET NZ ; ABORT IF ERROR
|
||||
|
||||
LD HL,PPIDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),PPIDE_TONORM ; SET NORMAL TIMEOUT
|
||||
|
||||
CALL PPIDE_PROBE ; DO PROBE
|
||||
RET NZ ; JUST RETURN IF NOTHING THERE
|
||||
|
||||
CALL PPIDE_INITDEV ; IF FOUND, ATTEMPT TO INIT DEVICE
|
||||
RET ; DONE
|
||||
JP PPIDE_INITDEV ; EXIT VIA INITDEV
|
||||
;
|
||||
; TAKE ANY ACTIONS REQUIRED TO SELECT DESIRED PHYSICAL UNIT
|
||||
;
|
||||
@@ -1111,10 +1185,16 @@ PPIDE_SELUNIT:
|
||||
BIT 0,(IY+PPIDE_ACC) ; MASTER?
|
||||
JR Z,PPIDE_SELUNIT1 ; HANDLE SLAVE
|
||||
LD A,PPIDE_DRVMASTER ; MASTER
|
||||
JR PPIDE_SELUNIT2
|
||||
PPIDE_SELUNIT1:
|
||||
#IF (PPIDETRACE >= 3)
|
||||
PRTS(" MASTER$")
|
||||
#ENDIF
|
||||
JR PPIDE_SELUNIT2
|
||||
PPIDE_SELUNIT1:
|
||||
LD A,PPIDE_DRVSLAVE ; SLAVE
|
||||
PPIDE_SELUNIT2:
|
||||
#IF (PPIDETRACE >= 3)
|
||||
PRTS(" SLAVE$")
|
||||
#ENDIF
|
||||
PPIDE_SELUNIT2:
|
||||
LD (PPIDE_DRVHD),A ; SAVE IT
|
||||
XOR A ; SUCCESS
|
||||
RET
|
||||
@@ -1122,10 +1202,25 @@ PPIDE_SELUNIT2:
|
||||
;
|
||||
;
|
||||
PPIDE_PROBE:
|
||||
;
|
||||
; PROBE FOR A DRIVE ON THE INTERFACE (EITHER MASTER OR SLAVE).
|
||||
; IDEALLY, THIS IS BEING CALLED IMMEDIATELY AFTER A HARD OR SOFT
|
||||
; INTERFACE RESET. HOWEVER, THERE ARE SOME HARDWARE IMPLEMENTATTIONS
|
||||
; WHICH ARE CAPABLE OF NEITHER A HARD NOR SOFT RESET. SO THIS
|
||||
; CODE SHOULD TRY TO HANDLE THE SCENARIO WHERE NO INTERFACE RESET
|
||||
; HAS OCCURRED.
|
||||
;
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_PRTPREFIX
|
||||
PRTS(" PROBE$") ; LABEL FOR IO ADDRESS
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; SELECT DEVICE (MASTER/SLAVE)
|
||||
LD A,(PPIDE_DRVHD)
|
||||
@@ -1136,20 +1231,60 @@ PPIDE_PROBE:
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CALL DELAY ; DELAY ~16US
|
||||
;
|
||||
; IF WE GET HERE AND THE DRIVE IS STILL INITIALIZING, WE NEED TO
|
||||
; WAIT UNTIL THE DRIVE IS READY. IN THIS CASE BUSY *WILL* BE HIGH.
|
||||
; BASED ON TESTING, DRDY AND DSC VALUES VARY. EVERYTHING ELSE SEEMS
|
||||
; TO BE ZERO. SO, WE FILTER OUT DRDY & DSC, THEN LOOK FOR BUSY=1
|
||||
; AND ALL ELSE ZERO. THIS GENERALLY AVOIDS VALUES THAT ARE TYPICAL
|
||||
; FOR FLOATING PORTS AND SO CAN BE USED TO DETERMINE IF WE NEED TO
|
||||
; WAIT FOR THE DEVICE TO BE READY. THIS WAIT IS MANDATORY BECAUSE
|
||||
; SOME (IF NOT ALL) DEVICES WILL NOT PERSIST REGISTER VALUES UNTIL
|
||||
; THE DRIVE IS READY.
|
||||
;
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
AND %10101111 ; FILTER OUT DRDY & DSC
|
||||
CP $80 ; INIT IN PROGRESS?
|
||||
JR NZ,PPIDE_PROBE1 ; IF NOT, SKIP AHEAD
|
||||
;
|
||||
#IF (PPIDETRACE >= 3)
|
||||
PRTS(" WAIT$")
|
||||
#ENDIF
|
||||
;
|
||||
LD HL,(PPIDE_TIMEOUT) ; GET CURRENT TIMEOUT
|
||||
PUSH HL ; SAVE IT
|
||||
LD HL,PPIDE_TOSLOW ; SLOW TIMEOUT FOR THIS
|
||||
LD (PPIDE_TIMEOUT),HL ; SET IT
|
||||
CALL PPIDE_WAITBSY ; WAIT FOR BUSY TO CLEAR
|
||||
POP HL ; RECOVER TIMEOUT
|
||||
LD (PPIDE_TIMEOUT),HL ; SET IT
|
||||
;
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; TEST FOR PRESENCE OF IDE REGISTERS. USE LBA0/1 TO SEE
|
||||
; IF VALUE CAN BE PERSISTED. THE USE OF BOTH LBA0 AND LBA1
|
||||
; IS TO MAINTAIN CONSISTENCY WITH TGHE THE PPIDE DRIVER BECAUSE
|
||||
; PPI ITSELF WILL PERSIST THE LAST VALUE WRITTEN, SO WE USE
|
||||
; MULTIPLE REGISTERS TO WORK AROUND THIS FALSE POSITIVE.
|
||||
;
|
||||
PPIDE_PROBE1:
|
||||
; $AA -> LBA0
|
||||
LD A,$AA
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_LBA0
|
||||
;
|
||||
;
|
||||
; $55 => LBA1
|
||||
LD A,$55
|
||||
CALL PPIDE_OUT
|
||||
@@ -1179,42 +1314,34 @@ PPIDE_PROBE:
|
||||
CALL PPIDE_REGDUMP
|
||||
#ENDIF
|
||||
;
|
||||
;JR PPIDE_PROBE1 ; *DEBUG*
|
||||
;
|
||||
PPIDE_PROBE0:
|
||||
CALL PPIDE_WAITBSY ; WAIT FOR BUSY TO CLEAR
|
||||
JP NZ,PPIDE_NOMEDIA ; CONVERT TIMEOUT TO NO MEDIA AND RETURN
|
||||
;
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_REGDUMP
|
||||
#ENDIF
|
||||
;
|
||||
; CHECK STATUS
|
||||
; IN A,(PPIDE_REG_STAT) ; GET STATUS
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE ; IF DEBUG, PRINT STATUS
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS TO TEST FOR ZERO
|
||||
JP Z,PPIDE_NOMEDIA ; CONTINUE IF NON-ZERO
|
||||
;
|
||||
PPIDE_PROBE1:
|
||||
; ASSUME ATA DEVICE FOR NOW, RECORD TYPE AND RETURN SUCCESS
|
||||
LD A,PPIDE_TYPEATA ; TYPE = ATA
|
||||
LD (IY+PPIDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; DONE, NOTE THAT A=0 AND Z IS SET
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; (RE)INITIALIZE DEVICE
|
||||
;
|
||||
PPIDE_INITDEV:
|
||||
;
|
||||
LD A,(IY+PPIDE_TYPE) ; GET THE DEVICE TYPE
|
||||
OR A ; SET FLAGS
|
||||
JP Z,PPIDE_NOMEDIA ; EXIT SETTING NO MEDIA STATUS
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_PRTPREFIX
|
||||
PRTS(" INITDEV$") ; LABEL FOR IO ADDRESS
|
||||
#ENDIF
|
||||
;
|
||||
; IF THE IDE STATUS BYTE IS $00, WE HAVE EITHER A NON-PRESENT SLAVE
|
||||
; OR AN ATAPI DEVICE. TO DIFFERENTIATE THESE POSSIBILITIES, WE RUN
|
||||
; A NOP COMMAND. IF WE HAVE AN ATAPI DEVICE, THIS WILL CAUSE THE
|
||||
; STATUS BYTE TO BE "NORMAL" (NON-ZERO). IF THE STATUS IS STILL
|
||||
; ZERO, WE ABORT WITH A NO MEDIA STATUS. NOTE THAT THE NOP COMMAND
|
||||
; RETURNS A COMMAND ERROR BY DESIGN. WE JUST IGNORE THE ERROR.
|
||||
;
|
||||
CALL PPIDE_NOP
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
OR A
|
||||
JP Z,PPIDE_NOMEDIA
|
||||
;
|
||||
; WE NEED TO SETUP 8-BIT MODE BEFORE DOING ANYTHING ELSE
|
||||
;
|
||||
PPIDE_INITDEV0A:
|
||||
BIT 1,(IY+PPIDE_ACC) ; 8 BIT ACCESS?
|
||||
JR Z,PPIDE_INITDEV0 ; NO, DO 16 BIT INIT
|
||||
LD A,PPIDE_FEAT_ENABLE8BIT ; FEATURE VALUE = ENABLE 8-BIT PIO
|
||||
@@ -1232,10 +1359,14 @@ PPIDE_INITDEV0:
|
||||
PPIDE_INITDEV00:
|
||||
;
|
||||
CALL PPIDE_IDENTIFY ; EXECUTE PPIDENTIFY COMMAND
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
JR NZ,PPIDE_INITDEVP ; ON ERROR, TRY PACKET DEVICE
|
||||
;
|
||||
; DECLARE WE ARE ATA
|
||||
LD A,PPIDE_TYPEATA ; OTHERWISE TYPE=ATA
|
||||
LD (IY+PPIDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
;
|
||||
LD DE,HB_WRKBUF ; POINT TO BUFFER
|
||||
#IF (PPIDETRACE >= 3)
|
||||
#IF (PPIDETRACE >= 4)
|
||||
CALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
|
||||
#ENDIF
|
||||
;
|
||||
@@ -1255,38 +1386,15 @@ PPIDE_INITDEV00:
|
||||
CALL PRTHEXWORD
|
||||
#ENDIF
|
||||
;
|
||||
; SEE PAGE 114 OF CF+ & CF SPECIFICATION REV. 3.0 FOR CF CARD
|
||||
; SIGNATURE VALUES. ALL OF THE BELOW ARE DOCUMENTED THERE EXCEPT
|
||||
; $045A WHICH IS A VALUE DISCOVERED ON A CF<->SD CARD ADAPTER.
|
||||
;
|
||||
; SIGNATURE $045A IS NOT LISTED IN THE CF SPEC. IT WAS ADDED BECAUSE
|
||||
; IT WAS SEEN IN THE WILD ON A CF-SD ADAPTER. HOWEVER IT HAS NOW
|
||||
; ALSO BEEN SEEN ON A SPINNING HARD DISK. SINCE IT IS AMBIGUOUS, I
|
||||
; WILL CONSIDER IT TO BE A HARD DISK.
|
||||
;
|
||||
LD BC,$848A ; STANDARD CF CARD SIGNATURE %1000 1111 1000 1010
|
||||
CALL PPIDE_INITDEV000 ; TEST & SET
|
||||
LD BC,$044A ; ALT SIG FOR CF NON-REMOVABLE %0000 0100 0100 1010
|
||||
CALL PPIDE_INITDEV000 ; TEST & SET
|
||||
;LD BC,$045A ; ?ALT SIG FOR CF NON-REMOVABLE %0000 0100 0101 1010
|
||||
;CALL PPIDE_INITDEV000 ; TEST & SET
|
||||
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE %0000 0000 0100 0000
|
||||
CALL PPIDE_INITDEV000 ; TEST & SET
|
||||
JR PPIDE_INITDEV1 ; CONTINUE INIT
|
||||
;
|
||||
PPIDE_INITDEV000:
|
||||
; CHECK IF FIRST WORD OF IDENTIFY DATA MATCHES VALUE IN BC
|
||||
; AND SET CF FLAG IF SO
|
||||
LD HL,(HB_WRKBUF) ; FIRST WORD OF IDENTIFY DATA
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,BC ; COMPARE
|
||||
RET NZ ; ABORT IF NOT EQUAL
|
||||
; DETERMINE IF COMPACTFLASH MEDIA
|
||||
LD A,(HB_WRKBUF+(83*2)) ; LOW BYTE OF WORD 83
|
||||
BIT 2,A ; TEST CFA FEATURE SET BIT
|
||||
JR Z,PPIDE_INITDEV1 ; IF NOT, SKIP
|
||||
SET 0,(IY+PPIDE_MED) ; ELSE SET FLAGS BIT FOR CF MEDIA
|
||||
RET ; AND RETURN
|
||||
;
|
||||
PPIDE_INITDEV1:
|
||||
; DETERMINE IF LBA CAPABLE
|
||||
LD A,(HB_WRKBUF+98+1) ; GET BYTE WITH LBA BIT FROM BUFFER
|
||||
LD A,(HB_WRKBUF+98+1) ; HIGH BYTE OF WORD 49
|
||||
BIT 1,A ; CHECK THE LBA BIT
|
||||
JR Z,PPIDE_INITDEV2 ; NOT SET, BYPASS
|
||||
SET 1,(IY+PPIDE_MED) ; SET FLAGS BIT FOR LBA
|
||||
@@ -1303,12 +1411,39 @@ PPIDE_INITDEV2:
|
||||
POP BC ; RECOVER POINTER TO CAPACITY ENTRY
|
||||
CALL ST32 ; SAVE CAPACITY
|
||||
;
|
||||
; RESET CARD STATUS TO 0 (OK)
|
||||
; RECORD STATUS OK
|
||||
XOR A ; A := 0 (STATUS = OK)
|
||||
LD (IY+PPIDE_STAT),A ; SAVE IT
|
||||
;
|
||||
RET ; RETURN, A=0, Z SET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_INITDEVP:
|
||||
CALL PPIDE_IDENTIFYPACKET ; EXECUTE IDENTIFY COMMAND
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
;
|
||||
; DECLARE WE ARE ATAPI
|
||||
LD A,PPIDE_TYPEATAPI ; OTHERWISE TYPE=ATAPI
|
||||
LD (IY+PPIDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
;
|
||||
LD DE,HB_WRKBUF ; POINT TO BUFFER
|
||||
#IF (PPIDETRACE >= 4)
|
||||
CALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
|
||||
#ENDIF
|
||||
;
|
||||
LD (IY+PPIDE_MED),0 ; CLEAR FLAGS
|
||||
;
|
||||
; DONE FOR NOW, ATAPI NOT INPLEMENTED
|
||||
;
|
||||
; RETURN NOT SUPPORTED STATUS
|
||||
JP PPIDE_NOTSUP ; NOT SUPPORTED
|
||||
;
|
||||
; ; RECORD STATUS OK
|
||||
; XOR A ; A := 0 (STATUS = OK)
|
||||
; LD (IY+PPIDE_STAT),A ; SAVE IT
|
||||
; RET
|
||||
;
|
||||
; SWITCH IY POINTER FROM CURRENT UNIT CFG TO PARTNER UNIT CFG
|
||||
;
|
||||
PPIDE_GOPARTNER:
|
||||
@@ -1332,7 +1467,7 @@ PPIDE_CHKERR:
|
||||
;
|
||||
;
|
||||
PPIDE_WAITRDY:
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.1 SECS
|
||||
LD B,A ; PUT IN OUTER LOOP VAR
|
||||
PPIDE_WAITRDY1:
|
||||
LD DE,(PPIDE_TOSCALER) ; CPU SPEED SCALER TO INNER LOOP VAR
|
||||
@@ -1354,7 +1489,7 @@ PPIDE_WAITRDY2:
|
||||
;
|
||||
;
|
||||
PPIDE_WAITDRQ:
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.1 SECS
|
||||
LD B,A ; PUT IN OUTER LOOP VAR
|
||||
PPIDE_WAITDRQ1:
|
||||
LD DE,(PPIDE_TOSCALER) ; CPU SPEED SCALER TO INNER LOOP VAR
|
||||
@@ -1376,14 +1511,14 @@ PPIDE_WAITDRQ2:
|
||||
;
|
||||
;
|
||||
PPIDE_WAITBSY:
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.1 SECS
|
||||
LD B,A ; PUT IN OUTER LOOP VAR
|
||||
PPIDE_WAITBSY1:
|
||||
LD DE,(PPIDE_TOSCALER) ; CPU SPEED SCALER TO INNER LOOP VAR
|
||||
PPIDE_WAITBSY2:
|
||||
;IN A,(PPIDE_REG_STAT) ; READ STATUS
|
||||
CALL PPIDE_IN ; 17TS + 170TS
|
||||
.DB PPIDE_REG_STAT ; 0TS
|
||||
CALL PPIDE_IN ; 17TS + 204TS
|
||||
.DB PPIDE_REG_STAT
|
||||
LD C,A ; SAVE IT ; 4TS
|
||||
AND %10000000 ; TO FILL (OR READY TO FILL) ; 7TS
|
||||
RET Z ; 5TS
|
||||
@@ -1392,32 +1527,32 @@ PPIDE_WAITBSY2:
|
||||
OR E ; 4TS
|
||||
JR NZ,PPIDE_WAITBSY2 ; 12TS
|
||||
DJNZ PPIDE_WAITBSY1 ; -----
|
||||
JP PPIDE_BSYTO ; EXIT WITH BSYTO ERR ; 229TS
|
||||
JP PPIDE_BSYTO ; EXIT WITH BSYTO ERR ; 263TS
|
||||
;
|
||||
; READ A VALUE FROM THE DEVICE POINTED TO BY IY AND RETURN IT IN A
|
||||
;
|
||||
;
|
||||
PPIDE_IN:
|
||||
EX (SP),HL ; GET PARM POINTER ; 19TS
|
||||
PUSH BC ; SAVE INCOMING BC ; 11TS
|
||||
LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ ; 7TS
|
||||
;OUT (PPIDE_IO_PPI),A ; DO IT ; 11TS
|
||||
LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD
|
||||
OUT (C),A ; WRITE IT
|
||||
;OUT (PPIDE_IO_PPI),A ; DO IT
|
||||
LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD ; 19TS
|
||||
OUT (C),A ; WRITE IT ; 12TS
|
||||
;
|
||||
LD B,(HL) ; GET CTL PORT VALUE ; 7TS
|
||||
;LD C,PPIDE_IO_CTL ; SETUP PORT TO WRITE ; 7TS
|
||||
;LD C,PPIDE_IO_CTL ; SETUP PORT TO WRITE
|
||||
;LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS
|
||||
DEC C ; SET IDE ADDRESS
|
||||
DEC C ; SET IDE ADDRESS ; 4TS
|
||||
OUT (C),B ; SET ADDRESS LINES ; 12TS
|
||||
SET 6,B ; TURN ON READ BIT ; 8TS
|
||||
OUT (C),B ; ASSERT READ LINE ; 12TS
|
||||
;
|
||||
;IN A,(PPIDE_IO_DATALO) ; GET DATA VALUE FROM DEVICE ; 11TS
|
||||
DEC C
|
||||
DEC C
|
||||
IN A,(C) ; GET DATA VALUE FROM DEVICE
|
||||
INC C
|
||||
INC C
|
||||
;IN A,(PPIDE_IO_DATALO) ; GET DATA VALUE FROM DEVICE
|
||||
DEC C ; 4TS
|
||||
DEC C ; 4TS
|
||||
IN A,(C) ; GET DATA VALUE FROM DEVICE ; 12
|
||||
INC C ; 4TS
|
||||
INC C ; 4TS
|
||||
;
|
||||
RES 6,B ; CLEAR READ BIT ; 8TS
|
||||
OUT (C),B ; DEASSERT READ LINE ; 12TS
|
||||
@@ -1425,9 +1560,9 @@ PPIDE_IN:
|
||||
INC HL ; POINT PAST PARM ; 6TS
|
||||
EX (SP),HL ; RESTORE STACK ; 19TS
|
||||
RET ; 10TS
|
||||
; ; -----
|
||||
; OUTPUT VALUE IN A TO THE DEVICE POINTED TO BY IY ; 204TS
|
||||
;
|
||||
; OUTPUT VALUE IN A TO THE DEVICE POINTED TO BY IY
|
||||
;
|
||||
PPIDE_OUT:
|
||||
; *** TODO *** FIX ORDER OF SET/CLEAR WRITE LINE
|
||||
EX (SP),HL ; GET PARM POINTER
|
||||
@@ -1495,6 +1630,10 @@ PPIDE_BSYTO:
|
||||
LD A,PPIDE_STBSYTO
|
||||
JR PPIDE_ERR
|
||||
;
|
||||
PPIDE_NOTSUP:
|
||||
LD A,PPIDE_STNOTSUP
|
||||
JR PPIDE_ERR
|
||||
;
|
||||
PPIDE_ERR:
|
||||
LD (IY+PPIDE_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
@@ -1512,39 +1651,15 @@ PPIDE_PRTERR:
|
||||
RET Z ; DONE IF NO ERRORS
|
||||
; FALL THRU TO PPIDE_PRTSTAT
|
||||
;
|
||||
; PRINT STATUS STRING (STATUS NUM IN A)
|
||||
; PRINT FULL DEVICE STATUS LINE
|
||||
;
|
||||
PPIDE_PRTSTAT:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD A,(IY+PPIDE_STAT)
|
||||
OR A
|
||||
LD DE,PPIDE_STR_STOK
|
||||
JR Z,PPIDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STINVUNIT
|
||||
CP PPIDE_STINVUNIT
|
||||
JR Z,PPIDE_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STNOMEDIA
|
||||
JR Z,PPIDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STCMDERR
|
||||
JR Z,PPIDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STIOERR
|
||||
JR Z,PPIDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STRDYTO
|
||||
JR Z,PPIDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STDRQTO
|
||||
JR Z,PPIDE_PRTSTAT1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STBSYTO
|
||||
JR Z,PPIDE_PRTSTAT1
|
||||
LD DE,PPIDE_STR_STUNK
|
||||
PPIDE_PRTSTAT1:
|
||||
CALL PPIDE_PRTPREFIX ; PRINT UNIT PREFIX
|
||||
JR PPIDE_PRTSTAT3
|
||||
PPIDE_PRTSTAT2:
|
||||
@@ -1552,12 +1667,52 @@ PPIDE_PRTSTAT2:
|
||||
PRTS("PPIDE:$") ; NO UNIT NUM IN PREFIX FOR INVALID UNIT
|
||||
PPIDE_PRTSTAT3:
|
||||
CALL PC_SPACE ; FORMATTING
|
||||
CALL WRITESTR
|
||||
CALL PPIDE_PRTSTATSTR
|
||||
POP HL
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT STATUS STRING
|
||||
;
|
||||
PPIDE_PRTSTATSTR:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
LD A,(IY+PPIDE_STAT)
|
||||
OR A
|
||||
LD DE,PPIDE_STR_STOK
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STINVUNIT
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STNOMEDIA
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STCMDERR
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STIOERR
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STRDYTO
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STDRQTO
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STBSYTO
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
INC A
|
||||
LD DE,PPIDE_STR_STNOTSUP
|
||||
JR Z,PPIDE_PRTSTATSTR1
|
||||
LD DE,PPIDE_STR_STUNK
|
||||
PPIDE_PRTSTATSTR1:
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT ALL REGISTERS DIRECTLY FROM DEVICE
|
||||
; DEVICE MUST BE SELECTED PRIOR TO CALL
|
||||
;
|
||||
@@ -1616,30 +1771,6 @@ PPIDE_PRTPREFIX1:
|
||||
CALL PC_COLON
|
||||
POP AF
|
||||
RET
|
||||
;;;
|
||||
;;;
|
||||
;;;
|
||||
;;#IF (DSKYENABLE)
|
||||
;;PPIDE_DSKY:
|
||||
;; LD HL,DSKY_HEXBUF ; POINT TO DSKY BUFFER
|
||||
;; CALL PPIDE_IN
|
||||
;; .DB PPIDE_REG_DRVHD
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; INC HL ; INCREMENT BUFFER POINTER
|
||||
;; CALL PPIDE_IN
|
||||
;; .DB PPIDE_REG_CYLHI
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; INC HL ; INCREMENT BUFFER POINTER
|
||||
;; CALL PPIDE_IN
|
||||
;; .DB PPIDE_REG_CYLLO
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; INC HL ; INCREMENT BUFFER POINTER
|
||||
;; CALL PPIDE_IN
|
||||
;; .DB PPIDE_REG_SECT
|
||||
;; LD (HL),A ; SAVE IN BUFFER
|
||||
;; CALL DSKY_HEXOUT ; SEND IT TO DSKY
|
||||
;; RET
|
||||
;;#ENDIF
|
||||
;
|
||||
;=============================================================================
|
||||
; STRING DATA
|
||||
@@ -1653,18 +1784,22 @@ PPIDE_STR_STIOERR .TEXT "IO ERROR$"
|
||||
PPIDE_STR_STRDYTO .TEXT "READY TIMEOUT$"
|
||||
PPIDE_STR_STDRQTO .TEXT "DRQ TIMEOUT$"
|
||||
PPIDE_STR_STBSYTO .TEXT "BUSY TIMEOUT$"
|
||||
PPIDE_STR_STNOTSUP .TEXT "NOT SUPPORTED$"
|
||||
PPIDE_STR_STUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
PPIDE_STR_NO .TEXT "NO$"
|
||||
PPIDE_STR_NOPPI .TEXT "PPI NOT PRESENT$"
|
||||
PPIDE_STR_8BIT .TEXT " 8-BIT$"
|
||||
;
|
||||
PPIDE_STR_TYPEATA .TEXT " ATA$"
|
||||
PPIDE_STR_TYPEATAPI .TEXT " ATAPI$"
|
||||
;
|
||||
;=============================================================================
|
||||
; DATA STORAGE
|
||||
;=============================================================================
|
||||
;
|
||||
PPIDE_TIMEOUT .DB PPIDE_TONORM ; WAIT FUNCS TIMEOUT IN TENTHS OF SEC
|
||||
PPIDE_TOSCALER .DW CPUMHZ * 218 ; WAIT FUNCS SCALER FOR CPU SPEED
|
||||
PPIDE_TOSCALER .DW CPUMHZ * 380 ; WAIT FUNCS SCALER FOR CPU SPEED
|
||||
;
|
||||
PPIDE_CMD .DB 0 ; PENDING COMMAND TO PROCESS
|
||||
PPIDE_IOFNADR .DW 0 ; PENDING IO FUNCTION ADDRESS
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -180,7 +180,7 @@ start1:
|
||||
call pstr ; do it
|
||||
call clrbuf ; zero fill the cmd buffer
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
#if ((BIOS == BIOS_WBW) & FPSW_ENABLE)
|
||||
;
|
||||
ld b,BF_SYSGET ; HBIOS SysGet
|
||||
ld c,BF_SYSGET_PANEL ; ... Panel swiches value
|
||||
@@ -390,7 +390,7 @@ runcmd2:
|
||||
ld (bootslice),a ; save boot slice
|
||||
jp diskboot ; boot the disk unit/slice
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
#if ((BIOS == BIOS_WBW) & FPSW_ENABLE)
|
||||
;
|
||||
;=======================================================================
|
||||
; Process Front Panel switches
|
||||
@@ -1352,20 +1352,24 @@ diskread:
|
||||
;
|
||||
clrled:
|
||||
#if (BIOS == BIOS_WBW)
|
||||
#if (DIAGENABLE)
|
||||
xor a ; zero accum
|
||||
out (DIAGPORT),a ; clear diag leds
|
||||
#if (FPLED_ENABLE)
|
||||
;xor a ; zero accum
|
||||
;out (FPLED_IO),a ; clear diag leds
|
||||
ld b,BF_SYSSET ; HBIOS SysGet
|
||||
ld c,BF_SYSSET_PANEL ; ... Panel swiches value
|
||||
ld l,$00 ; all LEDs off
|
||||
rst 08 ; do it
|
||||
#endif
|
||||
#if (LEDENABLE)
|
||||
#if (LEDMODE == LEDMODE_STD)
|
||||
ld a,$FF ; led is inverted
|
||||
out (LEDPORT),a ; clear led
|
||||
ld a,$FF ; led is inverted
|
||||
out (LEDPORT),a ; clear led
|
||||
#endif
|
||||
#if (LEDMODE == LEDMODE_RTC)
|
||||
; Bits 0 and 1 of the RTC latch are for the LEDs.
|
||||
ld a,(HB_RTCVAL)
|
||||
and ~%00000011
|
||||
out (RTCIO),a ; clear led
|
||||
out (RTCIO),a ; clear led
|
||||
ld (HB_RTCVAL),a
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -242,6 +242,24 @@ GDCMODE_NONE .EQU 0
|
||||
GDCMODE_ECB .EQU 1 ; ECB GDC
|
||||
GDCMODE_RPH .EQU 2 ; RPH GDC
|
||||
;
|
||||
; LPT DRIVER MODE SELECTIONS
|
||||
;
|
||||
LPTMODE_NONE .EQU 0 ; NONE
|
||||
LPTMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
|
||||
LPTMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; PPA DRIVER MODE SELECTIONS
|
||||
;
|
||||
PPAMODE_NONE .EQU 0 ; NONE
|
||||
PPAMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
|
||||
PPAMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; IMM DRIVER MODE SELECTIONS
|
||||
;
|
||||
IMMMODE_NONE .EQU 0 ; NONE
|
||||
IMMMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
|
||||
IMMMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; GDC MONITOR SELECTIONS
|
||||
;
|
||||
GDCMON_NONE .EQU 0
|
||||
@@ -257,6 +275,12 @@ DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA
|
||||
DMAMODE_RC .EQU 4 ; RCBUS Z80 DMA
|
||||
DMAMODE_MBC .EQU 5 ; MBC
|
||||
;
|
||||
; KEYBOARD MODE SELECTIONS
|
||||
;
|
||||
KBDMODE_NONE .EQU 0
|
||||
KBDMODE_PS2 .EQU 1 ; PS/2 KEYBOARD CONTROLLER
|
||||
KBDMODE_VRC .EQU 2 ; VGARC KEYBOARD CONTROLLER
|
||||
;
|
||||
; SERIAL DEVICE CONFIGURATION CONSTANTS
|
||||
;
|
||||
SER_DATA5 .EQU 0 << 0
|
||||
@@ -425,6 +449,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
|
||||
|
||||
@@ -942,10 +942,10 @@ TMS_IDAT:
|
||||
.DB TMS_PPIX ; PPI CONTROL PORT
|
||||
#ENDIF
|
||||
#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC))
|
||||
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
|
||||
.DB TMS_KBDST ; 8242 CMD/STATUS PORT
|
||||
.DB TMS_KBDDATA ; 8242 DATA PORT
|
||||
.DB 0 ; FILLER
|
||||
.DB 0 ; FILER
|
||||
#ENDIF
|
||||
;
|
||||
.DB TMS_DATREG
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
; WARNING: This code does not seem to be working on Z280. WBW - 5/3/2023
|
||||
;
|
||||
; Size-optimized LZSA2 decompressor by spke & uniabis (134 bytes)
|
||||
;
|
||||
@@ -59,8 +60,8 @@
|
||||
; 3. This notice may not be removed or altered from any source distribution.
|
||||
;
|
||||
|
||||
; #DEFINE BACKWARD_DECOMPRESS ; uncomment for data compressed with option -b (+5 bytes, -3% speed)
|
||||
; #DEFINE AVOID_SELFMODIFYING_CODE ; uncomment to disallow self-modifying code (-1 byte, -4% speed)
|
||||
; #DEFINE BACKWARD_DECOMPRESS ; uncomment for data compressed with option -b (+5 bytes, -3% speed)
|
||||
; #DEFINE AVOID_SELFMODIFYING_CODE ; uncomment to disallow self-modifying code (-1 byte, -4% speed)
|
||||
|
||||
#IFNDEF BACKWARD_DECOMPRESS
|
||||
|
||||
@@ -78,7 +79,7 @@
|
||||
|
||||
#DEFINE ADD_OFFSET \
|
||||
#DEFCONT \ ld a,e \ sub l \ ld l,a
|
||||
#DEFCONT \ ld a,d \ sbc h \ ld h,a ; 6*4 = 24t / 6 bytes
|
||||
#DEFCONT \ ld a,d \ sbc h \ ld h,a ; 6*4 = 24t / 6 bytes
|
||||
|
||||
#DEFINE BLOCKCOPY \
|
||||
#DEFCONT \ lddr
|
||||
@@ -117,7 +118,7 @@ MatchLen: and %00000111 \ add a,2 \ cp 9
|
||||
call z,ExtendedCode
|
||||
|
||||
CopyMatch: ld c,a
|
||||
push hl ; BC = len, DE = dest, HL = -offset, SP -> [src]
|
||||
push hl ; BC = len, DE = dest, HL = -offset, SP -> [src]
|
||||
|
||||
#IFNDEF AVOID_SELFMODIFYING_CODE
|
||||
PrevOffset .EQU $+1 \ ld hl,0
|
||||
@@ -125,8 +126,8 @@ PrevOffset .EQU $+1 \ ld hl,0
|
||||
push ix \ pop hl
|
||||
#ENDIF
|
||||
ADD_OFFSET
|
||||
BLOCKCOPY ; BC = 0, DE = dest
|
||||
pop hl ; HL = src
|
||||
BLOCKCOPY ; BC = 0, DE = dest
|
||||
pop hl ; HL = src
|
||||
|
||||
ReadToken: ld a,(hl) \ NEXT_HL \ push af
|
||||
and %00011000 \ jr z,NoLiterals
|
||||
@@ -162,12 +163,16 @@ ExtendedCode: call ReadNibble \ inc a \ jr z,ExtraByte
|
||||
ExtraByte ld a,15 \ add a,c \ add a,(hl) \ NEXT_HL \ ret nc
|
||||
ld a,(hl) \ NEXT_HL
|
||||
ld b,(hl) \ NEXT_HL \ ret nz
|
||||
pop bc ; RET is not needed, because RET from ReadNibble is sufficient
|
||||
pop bc ; RET is not needed, because RET from ReadNibble is sufficient
|
||||
|
||||
|
||||
ReadNibble: ld c,a
|
||||
skipLDCA xor a \ ex af,af' \ ret m
|
||||
skipLDCA xor a \ nop \ ex af,af' \ ret m ; NOP for Z280 bug
|
||||
ld a,(hl) \ or $F0 \ ex af,af'
|
||||
ld a,(hl) \ NEXT_HL \ or $0F
|
||||
rrca \ rrca \ rrca \ rrca \ ret
|
||||
|
||||
; The extraneous NOP instruction above is to workaround a bug in the
|
||||
; Z280 processor where ex af,af' can copy rather than swap the flags
|
||||
; register.
|
||||
; See https://www.retrobrewcomputers.org/forum/index.php?t=msg&goto=10183&
|
||||
|
||||
@@ -1039,5 +1039,6 @@ REGS_VGA:
|
||||
;==================================================================================================
|
||||
;
|
||||
VGA_IDAT:
|
||||
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
|
||||
.DB VGA_KBDST
|
||||
.DB VGA_KBDDATA
|
||||
|
||||
670
Source/HBIOS/vrc.asm
Normal file
670
Source/HBIOS/vrc.asm
Normal file
@@ -0,0 +1,670 @@
|
||||
;======================================================================
|
||||
; VIDEO DRIVER FOR VGARC
|
||||
; https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:vgarc1:vgarc1home
|
||||
;
|
||||
; WRITTEN BY: WAYNE WARTHEN -- 5/1/2023
|
||||
;======================================================================
|
||||
;
|
||||
; TODO:
|
||||
;
|
||||
;======================================================================
|
||||
; VGARC DRIVER - CONSTANTS
|
||||
;======================================================================
|
||||
;
|
||||
VRC_BASE .EQU $00 ; FIRST CHAR DATA PORT
|
||||
VRC_FONTBASE .EQU VRC_BASE + $0C ; FIRST FONT PORT
|
||||
VRC_SCROLLIO .EQU $F5 ; SCROLL REG PORT
|
||||
;
|
||||
VRC_KBDDATA .EQU $F4
|
||||
VRC_KBDST .EQU $F5
|
||||
;
|
||||
VRC_ROWS .EQU 48
|
||||
VRC_COLS .EQU 64
|
||||
;
|
||||
#DEFINE USEFONTVGARC
|
||||
#DEFINE VRC_FONT FONTVGARC
|
||||
;
|
||||
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
|
||||
;
|
||||
;======================================================================
|
||||
; VRC DRIVER - INITIALIZATION
|
||||
;======================================================================
|
||||
;
|
||||
VRC_INIT:
|
||||
LD IY,VRC_IDAT ; POINTER TO INSTANCE DATA
|
||||
;
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("VRC: IO=0x$")
|
||||
LD A,VRC_BASE
|
||||
CALL PRTHEXBYTE
|
||||
CALL VRC_PROBE ; CHECK FOR HW PRESENCE
|
||||
JR Z,VRC_INIT1 ; CONTINUE IF HW PRESENT
|
||||
;
|
||||
; HARDWARE NOT PRESENT
|
||||
PRTS(" NOT PRESENT$")
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET
|
||||
;
|
||||
VRC_INIT1:
|
||||
; RECORD DRIVER ACTIVE
|
||||
OR $FF
|
||||
LD (VRC_ACTIVE),A
|
||||
; DISPLAY CONSOLE DIMENSIONS
|
||||
LD A,VRC_COLS
|
||||
CALL PC_SPACE
|
||||
CALL PRTDECB
|
||||
LD A,'X'
|
||||
CALL COUT
|
||||
LD A,VRC_ROWS
|
||||
CALL PRTDECB
|
||||
PRTS(" TEXT$")
|
||||
|
||||
; HARDWARE INITIALIZATION
|
||||
CALL VRC_CRTINIT ; SETUP THE VGARC CHIP REGISTERS
|
||||
CALL VRC_LOADFONT ; LOAD FONT DATA FROM ROM TO VGARC STORAGE
|
||||
CALL VRC_VDARES ; RESET
|
||||
CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER
|
||||
|
||||
; ADD OURSELVES TO VDA DISPATCH TABLE
|
||||
LD BC,VRC_FNTBL ; BC := FUNCTION TABLE ADDRESS
|
||||
LD DE,VRC_IDAT ; DE := VGARC INSTANCE DATA PTR
|
||||
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD C,A ; C := ASSIGNED VIDEO DEVICE NUM
|
||||
LD DE,VRC_FNTBL ; DE := FUNCTION TABLE ADDRESS
|
||||
LD HL,VRC_IDAT ; HL := VGARC INSTANCE DATA PTR
|
||||
CALL TERM_ATTACH ; DO IT
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; VGARC DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
VRC_FNTBL:
|
||||
.DW VRC_VDAINI
|
||||
.DW VRC_VDAQRY
|
||||
.DW VRC_VDARES
|
||||
.DW VRC_VDADEV
|
||||
.DW VRC_VDASCS
|
||||
.DW VRC_VDASCP
|
||||
.DW VRC_VDASAT
|
||||
.DW VRC_VDASCO
|
||||
.DW VRC_VDAWRC
|
||||
.DW VRC_VDAFIL
|
||||
.DW VRC_VDACPY
|
||||
.DW VRC_VDASCR
|
||||
.DW KBD_STAT
|
||||
.DW KBD_FLUSH
|
||||
.DW KBD_READ
|
||||
.DW VRC_VDARDC
|
||||
#IF (($ - VRC_FNTBL) != (VDA_FNCNT * 2))
|
||||
.ECHO "*** INVALID VRC FUNCTION TABLE ***\n"
|
||||
!!!!!
|
||||
#ENDIF
|
||||
|
||||
VRC_VDAINI:
|
||||
; RESET VDA
|
||||
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
|
||||
CALL VRC_VDARES ; RESET VDA
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,VRC_ROWS ; ROWS
|
||||
LD E,VRC_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDARES:
|
||||
XOR A ; CLEAR ATTRIBUTES (REV VIDEO OFF)
|
||||
LD (VRC_ATTR),A ; SAVE IT
|
||||
DEC A ; INIT CUR NESTING, INIT TO HIDDEN
|
||||
LD (VRC_CURSOR),A ; SAVE IT
|
||||
LD HL,0 ; ZERO THE SCROLL OFFSET
|
||||
LD (VRC_OFF),HL ; SAVE VALUE
|
||||
XOR A ; ZERO
|
||||
LD (VRC_LOFF),A ; SCROLL OFFSET (LINES)
|
||||
LD A,' ' ; BLANK THE SCREEN
|
||||
LD DE,VRC_ROWS*VRC_COLS ; FILL ENTIRE BUFFER
|
||||
CALL VRC_FILL ; DO IT
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL VRC_XY ; SEND CURSOR TO TOP LEFT
|
||||
CALL VRC_SHOWCUR ; NOW SHOW THE CURSOR
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDADEV:
|
||||
LD D,VDADEV_VRC ; D := DEVICE TYPE
|
||||
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,VRC_BASE ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDASCS:
|
||||
SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED (YET)
|
||||
RET
|
||||
|
||||
VRC_VDASCP:
|
||||
CALL VRC_XY ; SET CURSOR POSITION
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDASAT:
|
||||
; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK)
|
||||
;
|
||||
; ALL WE SUPPORT IS REVERSE. MOVE BIT TO BIT 7 OF ATTR BYTE
|
||||
LD A,E ; GET ATTR VALUE
|
||||
RRCA ; ROTATE TO BIT 7
|
||||
RRCA
|
||||
RRCA
|
||||
AND $80 ; ENSURE ONLY BIT 7
|
||||
LD (VRC_ATTR),A ; SAVE IT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; DONE
|
||||
|
||||
VRC_VDASCO:
|
||||
; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED)
|
||||
;
|
||||
; NONE SUPPORTED, IGNORE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; DONE
|
||||
|
||||
VRC_VDAWRC:
|
||||
LD A,E ; CHARACTER TO WRITE GOES IN A
|
||||
CALL VRC_PUTCHAR ; PUT IT ON THE SCREEN
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDAFIL:
|
||||
LD A,E ; FILL CHARACTER GOES IN A
|
||||
EX DE,HL ; FILL LENGTH GOES IN DE
|
||||
CALL VRC_FILL ; DO THE FILL
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDACPY:
|
||||
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS VRC_POS
|
||||
; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT
|
||||
PUSH HL ; SAVE LENGTH
|
||||
CALL VRC_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL
|
||||
POP BC ; RECOVER LENGTH IN BC
|
||||
LD DE,(VRC_POS) ; PUT DEST IN DE
|
||||
JP VRC_BLKCPY ; DO A BLOCK COPY
|
||||
|
||||
VRC_VDASCR:
|
||||
LD A,E ; LOAD E INTO A
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; IF ZERO, WE ARE DONE
|
||||
PUSH DE ; SAVE E
|
||||
JP M,VRC_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL
|
||||
CALL VRC_SCROLL ; SCROLL FORWARD ONE LINE
|
||||
POP DE ; RECOVER E
|
||||
DEC E ; DECREMENT IT
|
||||
JR VRC_VDASCR ; LOOP
|
||||
VRC_VDASCR1:
|
||||
CALL VRC_RSCROLL ; SCROLL REVERSE ONE LINE
|
||||
POP DE ; RECOVER E
|
||||
INC E ; INCREMENT IT
|
||||
JR VRC_VDASCR ; LOOP
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; READ VALUE AT CURRENT VDU BUFFER POSITION
|
||||
; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES
|
||||
;----------------------------------------------------------------------
|
||||
|
||||
VRC_VDARDC:
|
||||
OR $FF ; UNSUPPORTED FUNCTION
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; VGARC DRIVER - PRIVATE DRIVER FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; PROBE FOR VGARC HARDWARE
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
|
||||
;
|
||||
VRC_PROBE:
|
||||
LD C,VRC_BASE + 1 ; +1 AVOIDS LEDS
|
||||
LD B,$00
|
||||
LD A,$AA
|
||||
OUT (C),A
|
||||
INC B
|
||||
LD A,$55
|
||||
OUT (C),A
|
||||
DEC B
|
||||
IN A,(C)
|
||||
CP $AA
|
||||
RET NZ
|
||||
INC B
|
||||
IN A,(C)
|
||||
CP $55
|
||||
RET
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; CRTC DISPLAY CONTROLLER CHIP INITIALIZATION
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_CRTINIT:
|
||||
XOR A ; ZERO ACCUM
|
||||
LD A,$80 ; ACTIVATE AND ZERO HW SCROLL
|
||||
OUT (VRC_SCROLLIO),A ; RESET HW SCROLL
|
||||
RET ; DONE
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; LOAD FONT DATA
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_LOADFONT:
|
||||
;
|
||||
#IF USELZSA2
|
||||
LD (VRC_STACK),SP ; SAVE STACK
|
||||
LD HL,(VRC_STACK) ; AND SHIFT IT
|
||||
LD DE,$2000 ; DOWN 4KB TO
|
||||
OR A ; CREATE A
|
||||
SBC HL,DE ; DECOMPRESSION BUFFER
|
||||
LD SP,HL ; HL POINTS TO BUFFER
|
||||
EX DE,HL ; START OF STACK BUFFER
|
||||
PUSH DE ; SAVE IT
|
||||
LD HL,VRC_FONT ; START OF FONT DATA
|
||||
CALL DLZSA2 ; DECOMPRESS TO DE
|
||||
POP HL ; RECALL STACK BUFFER POSITION
|
||||
#ELSE
|
||||
LD HL,VRC_FONT ; START OF FONT DATA
|
||||
#ENDIF
|
||||
;
|
||||
#IF 0
|
||||
; THIS APPROACH TO LOADING FONTS IS BEST (FASTEST), BUT IS
|
||||
; CAUSING ARTIFACTS ON THE DISPLAYED FONTS WHEN RUN ON A
|
||||
; Z280. IT IS NOT CLEAR WHAT THE PROBLEM IS (POSSIBLY
|
||||
; Z280 BUG), BUT FOR NOW WE AVOID THIS AND USE AN
|
||||
; ALTERNATIVE APPROACH BELOW.
|
||||
LD DE,0+(128*8)-1 ; LENGTH OF FONT DATA - 1
|
||||
ADD HL,DE ; ADD TO HL
|
||||
LD BC,VRC_FONTBASE+3 ; WORK BACKWARDS
|
||||
OTDR ; DO 4 PAGES
|
||||
DEC C
|
||||
OTDR
|
||||
DEC C
|
||||
OTDR
|
||||
DEC C
|
||||
OTDR
|
||||
DEC C
|
||||
#ENDIF
|
||||
;
|
||||
#IF 1
|
||||
; ALTERNATIVE APPROACH TO LOADING FONTS. THIS ONE AVOIDS
|
||||
; THE USE OF OTDR WHICH SEEMS TO CAUSE PROBLEMS ON Z280.
|
||||
LD B,0
|
||||
LD C,VRC_FONTBASE
|
||||
VRC_LOADFONT1:
|
||||
LD A,(HL)
|
||||
OUT (C),A
|
||||
INC HL
|
||||
INC B
|
||||
JR NZ,VRC_LOADFONT1
|
||||
INC C
|
||||
LD A,C
|
||||
CP VRC_FONTBASE + 4
|
||||
JR NZ,VRC_LOADFONT1
|
||||
#ENDIF
|
||||
;
|
||||
#IF USELZSA2
|
||||
LD HL,(VRC_STACK) ; ERASE DECOMPRESS BUFFER
|
||||
LD SP,HL ; BY RESTORING THE STACK
|
||||
RET ; DONE
|
||||
VRC_STACK .DW 0
|
||||
#ELSE
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_XY:
|
||||
PUSH DE ; SAVE NEW POSITION FOR NOW
|
||||
CALL VRC_HIDECUR ; HIDE THE CURSOR
|
||||
POP DE ; RECOVER INCOMING ROW/COL
|
||||
CALL VRC_XY2IDX ; CONVERT ROW/COL TO BUF IDX
|
||||
LD (VRC_POS),HL ; SAVE THE RESULT (DISPLAY POSITION)
|
||||
JP VRC_SHOWCUR ; SHOW THE CURSOR AND EXIT
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL
|
||||
; D=ROW, E=COL
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_XY2IDX:
|
||||
LD A,E ; SAVE COLUMN NUMBER IN A
|
||||
LD H,D ; SET H TO ROW NUMBER
|
||||
LD E,VRC_COLS ; SET E TO ROW LENGTH
|
||||
CALL MULT8 ; MULTIPLY TO GET ROW OFFSET, H * E = HL, E=0, B=0
|
||||
LD E,A ; GET COLUMN BACK
|
||||
ADD HL,DE ; ADD IT IN
|
||||
|
||||
LD DE,(VRC_OFF) ; SCREEN OFFSET
|
||||
ADD HL,DE ; ADJUST
|
||||
;
|
||||
PUSH HL ; SAVE IT
|
||||
LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,DE ; SUBTRACT FROM HL
|
||||
JR C,VRC_XY2IDX1 ; BYPASS IF NO WRAP
|
||||
POP DE ; THROW AWAY TOS
|
||||
RET ; DONE
|
||||
VRC_XY2IDX1:
|
||||
POP HL ; NO WRAP, RESTORE
|
||||
RET ; RETURN
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; SHOW OR HIDE CURSOR
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
; VGARC USES HIGH BIT OF CHAR VALUE FOR INVERSE VIDEO. WE HAVE NO
|
||||
; HARDWARE CURSOR, SO WE LEVERAGE THE INVERSE VIDEO TO SHOW A CURSOR.
|
||||
; SINCE ANY OPERATION THAT POTENTIALLY OVERWERITES THE CURSOR POSITION
|
||||
; COULD DESTROY THE CURSOR, WE HAVE A COUPLE FUNCTIONS TO SHOW AND
|
||||
; HIDE THE CURSOR. A VARIABLE IS USED TO TRACK THE SHOW/HIDE
|
||||
; OPERATIONS BECAUSE WE MAY HAVE NESTED CALLS. ZERO MEANS SHOW
|
||||
; REAL CURSOR. ANY VALUE LESS THAN ZERO MEANS HIDDEN.
|
||||
;
|
||||
VRC_SHOWCUR:
|
||||
LD A,(VRC_CURSOR) ; GET CURRENT NESTING VALUE
|
||||
INC A ; INCREMENT TO SHOW
|
||||
LD (VRC_CURSOR),A ; SAVE IT
|
||||
RET NZ ; ALREADY SHOWN, NOTHING TO DO
|
||||
;
|
||||
; WE TRANSITIONED FROM NON-ZERO TO ZERO. NEED TO ACTUALLY
|
||||
; SHOW THE CURSOR NOW.
|
||||
;
|
||||
JR VRC_FLIPCUR
|
||||
;
|
||||
VRC_HIDECUR:
|
||||
LD A,(VRC_CURSOR) ; GET CURRENT NESTING VALUE
|
||||
DEC A ; DECREMENT TO HIDE
|
||||
LD (VRC_CURSOR),A ; SAVE IT
|
||||
INC A ; BACK TO ORIGINAL VALUE
|
||||
RET NZ ; ALREADY HIDDEN, NOTHING TO DO
|
||||
;
|
||||
; WE TRANSITIONED FROM ZERO TO NEGATIVE. NEED TO ACTUALLY
|
||||
; HIDE THE CURSOR NOW. SINCE SHOWING AND HIDING ARE THE
|
||||
; SAME OPERATION (FLIP REV VID BIT), WE REUSE CODE ABOVE.
|
||||
;
|
||||
JR VRC_FLIPCUR
|
||||
;
|
||||
VRC_FLIPCUR:
|
||||
; SHOWING OR HIDING THE CURSOR IS THE SAME OPERATION.
|
||||
; SO WE USE COMMON CODE TO FLIP THE REV VID BIT.
|
||||
LD HL,(VRC_POS) ; CURSOR POSITION
|
||||
LD B,L ; INVERT FOR I/O
|
||||
LD C,H
|
||||
IN A,(C) ; GET VALUE
|
||||
XOR $80 ; FLIP REV VID BIT
|
||||
OUT (C),A ; WRITE NEW VALUE
|
||||
RET
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_PUTCHAR:
|
||||
; WRITE CHAR AT CURRENT CURSOR POSITION. SINCE THE CURSOR
|
||||
; IS JUST THE HIGH BIT (REV VIDEO), WE FIRST TURN OFF THE
|
||||
; CURSOR, WRITE THE CHAR, UPDATE THE CURSOR POSITION, AND
|
||||
; FINALLY TURN THE CURSOR BACK ON AT THE NEW POSITION.
|
||||
;
|
||||
PUSH AF ; SAVE INCOMING CHAR
|
||||
CALL VRC_HIDECUR ; HIDE CURSOR
|
||||
POP AF
|
||||
LD HL,(VRC_POS) ; GET CUR BUF POSITION
|
||||
LD B,L ; INVERT FOR I/O
|
||||
LD C,H
|
||||
AND $7F ; SUPPRESS ATTRIBUTE (HI BIT)
|
||||
LD L,A ; PUT VALUE IN L
|
||||
LD A,(VRC_ATTR) ; GET CURRENT ATTRIBUTE
|
||||
OR L ; COMBINE WITH CHAR VALUE
|
||||
OUT (C),A ; WRITE VALUE TO BUFFER
|
||||
;
|
||||
; SET CURSOR AT NEW POSITION
|
||||
LD HL,(VRC_POS) ; GET CURRENT BUF OFFSET
|
||||
INC HL ; INCREMENT
|
||||
PUSH HL ; SAVE IT
|
||||
LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,DE ; SUBTRACT FROM HL
|
||||
JR C,VRC_PUTCHAR1 ; BYPASS IF NO WRAP
|
||||
POP DE ; THROW AWAY TOS
|
||||
LD HL,0 ; BACK TO START
|
||||
JR VRC_PUTCHAR2 ; CONTINUE
|
||||
VRC_PUTCHAR1:
|
||||
POP HL ; NO WRAP, RESTORE
|
||||
VRC_PUTCHAR2:
|
||||
LD (VRC_POS),HL ; SAVE NEW POSITION
|
||||
JP VRC_SHOWCUR ; SHOW IT AND RETURN
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE
|
||||
; STARTING AT THE CURRENT FRAME BUFFER POSITION
|
||||
; A: FILL CHARACTER
|
||||
; DE: NUMBER OF CHARACTERS TO FILL
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_FILL:
|
||||
LD (VRC_FILL1+1),A ; SAVE FILL CHAR
|
||||
PUSH DE ; SAVE INCOMING DE
|
||||
CALL VRC_HIDECUR ; HIDE CURSOR
|
||||
POP DE ; RESTORE INCOMING DE
|
||||
LD HL,(VRC_POS) ; STARTING POSITION
|
||||
;
|
||||
VRC_FILL1:
|
||||
LD A,$FF ; FILL CHAR
|
||||
LD B,L ; INVERT FOR I/O
|
||||
LD C,H
|
||||
OUT (C),A ; PUT CHAR TO BUF
|
||||
;
|
||||
DEC DE ; DECREMENT COUNT
|
||||
LD A,D ; TEST FOR ZERO
|
||||
OR E
|
||||
JP Z,VRC_SHOWCUR ; EXIT VIA SHOW CURSOR IF DONE
|
||||
;
|
||||
INC HL ; INCREMENT
|
||||
PUSH HL ; SAVE IT
|
||||
LD BC,VRC_ROWS * VRC_COLS ; BC := BUF SIZE
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,BC ; SUBTRACT FROM HL
|
||||
JR C,VRC_FILL2 ; BYPASS IF NO WRAP
|
||||
POP BC ; THROW AWAY TOS
|
||||
LD HL,0 ; BACK TO START
|
||||
JR VRC_FILL3 ; CONTINUE
|
||||
VRC_FILL2:
|
||||
POP HL ; NO WRAP, RESTORE
|
||||
VRC_FILL3:
|
||||
LD (VRC_POS),HL ; SAVE NEW POSITION
|
||||
JR VRC_FILL1 ; LOOP TILL DONE
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED)
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_SCROLL:
|
||||
; SCROLL DOWN 1 LINE VIA HARDWARE
|
||||
CALL VRC_HIDECUR ; SUPPRESS CURSOR
|
||||
LD A,(VRC_LOFF) ; GET LINE OFFSET
|
||||
INC A ; BUMP
|
||||
CP VRC_ROWS ; OVERFLOW?
|
||||
JR C,VRC_SCROLL1 ; IF NOT, SKIP
|
||||
XOR A ; ELSE, BACK TO ZERO
|
||||
VRC_SCROLL1:
|
||||
LD (VRC_LOFF),A ; SAVE NEW VALUE
|
||||
OR $80 ; SET HW SCROLL ENABLE BIT
|
||||
OUT (VRC_SCROLLIO),A ; DO IT
|
||||
;
|
||||
; ADJUST BUFFER OFFSET
|
||||
LD HL,(VRC_OFF) ; BUFFER OFFSET
|
||||
LD DE,VRC_COLS ; COLUMNS
|
||||
ADD HL,DE ; ADD TO GET NEW OFFSET
|
||||
PUSH HL ; SAVE IT
|
||||
LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,DE ; SUBTRACT FROM HL
|
||||
JR C,VRC_SCROLL2 ; BYPASS IF NO WRAP
|
||||
POP DE ; BURN TOS
|
||||
JR VRC_SCROLL3 ; CONTINUE
|
||||
VRC_SCROLL2:
|
||||
POP HL ; NO WRAP, RESTORE HL
|
||||
VRC_SCROLL3:
|
||||
LD (VRC_OFF),HL ; SAVE NEW OFFSET
|
||||
;
|
||||
; FILL EXPOSED LINE
|
||||
LD HL,(VRC_POS) ; GET CURSOR POS
|
||||
PUSH HL ; SAVE IT
|
||||
LD D,VRC_ROWS - 1 ; LAST ROW
|
||||
LD E,0 ; FIRST COLUMN
|
||||
CALL VRC_XY2IDX ; HL = START OF LAST LINE
|
||||
LD (VRC_POS),HL ; SET FILL POSITION
|
||||
LD A,' ' ; FILL WITH BLANKS
|
||||
LD DE,VRC_COLS ; FILL ONE LINE
|
||||
CALL VRC_FILL ; FILL LAST LINE
|
||||
POP HL ; RECOVER CURSOR POS
|
||||
LD (VRC_POS),HL ; PUT VALUE BACK
|
||||
;
|
||||
; ADJUST CURSOR POSITION
|
||||
LD HL,(VRC_POS) ; CURSOR POSITION
|
||||
LD DE,VRC_COLS ; COLUMNS
|
||||
ADD HL,DE ; NEW CURSOR POS
|
||||
PUSH HL ; SAVE IT
|
||||
LD DE,VRC_ROWS * VRC_COLS ; DE := DISPLAY SIZE
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,DE ; SUBTRACT FROM HL
|
||||
JR C,VRC_SCROLL4 ; BYPASS IF NO WRAP
|
||||
POP DE ; BURN TOS
|
||||
JR VRC_SCROLL5 ; CONTINUE
|
||||
VRC_SCROLL4:
|
||||
POP HL ; NO WRAP, RESTORE HL
|
||||
VRC_SCROLL5:
|
||||
LD (VRC_POS),HL ; SAVE NEW CURSOR POS
|
||||
JP VRC_SHOWCUR ; EXIT VIA SHOW CURSOR
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED)
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_RSCROLL:
|
||||
; SCROLL UP 1 LINE VIA HARDWARE
|
||||
CALL VRC_HIDECUR ; SUPPRESS CURSOR
|
||||
LD A,(VRC_LOFF) ; GET LINE OFFSET
|
||||
DEC A ; BUMP
|
||||
CP $FF ; OVERFLOW?
|
||||
JR NZ,VRC_RSCROLL1 ; IF NOT, SKIP
|
||||
LD A,VRC_ROWS - 1 ; ELSE, BACK TO LAST ROW
|
||||
VRC_RSCROLL1:
|
||||
LD (VRC_LOFF),A ; SAVE NEW VALUE
|
||||
OR $80 ; SET HW SCROLL ENABLE BIT
|
||||
OUT (VRC_SCROLLIO),A ; DO IT
|
||||
;
|
||||
; ADJUST BUFFER OFFSET
|
||||
LD HL,(VRC_OFF) ; BUFFER OFFSET
|
||||
LD DE,VRC_COLS ; COLUMNS
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,DE ; SUBTRACT TO GET NEW OFFSET
|
||||
PUSH HL ; SAVE IT
|
||||
JR NC,VRC_RSCROLL2 ; BYPASS IF NO WRAP
|
||||
LD DE,VRC_ROWS * VRC_COLS ; DISPLAY SIZE
|
||||
ADD HL,DE ; HANDLE WRAP
|
||||
POP DE ; BURN TOS
|
||||
JR VRC_RSCROLL3 ; CONTINUE
|
||||
VRC_RSCROLL2:
|
||||
POP HL ; NO WRAP, RESTORE HL
|
||||
VRC_RSCROLL3:
|
||||
LD (VRC_OFF),HL ; SAVE NEW OFFSET
|
||||
;
|
||||
; FILL EXPOSED LINE
|
||||
LD HL,(VRC_POS) ; GET CURSOR POS
|
||||
PUSH HL ; SAVE IT
|
||||
LD D,0 ; FIRST ROW
|
||||
LD E,0 ; FIRST COLUMN
|
||||
CALL VRC_XY2IDX ; HL = START OF FIRST LINE
|
||||
LD (VRC_POS),HL ; SET FILL POSITION
|
||||
LD A,' ' ; FILL WITH BLANKS
|
||||
LD DE,VRC_COLS ; FILL ONE LINE
|
||||
CALL VRC_FILL ; FILL FIRST LINE
|
||||
POP HL ; RECOVER CURSOR POS
|
||||
LD (VRC_POS),HL ; PUT VALUE BACK
|
||||
;
|
||||
; ADJUST CURSOR POSITION
|
||||
LD HL,(VRC_POS) ; CURSOR POSITION
|
||||
LD DE,VRC_COLS ; COLUMNS
|
||||
OR A ; CLEAR CARRY
|
||||
SBC HL,DE ; NEW CURSOR POS
|
||||
PUSH HL ; SAVE IT
|
||||
JR NC,VRC_RSCROLL4 ; BYPASS IF NO WRAP
|
||||
LD DE,VRC_ROWS * VRC_COLS ; DISPLAY SIZE
|
||||
ADD HL,DE ; HANDLE WRAP
|
||||
POP DE ; BURN TOS
|
||||
JR VRC_RSCROLL5 ; CONTINUE
|
||||
VRC_RSCROLL4:
|
||||
POP HL ; NO WRAP, RESTORE HL
|
||||
VRC_RSCROLL5:
|
||||
LD (VRC_POS),HL ; SAVE NEW CURSOR POS
|
||||
JP VRC_SHOWCUR ; EXIT VIA SHOW CURSOR
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; BLOCK COPY BC BYTES FROM HL TO DE
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VRC_BLKCPY:
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
CALL VRC_HIDECUR
|
||||
POP HL
|
||||
POP BC
|
||||
;
|
||||
VRC_BLKCPY1:
|
||||
LD A,B
|
||||
OR C
|
||||
JP Z,VRC_SHOWCUR ; EXIT VIA SHOW CURSOR
|
||||
;
|
||||
PUSH BC ; SAVE LOOP CTL
|
||||
LD B,L ; INVERT FOR I/O
|
||||
LD C,H
|
||||
IN A,(C) ; GET SOURCE CHAR
|
||||
LD B,E ; INVERT FOR I/O
|
||||
LD C,D
|
||||
OUT (C),A ; WRITE DEST CHAR
|
||||
POP BC ; RESTORE LOOP CTL
|
||||
;
|
||||
INC HL ; NEXT SRC CHAR
|
||||
INC DE ; NEXT DEST CHAR
|
||||
DEC BC ; DEC COUNT
|
||||
JR VRC_BLKCPY1 ; LOOP TILL DONE
|
||||
;
|
||||
;==================================================================================================
|
||||
; VGARC DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
VRC_ATTR .DB 0 ; CURRENT COLOR
|
||||
VRC_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
VRC_OFF .DW 0 ; SCREEN START OFFSET INTO DISP BUF
|
||||
VRC_LOFF .DB 0 ; LINE OFFSET INTO DISP BUF
|
||||
VRC_CURSOR .DB 0 ; CURSOR NESTING LEVEL
|
||||
VRC_ACTIVE .DB FALSE ; FLAG FOR DRIVER ACTIVE
|
||||
;
|
||||
;==================================================================================================
|
||||
; VGA DRIVER - INSTANCE DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
VRC_IDAT:
|
||||
.DB KBDMODE_VRC ; VGARC KEYBOARD CONTROLLER
|
||||
.DB VRC_KBDST
|
||||
.DB VRC_KBDDATA
|
||||
@@ -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.5"
|
||||
#DEFINE BIOSVER "3.3.0-dev.17"
|
||||
#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.5"
|
||||
db "3.3.0-dev.17"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user