mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-07 06:53:13 -06:00
Compare commits
52 Commits
v3.3.0-dev
...
v3.3.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22a0c52af3 | ||
|
|
85aa7e89c2 | ||
|
|
59d04f2446 | ||
|
|
9cc52e30d6 | ||
|
|
e1a4e815dc | ||
|
|
3c340d1ab9 | ||
|
|
138248fafc | ||
|
|
834eefb0bb | ||
|
|
7835eb5deb | ||
|
|
d1a5c66147 | ||
|
|
b184ccfb78 | ||
|
|
4776b32cd3 | ||
|
|
2bc5333f2b | ||
|
|
a5575456e2 | ||
|
|
bdb8dc020b | ||
|
|
faaba69554 | ||
|
|
0395bba4f5 | ||
|
|
14ac7a917b | ||
|
|
7a209d4053 | ||
|
|
7e5b140c2f | ||
|
|
1f1952fb19 | ||
|
|
229bdaa308 | ||
|
|
5c0894b8c1 | ||
|
|
9cefcfb0bc | ||
|
|
5d34a5c5d5 | ||
|
|
f8c800e527 | ||
|
|
b90e4d932a | ||
|
|
5457a7e7fd | ||
|
|
8f5cc510ee | ||
|
|
0475f5e853 | ||
|
|
5b7dee0689 | ||
|
|
6532f61747 | ||
|
|
4bdae4eccb | ||
|
|
efb9840b86 | ||
|
|
308a11cb32 | ||
|
|
3a7421de33 | ||
|
|
21a58397b6 | ||
|
|
9ae61806dc | ||
|
|
87ac6f07f8 | ||
|
|
1cd5313259 | ||
|
|
04c1ff04ac | ||
|
|
0e1a0afa2c | ||
|
|
5227bb68b5 | ||
|
|
fb68941768 | ||
|
|
8747ec8d02 | ||
|
|
abd939625f | ||
|
|
69716abb25 | ||
|
|
1f526d440a | ||
|
|
84374c86e6 | ||
|
|
45ea46b105 | ||
|
|
1333d6a491 | ||
|
|
b7e865dbf1 |
11
.github/pull_request_template.md
vendored
Normal file
11
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<!--
|
||||
BEFORE YOU CREATE A PULL REQUEST:
|
||||
|
||||
- Please base all pull requests against the dev branch
|
||||
- Include a clear description of your change
|
||||
- Reference related Issue(s) (e.g., "Resolves Issue #123")
|
||||
|
||||
Thank you for contributing to RomWBW! I will review your pull request as soon as possible.
|
||||
|
||||
DELETE EVERYTHING IN THIS COMMENT BLOCK AND REPLACE WITH YOUR COMMENTS
|
||||
-->
|
||||
@@ -39,8 +39,8 @@ image for the Mark IV with the standard configuration. If a custom
|
||||
configuration called "custom" is created and built, a new file called
|
||||
MK4_custom.rom will be added to this directory.
|
||||
|
||||
Documentation of the pre-built ROM Images is contained in the
|
||||
RomList.txt file in this directory.
|
||||
Documentation of the pre-built ROM Images is contained in
|
||||
"RomWBW User Guide.pdf" in the Doc directory.
|
||||
|
||||
ROM Firmware Update Images (<plt>_<cfg>.upd)
|
||||
-------------------------------------
|
||||
|
||||
BIN
Doc/Aztec_C_1.06_User_Manual_Mar84.pdf
Normal file
BIN
Doc/Aztec_C_1.06_User_Manual_Mar84.pdf
Normal file
Binary file not shown.
@@ -7,7 +7,18 @@ Version 3.3
|
||||
- WBW: Support per-drive floppy configuration
|
||||
- WBW: Support for Bill Shen's VGARC
|
||||
- WBW: Support for MG014 Parallel Port module + printer
|
||||
- WBW: Support for Zip Drive on emm interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for EMM Zip Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for PPA Zip Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for SyQuest SparQ Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for ATAPI Disk Drives (not CD-ROMs) on IDE and PPIDE interfaces
|
||||
- R?P: Added new disk images: Aztec C, MS BASIC Compiler, MS Fortran, Games, HiTech-C, Turbo Pascal, SLR Z80ASM
|
||||
- JBL: Added RCZ80 configuration for ColecoVision
|
||||
- WBW: Support for Z180 running interrupt mode 1
|
||||
- WBW: Preliminary support for S100 Computers Z180
|
||||
- WBW: Preliminary support for Dan Werner's ESP32 MBC Module
|
||||
- WBW: Early support for Duodyne base system (CPU/UART/ROM/RAM/RTC/SPK)
|
||||
- M?C: Fixed XM to allow specifying HBIOS port for send operations
|
||||
- WBW: Fix S100 Z180 LED operation (credit to Jay Cotton for finding this issue)
|
||||
|
||||
Version 3.2.1
|
||||
-------------
|
||||
|
||||
11351
Doc/HI-TECH Z80 C Compiler Manual.txt
Normal file
11351
Doc/HI-TECH Z80 C Compiler Manual.txt
Normal file
File diff suppressed because it is too large
Load Diff
4090
Doc/Microsoft_FORTRAN-80_Users_Manual_1977.pdf
Normal file
4090
Doc/Microsoft_FORTRAN-80_Users_Manual_1977.pdf
Normal file
File diff suppressed because one or more lines are too long
@@ -6,8 +6,8 @@
|
||||
*** ***
|
||||
***********************************************************************
|
||||
|
||||
This directory ("Doc") is part of the RomWBW System Software
|
||||
distribution archive. It contains documentation for components of
|
||||
This directory ("Doc") is part of the RomWBW System Software
|
||||
distribution archive. It contains documentation for components of
|
||||
the system.
|
||||
|
||||
ChangeLog.txt
|
||||
@@ -34,9 +34,9 @@ ROM Applications documents.
|
||||
CPM Manual ("CPM Manual.pdf")
|
||||
-----------------------------
|
||||
|
||||
The original DRI CP/M 2.x Operating System Manual. This should be
|
||||
considered the primary reference for system operation. The section
|
||||
on CP/M 2 Alteration can be ignored since this work has already been
|
||||
The original DRI CP/M 2.x Operating System Manual. This should be
|
||||
considered the primary reference for system operation. The section
|
||||
on CP/M 2 Alteration can be ignored since this work has already been
|
||||
completed as part of the RomWBW distribution.
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ Manual for the DDTZ v2.7 debug tool included on the ROM drive.
|
||||
FDisk Manual ("FDisk Manual.pdf")
|
||||
---------------------------------
|
||||
|
||||
The operational manual for John Coffman's hard disk partitioning
|
||||
The operational manual for John Coffman's hard disk partitioning
|
||||
program. This program is included in RomWBW as FDISK80.
|
||||
|
||||
|
||||
@@ -78,9 +78,9 @@ NZCOM operating system operation manual.
|
||||
ZCPR Manual ("ZCPR Manual.pdf")
|
||||
-------------------------------
|
||||
|
||||
ZCPR is the command proccessor portion of Z-System. This is the
|
||||
manual for ZCPR 1.x as included in RomWBW. The installation
|
||||
instructions can be ignored since that work has already been
|
||||
ZCPR is the command proccessor portion of Z-System. This is the
|
||||
manual for ZCPR 1.x as included in RomWBW. The installation
|
||||
instructions can be ignored since that work has already been
|
||||
completed as part of the RomWBW distribution.
|
||||
|
||||
ZCPR D&J Manual ("ZCPR-DJ.doc")
|
||||
@@ -92,9 +92,9 @@ ZCPR D&J User Manual. This manual supplements the ZCPR Manual.
|
||||
ZSDOS Manual ("ZSDOS Manual.pdf")
|
||||
---------------------------------
|
||||
|
||||
ZSDOS is the DOS portion of Z-System. This is the manual for ZSDOS
|
||||
1.x as included in RomWBW. The installation instructions can be
|
||||
ignored since that work has already been completed as part of the
|
||||
ZSDOS is the DOS portion of Z-System. This is the manual for ZSDOS
|
||||
1.x as included in RomWBW. The installation instructions can be
|
||||
ignored since that work has already been completed as part of the
|
||||
RomWBW distribution.
|
||||
|
||||
Microsoft Basic-80 Reference Manual v5.0 (Microsoft Basic-80 Reference Manual v5.0.pdf)
|
||||
@@ -110,7 +110,6 @@ QP/M 2.7 Features and Facilities ("qcp27.pdf")
|
||||
|
||||
Official documentation set for QP/M 2.7 from original QP/M distribution.
|
||||
|
||||
|
||||
SIO+CTC Baud Rate Options (SIO+CTC Baud Rate Options.pdf)
|
||||
---------------------------------------------------------
|
||||
|
||||
@@ -133,4 +132,37 @@ UCSD p-System Users Manual ("UCSD p-System Users Manual.pdf")
|
||||
Official user manual for p-System operating system included with
|
||||
RomWBW.
|
||||
|
||||
--WBW 5:18 PM 3/16/2023
|
||||
|
||||
Z80 Assembler User Manual (z80asm (SLR Systems).pdf)
|
||||
----------------------------------------------------
|
||||
|
||||
Official user manual for the Z80 Macro Assembler by SLR Systems
|
||||
included in the z80asm disk image.
|
||||
|
||||
|
||||
HI-TECH C Compiler User Manual (HI-TECH Z80 C Compiler Manual.txt)
|
||||
------------------------------------------------------------------
|
||||
|
||||
Official user manual for the HI-TECH C Compiler included in the
|
||||
hitechc disk image.
|
||||
|
||||
|
||||
Borland TurboPascal User Manual (Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf)
|
||||
------------------------------------------------------------------------------------
|
||||
|
||||
Official user manual Borland TurboPascal included in the pascal disk image.
|
||||
|
||||
|
||||
Aztec C Compiler User Manual (Aztec_C_1.06_User_Manual_Mar84.pdf)
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Official user manual for the Aztec C Compiler included in the aztecc disk image.
|
||||
|
||||
|
||||
FORTRAN-80 User Manual (Microsoft_FORTRAN-80_Users_Manual_1977.pdf)
|
||||
---------------------------------------------------------------
|
||||
|
||||
Official user manual for Microsoft's FORTRAN-80 compiler included in the fortran
|
||||
disk image.
|
||||
|
||||
--WBW 5:18 PM 6/14/2023
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
49495
Doc/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf
Normal file
49495
Doc/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf
Normal file
File diff suppressed because one or more lines are too long
BIN
Doc/z80asm (SLR Systems).pdf
Normal file
BIN
Doc/z80asm (SLR Systems).pdf
Normal file
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
**RomWBW ReadMe** \
|
||||
Version 3.3 \
|
||||
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
|
||||
23 May 2023
|
||||
08 Aug 2023
|
||||
|
||||
# Overview
|
||||
|
||||
@@ -183,6 +183,10 @@ let me know if I missed you!
|
||||
|
||||
- The RomWBW Disk Catalog document was produced by Mykl Orders.
|
||||
|
||||
- Rob Prouse has created many of the supplemental disk images including
|
||||
Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft BASIC Compiler,
|
||||
Microsoft Fortran Compiler, and a Games compendium.
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
|
||||
# Licensing
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
RomWBW ReadMe
|
||||
Wayne Warthen (wwarthen@gmail.com)
|
||||
23 May 2023
|
||||
08 Aug 2023
|
||||
|
||||
|
||||
|
||||
@@ -185,6 +185,10 @@ let me know if I missed you!
|
||||
|
||||
- The RomWBW Disk Catalog document was produced by Mykl Orders.
|
||||
|
||||
- Rob Prouse has created many of the supplemental disk images
|
||||
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft
|
||||
BASIC Compiler, Microsoft Fortran Compiler, and a Games compendium.
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
|
||||
|
||||
|
||||
@@ -12,12 +12,26 @@ DMAMODE_Z180 .EQU 2 ; Z180 INTEGRATED DMA
|
||||
DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA
|
||||
DMAMODE_RC .EQU 4 ; RCBUS Z80 DMA
|
||||
DMAMODE_MBC .EQU 5 ; MBC
|
||||
DMAMODE_VDG .EQU 6 ; VELESOFT DATAGEAR
|
||||
DMAMODE_DUO .EQU 6 ; DUO
|
||||
DMAMODE_VDG .EQU 7 ; VELESOFT DATAGEAR
|
||||
;
|
||||
DMAMODE .EQU DMAMODE_DUO ; SELECT DMA DEVICE FOR TESTING
|
||||
;
|
||||
;==================================================================================================
|
||||
; SOME DEFAULT PLATFORM CONFIGURATIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_MBC ; SELECT DMA DEVICE FOR TESTING
|
||||
DMALATCH .EQU DMABASE+1 ; DMA: DMA LATCH ADDRESS
|
||||
DMAIOTST .EQU $68 ; AN OUTPUT PORT FOR TESTING - 16C450 SERIAL OUT
|
||||
;
|
||||
#IF (DMAMODE==DMAMODE_DUO)
|
||||
DMABASE .SET $40 ; DMA: DMA0 BASE ADDRESS
|
||||
;DMABASE .SET $41 ; DMA: DMA1 BASE ADDRESS
|
||||
DMALATCH .SET $43 ; DMA: DMA LATCH ADDRESS
|
||||
DMAIOTST .SET $58 ; AN OUTPUT PORT FOR TESTING - 16C450 SERIAL OUT
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; HELPER MACROS AND EQUATES
|
||||
;==================================================================================================
|
||||
@@ -156,17 +170,17 @@ MENULP1:
|
||||
CP 'N'
|
||||
JP Z,DMATST_N ; MEMORY COPY ITER
|
||||
CP '0'
|
||||
JP Z,DMATST_01
|
||||
JP Z,DMATST_0 ; PULSE DMA PORT
|
||||
CP '1'
|
||||
JP Z,DMATST_1 ; PULSE LATCH PORT
|
||||
CP 'O'
|
||||
JP Z,DMATST_O
|
||||
#IF !(DMAMODE==DMAMODE_VDG)
|
||||
CP '1'
|
||||
JP Z,DMATST_01
|
||||
CP 'R'
|
||||
JP Z,DMATST_R ; TOGGLE RESET
|
||||
CP 'Y'
|
||||
JP Z,DMATST_Y ; TOGGLE READY
|
||||
#ENDIF
|
||||
JP Z,DMATST_Y
|
||||
cp 'L'
|
||||
jp z,DMACFG_L ; SET LATCH PORT
|
||||
cp 'S'
|
||||
jp z,DMACFG_S ; SET PORT
|
||||
cp 'V'
|
||||
@@ -197,12 +211,17 @@ DMABYE:
|
||||
;
|
||||
DMACFG_S:
|
||||
call PRTSTRD
|
||||
.db "\n\rSet port address\n\rPort:$"
|
||||
.db "\n\rSet DMA port address\n\rPort:$"
|
||||
call HEXIN
|
||||
ld hl,dmaport
|
||||
ld (hl),a
|
||||
inc hl
|
||||
inc a
|
||||
jp MENULP
|
||||
;
|
||||
DMACFG_L:
|
||||
call PRTSTRD
|
||||
.db "\n\rSet Latch port address\n\rPort:$"
|
||||
call HEXIN
|
||||
ld hl,dmalach
|
||||
ld (hl),a
|
||||
jp MENULP
|
||||
;
|
||||
@@ -234,11 +253,17 @@ DMATST_N:
|
||||
CALL DMAMemTestIter
|
||||
JP MENULP
|
||||
;
|
||||
DMATST_01:
|
||||
DMATST_0:
|
||||
call PRTSTRD
|
||||
.db "\n\rPerforming Port Selection Test\n\r$"
|
||||
CALL DMA_Port01
|
||||
JP MENULP
|
||||
.db "\n\rPerforming DMA Port Selection Test\n\r$"
|
||||
CALL DMA_Port0
|
||||
ret
|
||||
|
||||
DMATST_1:
|
||||
call PRTSTRD
|
||||
.db "\n\rPerforming Latch Port Selection Test\n\r$"
|
||||
CALL DMA_Port1
|
||||
ret
|
||||
;
|
||||
DMATST_O:
|
||||
call PRTSTRD
|
||||
@@ -255,7 +280,7 @@ DMATST_D:
|
||||
DMATST_Y:
|
||||
call PRTSTRD
|
||||
.db "\n\rPerforming Ready Bit Test\n\r$"
|
||||
CALL DMA_ReadyT
|
||||
CALL DMA_ReadyY
|
||||
JP MENULP
|
||||
;
|
||||
DMATST_R:
|
||||
@@ -289,6 +314,10 @@ DISPM: call PRTSTRD
|
||||
.db ", Port=0x$"
|
||||
LD A,(dmaport) ; DISPLAY
|
||||
CALL PRTHEXBYTE ; DMA PORT
|
||||
call PRTSTRD
|
||||
.db ", Latch Port=0x$"
|
||||
ld A,(dmalach)
|
||||
CALL PRTHEXBYTE ; DMA PORT
|
||||
;
|
||||
#IF (INTENABLE)
|
||||
;
|
||||
@@ -351,7 +380,7 @@ DMA_INIT:
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
#IF !(DMAMODE==DMAMODE_VDG)
|
||||
ld a,(dmautil)
|
||||
ld a,(dmalach)
|
||||
ld c,a
|
||||
LD A,DMA_FORCE
|
||||
out (c),a ; force ready off
|
||||
@@ -417,6 +446,7 @@ DMA_DEV_STR:
|
||||
.TEXT "Z280$"
|
||||
.TEXT "RCBUS$"
|
||||
.TEXT "MBC$"
|
||||
.TEXT "DUODYNE$"
|
||||
.TEXT "DATAGEAR$"
|
||||
;
|
||||
DMA_SPD_STR:
|
||||
@@ -483,7 +513,7 @@ DMABUF .TEXT "0123456789abcdef"
|
||||
DMA_ReadyO:
|
||||
call PRTSTRD
|
||||
.db "\r\nOutputing string to port 0x$"
|
||||
ld a,DMAIOTST
|
||||
ld a,(tstport)
|
||||
call PRTHEXBYTE
|
||||
call NEWLINE
|
||||
;
|
||||
@@ -491,7 +521,7 @@ DMA_ReadyO:
|
||||
IOLoop: push bc
|
||||
call NEWLINE
|
||||
ld hl,DMABUF
|
||||
ld a,DMAIOTST
|
||||
ld a,(tstport)
|
||||
ld bc,16
|
||||
;
|
||||
call DMAOTIR
|
||||
@@ -502,16 +532,17 @@ IOLoop: push bc
|
||||
ret
|
||||
;
|
||||
;==================================================================================================
|
||||
; PULSE PORT (COMMON ROUTINE WHERE A CONTAINS THE ASCII PORT OFFSET)
|
||||
; PULSE PORT
|
||||
;==================================================================================================
|
||||
;
|
||||
DMA_Port01:
|
||||
DMA_Port0:
|
||||
ld a,(dmaport)
|
||||
jr DMA_Port
|
||||
DMA_Port1:
|
||||
ld a,(dmalach)
|
||||
DMA_Port:
|
||||
call PRTSTRD
|
||||
.db "\r\nPulsing port 0x$"
|
||||
sub '0' ; Calculate
|
||||
ld c,a
|
||||
ld a,(dmaport) ; Port to
|
||||
add a,c
|
||||
call PRTHEXBYTE
|
||||
call NEWLINE
|
||||
ld c,a ; toggle
|
||||
@@ -543,12 +574,9 @@ dlylp: dec bc
|
||||
; TOGGLE READY BIT
|
||||
;==================================================================================================
|
||||
;
|
||||
DMA_ReadyT:
|
||||
DMA_ReadyY:
|
||||
call NEWLINE
|
||||
#IF !(DMAMODE==DMAMODE_VDG)
|
||||
|
||||
#ENDIF
|
||||
ld a,(dmautil)
|
||||
ld a,(dmalach)
|
||||
ld c,a ; toggle
|
||||
ld b,$20 ; loop counter
|
||||
portlp2:push bc
|
||||
@@ -558,14 +586,12 @@ portlp2:push bc
|
||||
.db ": ON$"
|
||||
call delay
|
||||
ld a,$FF
|
||||
; ld c,DMABASE+1
|
||||
out (c),a
|
||||
call PRTSTRD
|
||||
.db " -> OFF$"
|
||||
call delay
|
||||
call PRTSTRD
|
||||
.db "\r \r$"
|
||||
; ld c,DMABASE+1
|
||||
ld a,0
|
||||
out (c),a
|
||||
pop bc
|
||||
@@ -1169,8 +1195,9 @@ CST:
|
||||
USEINT .DB FALSE ; USE INTERRUPTS FLAG
|
||||
counter .dw 0
|
||||
dmaport .db DMABASE
|
||||
dmautil .db DMABASE+1
|
||||
dmalach .db DMALATCH
|
||||
dmaxfer .db DMA_XMODE
|
||||
tstport .db DMAIOTST
|
||||
dmavbs .db 0
|
||||
SAVSTK: .DW 2
|
||||
.FILL 64
|
||||
|
||||
@@ -5,12 +5,13 @@
|
||||
; MARCO MACCAFERRI, HTTPS://WWW.MACCASOFT.COM
|
||||
; HBIOS VERSION BY PHIL SUMMERS (B1ACKMAILER) DIFFICULTLEVELHIGH@GMAIL.COM
|
||||
;
|
||||
PCF .EQU 1
|
||||
P8X180 .EQU 0
|
||||
SC126 .EQU 0
|
||||
SC137 .EQU 0
|
||||
PCFECB .EQU 0
|
||||
PCFDUO .EQU 1
|
||||
P8X180 .EQU 0
|
||||
SC126 .EQU 0
|
||||
SC137 .EQU 0
|
||||
;
|
||||
#IF (PCF)
|
||||
#IF (PCFECB)
|
||||
I2C_BASE .EQU 0F0H
|
||||
PCF_ID .EQU 0AAH
|
||||
CPU_CLK .EQU 12
|
||||
@@ -20,6 +21,16 @@ PCF_RS1 .EQU PCF_RS0+1
|
||||
PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PCFDUO)
|
||||
I2C_BASE .EQU 056H
|
||||
PCF_ID .EQU 0AAH
|
||||
CPU_CLK .EQU 12
|
||||
;
|
||||
PCF_RS0 .EQU I2C_BASE
|
||||
PCF_RS1 .EQU PCF_RS0+1
|
||||
PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE
|
||||
#ENDIF
|
||||
;
|
||||
#IF (P8X180)
|
||||
I2C_BASE .EQU 0A0h
|
||||
_sda .EQU 0
|
||||
@@ -153,8 +164,11 @@ lp5f: ld a,(addr) ; next address
|
||||
jp 0
|
||||
|
||||
signon: .db "I2C Bus Scanner"
|
||||
#IF (PCF)
|
||||
.DB " - PCF8584"
|
||||
#IF (PCFECB)
|
||||
.DB " - PCF8584 (ECB)"
|
||||
#ENDIF
|
||||
#IF (PCFDUO)
|
||||
.DB " - PCF8584 (Duodyne)"
|
||||
#ENDIF
|
||||
#IF (SC126)
|
||||
.DB " - SC126"
|
||||
@@ -219,7 +233,7 @@ _cout: ; character
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
#IF (PCF)
|
||||
#IF (PCFECB | PCFDUO)
|
||||
_i2c_start:
|
||||
PCF_START:
|
||||
LD A,PCF_START_
|
||||
@@ -418,7 +432,7 @@ PCF_PINFAIL .DB "PIN FAIL$"
|
||||
PCF_BBFAIL .DB "BUS BUSY$"
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
#IF (PCF)
|
||||
#IF (PCFECB | PCFDUO)
|
||||
_i2c_stop:
|
||||
PCF_STOP:
|
||||
LD A,PCF_STOP_ ; issue
|
||||
|
||||
@@ -629,6 +629,9 @@ CFGTBL: ; PLT RSEL RDAT RIN Z180 ACR
|
||||
;
|
||||
.DB 13, $A0, $A1, $A0, $FF, $A2 ; MBC
|
||||
.DW HWSTR_MBC
|
||||
;
|
||||
.DB 17, $A0, $A1, $A0, $FF, $A2 ; DUODYNE
|
||||
.DW HWSTR_DUO
|
||||
;
|
||||
.DB $FF ; END OF TABLE MARKER
|
||||
;
|
||||
@@ -682,6 +685,7 @@ HWSTR_RCEB6 .DB "RCBus Sound Module (EBv6)",0
|
||||
HWSTR_RCMF .DB "RCBus Sound Module (MF)",0
|
||||
HWSTR_LINC .DB "Z50 LiNC Sound Module",0
|
||||
HWSTR_MBC .DB "NHYODYNE Sound Module",0
|
||||
HWSTR_DUO .DB "DUODYNE Sound Module",0
|
||||
|
||||
MSGUNSUP .db "MYM files not supported with HBIOS yet!\r\n", 0
|
||||
|
||||
|
||||
@@ -720,12 +720,17 @@ NOBYE: LXI H,FCB+1 ; Get primary option
|
||||
; Send option processor
|
||||
; Single option: "K" - force 1k mode
|
||||
;
|
||||
INX H ; Look for a 'K'
|
||||
CALL SNDOPC
|
||||
CALL SNDOPC
|
||||
JMP ALLSET
|
||||
SNDOPC:INX H ; Look for an option
|
||||
MOV A,M
|
||||
CPI ' ' ; Is it a space?
|
||||
JZ ALLSET ; Then we're ready to send...
|
||||
CPI 'K'
|
||||
JNZ OPTERR ; "K" is the only setable 2nd option
|
||||
JNZ CHKK
|
||||
POP PSW
|
||||
JMP ALLSET
|
||||
CHKK: CPI 'K'
|
||||
JNZ CHK6TH ; If it's not K it should be a port number
|
||||
LDA MSPEED
|
||||
CPI MINKSP ; If less than MINKSP bps, ignore 1k
|
||||
JC ALLSET ; Request
|
||||
@@ -733,7 +738,7 @@ NOBYE: LXI H,FCB+1 ; Get primary option
|
||||
STA KFLAG ; First, force us to 1K mode
|
||||
CALL ILPRT
|
||||
DB '(1k protocol selected)',CR,LF,0
|
||||
JMP ALLSET ; That's it for send...
|
||||
RET ; That's it for send...
|
||||
;
|
||||
; Receive option processor
|
||||
; 3 or 4 options: "X" - disable auto-protocol select
|
||||
@@ -5789,4 +5794,4 @@ BDPTOS EQU 83 ; Print Time on System
|
||||
ENDIF ; BYEBDOS
|
||||
;
|
||||
END
|
||||
|
||||
|
||||
|
||||
@@ -30,11 +30,11 @@
|
||||
; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc
|
||||
; 2022-02-28 [WBW] Use HBIOS to swap banks under CP/M 3
|
||||
; Use CPM3 BDOS direct BIOS call to get DRVTBL adr
|
||||
; 2023-06-19 [WBW] Update for revised DIODEVICE API
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; ToDo:
|
||||
; 1) Do something to prevent assigning slices when device does not support them
|
||||
; 2) ASSIGN C: causes drive map to be reinstalled unnecessarily
|
||||
; 1) ASSIGN C: causes drive map to be reinstalled unnecessarily
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
;===============================================================================
|
||||
@@ -1405,12 +1405,11 @@ chkdev: ; HBIOS variant
|
||||
; get device/unit info
|
||||
ld b,$17 ; hbios func: diodevice
|
||||
ld c,a ; unit to C
|
||||
rst 08 ; call hbios, D := device, E := unit
|
||||
ld a,d ; device to A
|
||||
rst 08 ; call hbios, C := device attributes
|
||||
;
|
||||
; check slice support
|
||||
cp $30 ; A has device/unit, in hard disk range?
|
||||
jr c,chkdev1 ; if not hard disk, check slice val
|
||||
bit 5,c ; high capacity device?
|
||||
jr z,chkdev1 ; if not high cap, check slice val
|
||||
xor a ; otherwise, signal OK
|
||||
ret
|
||||
;
|
||||
@@ -1920,7 +1919,7 @@ dev08 .db "PPPSD",0
|
||||
dev09 .db "HDSK",0
|
||||
dev10 .db "PPA",0
|
||||
dev11 .db "IMM",0
|
||||
dev12 .equ devunk
|
||||
dev12 .db "SYQ",0
|
||||
dev13 .equ devunk
|
||||
dev14 .equ devunk
|
||||
dev15 .equ devunk
|
||||
@@ -1943,10 +1942,10 @@ stack .equ $ ; stack top
|
||||
; Messages
|
||||
;
|
||||
indent .db " ",0
|
||||
msgban1 .db "ASSIGN v1.5 for RomWBW CP/M ",0
|
||||
msgban1 .db "ASSIGN v1.6 for RomWBW CP/M ",0
|
||||
msg22 .db "2.2",0
|
||||
msg3 .db "3",0
|
||||
msbban2 .db ", 28-Feb-2022",0
|
||||
msbban2 .db ", 16-Jun-2023",0
|
||||
msghb .db " (HBIOS Mode)",0
|
||||
msgub .db " (UBIOS Mode)",0
|
||||
msgban3 .db "Copyright 2021, Wayne Warthen, GNU GPL v3",0
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
;
|
||||
;[2022/03/27] v1.8 Support RHYOPHYRE
|
||||
;
|
||||
;[2023/07/07] v1.9 Support DUODYNE
|
||||
;
|
||||
; Constants
|
||||
;
|
||||
mask_data .EQU %10000000 ; RTC data line
|
||||
@@ -49,6 +51,7 @@ PORT_DYNO .EQU $0C ; RTC port for DYNO
|
||||
PORT_RCZ280 .EQU $C0 ; RTC port for RCZ280
|
||||
PORT_MBC .EQU $70 ; RTC port for MBC
|
||||
PORT_RPH .EQU $84 ; RTC port for RHYOPHYRE
|
||||
PORT_DUO .EQU $94 ; RTC port for DUODYNE
|
||||
|
||||
|
||||
BDOS .EQU 5 ; BDOS invocation vector
|
||||
@@ -1079,61 +1082,66 @@ HINIT:
|
||||
LD C,PORT_SBC
|
||||
LD DE,PLT_SBC
|
||||
CP $01 ; SBC
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
CP $02 ; ZETA
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
CP $03 ; ZETA 2
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_N8
|
||||
LD DE,PLT_N8
|
||||
CP $04 ; N8
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_MK4
|
||||
LD DE,PLT_MK4
|
||||
CP $05 ; Mark IV
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RCZ80
|
||||
LD DE,PLT_RCZ80
|
||||
CP $07 ; RCBus w/ Z80
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RCZ180
|
||||
LD DE,PLT_RCZ180
|
||||
CP $08 ; RCBus w/ Z180
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_EZZ80
|
||||
LD DE,PLT_EZZ80
|
||||
CP $09 ; Easy Z80
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_SCZ180
|
||||
LD DE,PLT_SCZ180
|
||||
CP $0A ; SCZ180
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_DYNO
|
||||
LD DE,PLT_DYNO
|
||||
CP 11 ; DYNO
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RCZ280
|
||||
LD DE,PLT_RCZ280
|
||||
CP 12 ; RCZ280
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_MBC
|
||||
LD DE,PLT_MBC
|
||||
CP 13 ; MBC
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RPH
|
||||
LD DE,PLT_RPH
|
||||
CP 14 ; RHYOPHYRE
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_DUO
|
||||
LD DE,PLT_DUO
|
||||
CP 17 ; DUODYNE
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
; Unknown platform
|
||||
LD DE,PLTERR ; BIOS error message
|
||||
@@ -1630,7 +1638,7 @@ TESTING_BIT_DELAY_OVER:
|
||||
|
||||
RTC_HELP_MSG:
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
.TEXT "RTC: Version 1.8"
|
||||
.TEXT "RTC: Version 1.9"
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
.TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot W)arm-start H)elp"
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
@@ -1760,6 +1768,7 @@ PLT_DYNO .TEXT ", DYNO RTC Module Latch Port 0x0C\r\n$"
|
||||
PLT_RCZ280 .TEXT ", RCBus Z280 RTC Module Latch Port 0xC0\r\n$"
|
||||
PLT_MBC .TEXT ", MBC RTC Latch Port 0x70\r\n$"
|
||||
PLT_RPH .TEXT ", RHYOPHYRE RTC Latch Port 0x84\r\n$"
|
||||
PLT_DUO .TEXT ", DUODYNE RTC Latch Port 0x70\r\n$"
|
||||
|
||||
;
|
||||
; Generic FOR-NEXT loop algorithm
|
||||
|
||||
@@ -2291,8 +2291,8 @@ INIT2:
|
||||
LD C,(HL) ; PUT UNIT NUM IN C
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,C ; GET ATTRIBUTES
|
||||
AND %00111000 ; ISOLATE TYPE BITS
|
||||
CP %00101000 ; TYPE = RAM?
|
||||
AND %10001111 ; ISOLATE TYPE BITS
|
||||
CP %00000101 ; NOT FLOPPY, TYPE = RAM?
|
||||
JR NZ,INIT2X ; IF NOT THEN DONE
|
||||
;
|
||||
; CHECK IF SECOND UNIT IS ROM OR FLASH
|
||||
@@ -2303,10 +2303,10 @@ INIT2:
|
||||
LD C,(HL) ; PUT UNIT NUM IN C
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,C ; GET ATTRIBUTES
|
||||
AND %00111000 ; ISOLATE TYPE BITS
|
||||
CP %00100000 ; TYPE = ROM?
|
||||
AND %10001111 ; ISOLATE TYPE BITS
|
||||
CP %00000100 ; NOT FLOPPY, TYPE = ROM?
|
||||
JR Z,INIT2A ; IF SO, ADJUST DEF DRIVE
|
||||
CP %00111000 ; TYPE = FLASH?
|
||||
CP %00000111 ; NOT FLOPPY, TYPE = FLASH?
|
||||
JR NZ,INIT2X ; IF NOT THEN DONE
|
||||
;
|
||||
INIT2A:
|
||||
@@ -2904,59 +2904,51 @@ DRV_INIT:
|
||||
LD HL,DRVLST ; INIT HL PTR TO DRIVE LIST
|
||||
;
|
||||
DRV_INIT2:
|
||||
PUSH BC ; SAVE LOOP CNT & UNIT
|
||||
CALL DRV_INIT3 ; CHECK DRIVE
|
||||
POP BC ; RECOVER LOOP CNT & UNIT
|
||||
INC C ; NEXT UNIT
|
||||
DJNZ DRV_INIT2 ; LOOP
|
||||
LD A,D ; TOTAL DEVICE COUNT TO D
|
||||
LD A,D ; TOTAL DEVICE COUNT TO A
|
||||
LD (DRVLSTC),A ; SAVE THE COUNT
|
||||
JR DRV_INIT4 ; CONTINUE
|
||||
;
|
||||
DRV_INIT3:
|
||||
; GET DEVICE ATTRIBUTES
|
||||
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
|
||||
PUSH HL ; SAVE DRIVE LIST PTR
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS, UNIT TO C
|
||||
LD A,D ; DEVICE TYPE TO A
|
||||
LD A,C ; DEVICE ATTRIBUTES TO A
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
POP HL ; RESTORE DRIVE LIST PTR
|
||||
POP DE ; RESTORE DE
|
||||
CP DIODEV_IDE ; HARD DISK DEVICE?
|
||||
JR NC,DRV_INIT3A ; IF SO, HANDLE SPECIAL
|
||||
LD (HL),C ; SAVE UNIT NUM IN LIST
|
||||
INC HL ; BUMP PTR
|
||||
INC D ; INC TOTAL DEVICE COUNT
|
||||
RET
|
||||
LD B,A ; ATTRIBUTES TO B
|
||||
;
|
||||
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
|
||||
; IF DEVICE IS NOT REMOVABLE, THEN CHECK TO ENSURE IT IS
|
||||
; ACTUALLY ONLINE. IF NOT, SKIP UNIT ENTIRELY.
|
||||
BIT 6,B ; REMOVABLE?
|
||||
JR NZ,DRV_INIT3A ; IF SO, SKIP MEDIA CHECK
|
||||
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
|
||||
PUSH HL ; SAVE DRIVE LIST PTR
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
|
||||
LD B,BF_DIOMEDIA ; HBIOS FUNC: SENSE MEDIA
|
||||
LD E,1 ; PERFORM MEDIA DISCOVERY
|
||||
RST 08
|
||||
|
||||
RST 08 ; DO IT
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
POP HL ; RESTORE DRIVE LIST PTR
|
||||
POP DE ; RESTORE DE
|
||||
|
||||
RET NZ ; IF NO MEDIA, JUST RETURN
|
||||
|
||||
DRV_INIT3B:
|
||||
; IF ACTIVE...
|
||||
RET NZ ; OFFLINE, SKIP ENTIRE UNIT
|
||||
;
|
||||
DRV_INIT3A:
|
||||
LD (HL),C ; SAVE UNIT NUM IN LIST
|
||||
INC HL ; BUMP PTR
|
||||
INC D ; INC TOTAL DEVICE COUNT
|
||||
BIT 5,B ; HIGH CAPACITY?
|
||||
RET Z ; DONE IF NOT
|
||||
INC E ; INCREMENT HARD DISK COUNT
|
||||
RET ; AND RETURN
|
||||
RET ; DONE
|
||||
;
|
||||
DRV_INIT4: ; SET SLICES PER VOLUME (HDSPV) BASED ON HARD DISK VOLUME COUNT
|
||||
LD A,E ; HARD DISK VOLUME COUNT TO A
|
||||
@@ -2985,7 +2977,8 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
|
||||
LD C,(HL) ; GET UNIT NUM FROM LIST
|
||||
PUSH BC ; PRESERVE LOOP CONTROL
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS, D := DEVICE TYPE
|
||||
RST 08 ; CALL HBIOS, C := DEVICE ATTRIBUTES
|
||||
LD A,C ; DEVICE ATTRIBUTES TO A
|
||||
POP BC ; GET UNIT INDEX BACK IN C
|
||||
PUSH BC ; RESAVE LOOP CONTROL
|
||||
CALL DRV_INIT7 ; MAKE DRIVE MAP ENTRY(S)
|
||||
@@ -2999,10 +2992,9 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
|
||||
DRV_INIT7: ; PROCESS UNIT
|
||||
LD E,0 ; INITIALIZE SLICE INDEX
|
||||
LD B,1 ; DEFAULT LOOP COUNTER
|
||||
LD A,D ; DEVICE TYPE TO ACCUM
|
||||
LD D,C ; UNIT NUMBER TO D
|
||||
CP DIODEV_IDE ; HARD DISK DEVICE?
|
||||
JR C,DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
|
||||
BIT 5,A ; HIGH CAPACITY DEVICE?
|
||||
JR Z,DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
|
||||
LD A,(HDSPV) ; GET SLICES PER VOLUME TO ACCUM
|
||||
LD B,A ; MOVE TO B FOR LOOP COUNTER
|
||||
;
|
||||
@@ -3401,7 +3393,7 @@ DEV08 .DB "PPPSD$"
|
||||
DEV09 .DB "HDSK$"
|
||||
DEV10 .DB "PPA$"
|
||||
DEV11 .DB "IMM$"
|
||||
DEV12 .EQU DEVUNK
|
||||
DEV12 .DB "SYQ$"
|
||||
DEV13 .EQU DEVUNK
|
||||
DEV14 .EQU DEVUNK
|
||||
DEV15 .EQU DEVUNK
|
||||
@@ -3413,7 +3405,7 @@ DIRBUF .DW 0 ; DIR BUF POINTER
|
||||
HEAPTOP .DW BUFPOOL ; CURRENT TOP OF HEAP
|
||||
BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE
|
||||
HDSPV .DB 2 ; SLICES PER VOLUME FOR HARD DISKS (MUST BE >= 1)
|
||||
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURINT DRV_INIT
|
||||
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURING DRV_INIT
|
||||
DRVLSTC .DB 0 ; ENTRY COUNT FOR ACTIVE DRIVE LIST
|
||||
;
|
||||
#IFDEF PLTWBW
|
||||
|
||||
@@ -156,7 +156,9 @@ dinit:
|
||||
ld hl,drvlst ; init hl ptr to drive list
|
||||
;
|
||||
dinit2:
|
||||
push bc ; save loop cnt & unit
|
||||
call dinit3 ; check drive
|
||||
pop bc ; recover loop cnt & unit
|
||||
inc c ; next unit
|
||||
djnz dinit2 ; loop
|
||||
ld a,d ; total device count to d
|
||||
@@ -169,46 +171,35 @@ dinit3:
|
||||
push bc ; save loop control
|
||||
ld b,17h ; hbios func: report device info
|
||||
rst 08 ; call hbios, unit to c
|
||||
ld a,d ; device type to a
|
||||
ld a,c ; device attributes to a
|
||||
pop bc ; restore loop control
|
||||
pop hl ; restore drive list ptr
|
||||
pop de ; restore de
|
||||
cp 30h ; hard disk device?
|
||||
jr nc,dinit3a ; if so, handle special
|
||||
ld (hl),c ; save unit num in list
|
||||
inc hl ; bump ptr
|
||||
inc d ; inc total device count
|
||||
ret
|
||||
ld b,a ; attributes to b
|
||||
;
|
||||
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
|
||||
; if device is not removable, then check to ensure it is
|
||||
; actually online. if not, skip unit entirely.
|
||||
bit 6,b ; removable?
|
||||
jr nz,dinit3a ; if so, skip media check
|
||||
push de ; save de (hard disk volume counter)
|
||||
push hl ; save drive list ptr
|
||||
push bc ; save loop control
|
||||
|
||||
ld b,18h ; hbios func: sense media
|
||||
ld e,1 ; perform media discovery
|
||||
rst 08
|
||||
|
||||
rst 08 ; do it
|
||||
pop bc ; restore loop control
|
||||
pop hl ; restore drive list ptr
|
||||
pop de ; restore de
|
||||
|
||||
ret nz ; if no media, just return
|
||||
|
||||
dinit3b:
|
||||
; if active...
|
||||
ret nz ; offline, skip entire unit
|
||||
;
|
||||
dinit3a:
|
||||
ld (hl),c ; save unit num in list
|
||||
inc hl ; bump ptr
|
||||
inc d ; inc total device count
|
||||
bit 5,b ; high capacity?
|
||||
ret z ; done if not
|
||||
inc e ; increment hard disk count
|
||||
ret ; and return
|
||||
ret ; done
|
||||
|
||||
dinit4: ; set slices per volume (hdspv) based on hard disk volume count
|
||||
ld a,e ; hard disk volume count to a
|
||||
@@ -245,7 +236,8 @@ dinit6:
|
||||
push bc ; preserve loop control
|
||||
push hl ; preserve dph pointer
|
||||
ld b,17h ; hbios func: report device info
|
||||
rst 08 ; call hbios, d := device type
|
||||
rst 08 ; call hbios, a := device attributes
|
||||
ld a,c ; device attributes to a
|
||||
pop hl ; restore dph pointer
|
||||
pop bc ; get unit index back in c
|
||||
push bc ; resave loop control
|
||||
@@ -260,10 +252,9 @@ dinit6:
|
||||
dinit7: ; process a unit (all slices)
|
||||
ld e,0 ; initialize slice index
|
||||
ld b,1 ; default loop counter
|
||||
ld a,d ; device type to accum
|
||||
ld d,c ; unit number to d
|
||||
cp 030h ; hard disk device?
|
||||
jr c,dinit8 ; nope, leave loop count at 1
|
||||
bit 5,a ; high capacity device?
|
||||
jr z,dinit8 ; nope, leave loop count at 1
|
||||
ld a,(hdspv) ; get slices per volume to accum
|
||||
ld b,a ; move to b for loop counter
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ found:
|
||||
| INTTEST | No | Yes | Yes |
|
||||
| FAT | No | Yes | Yes |
|
||||
| TUNE | No | Yes | Yes |
|
||||
| WDATE | No | Yes | Yes |
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
@@ -1128,3 +1129,85 @@ can be used to reduce your processor speed.
|
||||
|
||||
VGMPLAY is still under development. The source code is provided in the
|
||||
RomWBW distribution.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# WDATE
|
||||
|
||||
`wdate` is a utility for CP/M systems that have Wayne Warthen's
|
||||
ROMWBW firmware. It reads or sets the real-time clock, using function
|
||||
calls in the BIOS. It should work on any RTC device that is supported by
|
||||
ROMWBW, including the internal interrupt-driven timer that is is available
|
||||
on some systems.
|
||||
|
||||
`wdate` differs from the `rtc.com` utility that is provided with the
|
||||
ROMWBW version of CP/M in that it only gets and sets the date/time.
|
||||
`rtc.com` can also manipulate the nonvolatile RAM in certain clock
|
||||
devices, and modify the charge controller. However, `wdate` is (I would
|
||||
argue) easier to use, as it takes its input from the command line, which
|
||||
can be edited, and it's less fussy about the format. It doesn't require
|
||||
the date to be set if you only want to change the time, for example.
|
||||
In addition, `wdate` has at least some error checking.
|
||||
|
||||
`wdate` displays the day-of-week and month as English text, not
|
||||
numbers. It calculates the day-of-week from the year, month, and day.
|
||||
RTC chips usually store a day-of-week value, but it's useless in this
|
||||
application for two reasons: first, the BIOS does not expose it. Second,
|
||||
there is no universally-accepted way to interpret it (which day does
|
||||
the week start on? Is '0' a valid day of the week?)
|
||||
|
||||
## Syntax
|
||||
|
||||
| `WDATE`
|
||||
| `WDATE ` *`<hr> <min>`*
|
||||
| `WDATE ` *`<hr> <min> <sec>`*
|
||||
| `WDATE ` *`<year> <month> <day> <hr> <min> <sec>`*
|
||||
|
||||
## Usage
|
||||
|
||||
A> wdate
|
||||
Saturday 27 May 13:14:39 2023
|
||||
|
||||
With no arguments, displays the current date and time.
|
||||
|
||||
A> wdate hr min
|
||||
|
||||
With two arguments, sets the time in hours and minutes, without changing date
|
||||
or seconds
|
||||
|
||||
A> wdate hr min sec
|
||||
|
||||
With three arguments, sets the time in hours, minutes, and seconds, without
|
||||
changing date
|
||||
|
||||
A> wdate year month day hr min sec
|
||||
|
||||
With six arguments, sets date and time. All numbers are one or two digits. The
|
||||
two-digit year starts at 2000.
|
||||
|
||||
A> wdate /?
|
||||
|
||||
Show a summary of the command-line usage.
|
||||
|
||||
## Notes
|
||||
|
||||
I've tested this utility with the DS1302 clock board designed by Ed
|
||||
Brindly, and on the interrupt-driven timer built into my Z180 board.
|
||||
However, it does not interact with hardware, only BIOS; I would expect
|
||||
it to work with other hardware.
|
||||
|
||||
wdate checks for the non-existence of ROMWBW, and also for failing
|
||||
operations on the RTC. It will display the terse "No RTC" message in
|
||||
both cases.
|
||||
|
||||
The ROMWBW functions that manipulate the date and time operate on BCD
|
||||
numbers, as RTC chips themselves usually do. wdate works in decimal, so
|
||||
that it can check that the user input makes sense. A substantial part of
|
||||
the program's code is taken up by number format conversion and range
|
||||
checking.
|
||||
|
||||
## Etymology
|
||||
|
||||
The `WDATE` application was written and contributed by Kevin Boone.
|
||||
The source code is available on GitHub at
|
||||
[https://github.com/kevinboone/wdate-cpm/blob/main/README.md](https://github.com/kevinboone/wdate-cpm/blob/main/README.md).
|
||||
|
||||
@@ -172,6 +172,11 @@ please let me know if I missed you!
|
||||
|
||||
* The RomWBW Disk Catalog document was produced by Mykl Orders.
|
||||
|
||||
* Rob Prouse has created many of the supplemental disk images
|
||||
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft
|
||||
BASIC Compiler, Microsoft Fortran Compiler, and a Games
|
||||
compendium.
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
|
||||
# Licensing
|
||||
|
||||
@@ -757,28 +757,36 @@ of memory because it avoids a double copy.
|
||||
Reports device information about the specified Disk Unit (C). The
|
||||
Status (A) is a standard HBIOS result code.
|
||||
|
||||
Bit 7 of the Device Attribute (C) value returned indicates whether the
|
||||
device is a floppy disk. If it is a floppy disk, the Device Attribute
|
||||
(C) value is encoded as follows:
|
||||
The Device Attribute (C) value returned indicates various
|
||||
feature indicators related to the device being referenced
|
||||
by the specified Disk Unit (C). The high 3 bits apply to
|
||||
all devices. The definition of the low 5 bits depends on
|
||||
whether the device is a Floppy (indicated by bit 5).
|
||||
|
||||
The common bits are:
|
||||
|
||||
| **Bits** | **Definition** |
|
||||
|---------:|--------------------------------------------------|
|
||||
| 7 | = 1 (Floppy Disk) |
|
||||
| 6-5 | Form Factor: 0=8", 1=5.25", 2=3.5", 3=Other |
|
||||
| 4 | Sides: 0=SS, 1=DS |
|
||||
| 3-2 | Density: 0=SD, 1=DD, 2=HD, 3=ED |
|
||||
| 1-0 | Reserved |
|
||||
|
||||
If the Disk Unit (C) specified is a not floppy disk, then the Device
|
||||
Attribute (C) encoding is as follows:
|
||||
|
||||
| **Bits** | **Definition** |
|
||||
|---------:|--------------------------------------------------|
|
||||
| 7 | = 0 (not Floppy Disk) |
|
||||
| 7 | Floppy |
|
||||
| 6 | Removable |
|
||||
| 5-3 | Type: 0=Hard, 1=CF, 2=SD, 3=USB, |
|
||||
| | 4=ROM, 5=RAM, 6=RAMF, 7=FLASH |
|
||||
| 2-0 | Reserved |
|
||||
| 5 | High Capacity (>8 MB) |
|
||||
|
||||
The Floppy specific bits are:
|
||||
|
||||
| **Bits** | **Definition** |
|
||||
|---------:|--------------------------------------------------|
|
||||
| 4-3 | Form Factor: 0=8", 1=5.25", 2=3.5", 3=Other |
|
||||
| 2 | Sides: 0=SS, 1=DS |
|
||||
| 1-0 | Density: 0=SD, 1=DD, 2=HD, 3=ED |
|
||||
|
||||
The non-Floppy specific bits are:
|
||||
|
||||
| **Bits** | **Definition** |
|
||||
|---------:|--------------------------------------------------|
|
||||
| 4 | LBA Capable |
|
||||
| 3-0 | Media Type: 0=Hard Disk, 1=CF, 2=SD, 3=USB, |
|
||||
| | 4=ROM, 5=RAM, 6=RAMF, 7=FLASH, 8=CD-ROM, |
|
||||
| | 9=Cartridge |
|
||||
|
||||
Device Type (D) indicates the specific hardware driver that handles the
|
||||
specified Disk Unit (C). Values are listed at the start of this
|
||||
@@ -1001,6 +1009,198 @@ used.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
## Display Keypad (DSKY)
|
||||
|
||||
The Display Keypad functions provide read/write access to a segment
|
||||
style display and associated hex keypad.
|
||||
|
||||
HBIOS only supports a single DSKY device since there is no reason to have
|
||||
more than one at a time. The DSKY unit is assigned a Device Type ID
|
||||
which indicates the specific hardware device driver that handles the
|
||||
unit. The table below enumerates these values.
|
||||
|
||||
| **Device Type** | **ID** | **Description** | **Driver** |
|
||||
|-----------------|-------:|------------------------------------------|------------|
|
||||
| DSKYDEV_ICM | 0x00 | Original ICM7218 based DSKY | icm.asm |
|
||||
| DSKYDEV_PKD | 0x10 | Next Gen Intel P8279 based DSKY | pkd.asm |
|
||||
|
||||
When segment display function encodes the display data in a byte per
|
||||
character format. Currently, all segment displays are exactly
|
||||
8 charadcters and this is assumed in API calls. The encoding of each
|
||||
byte is as shown below:
|
||||
|
||||
```
|
||||
+---01---+
|
||||
| |
|
||||
20 02
|
||||
| |
|
||||
+---40---+
|
||||
| |
|
||||
10 04
|
||||
| |
|
||||
+---08---+ 80
|
||||
```
|
||||
|
||||
The keypad keys are identified by the following key ids. Not all
|
||||
keypads will contain all keys.
|
||||
|
||||
| **Key Id** | **Key Definition** | **Key Id** | **Key Definition** |
|
||||
|------------|--------------------|------------|--------------------|
|
||||
| $00 | Hex Numeric 0 | $10 | Forward |
|
||||
| $01 | Hex Numeric 1 | $11 | Backward |
|
||||
| $02 | Hex Numeric 2 | $12 | Clear |
|
||||
| $03 | Hex Numeric 3 | $13 | Enter |
|
||||
| $04 | Hex Numeric 4 | $14 | Deposit |
|
||||
| $05 | Hex Numeric 5 | $15 | Examine |
|
||||
| $06 | Hex Numeric 6 | $16 | Go |
|
||||
| $07 | Hex Numeric 7 | $17 | Boot |
|
||||
| $08 | Hex Numeric 8 | $18 | F4 |
|
||||
| $09 | Hex Numeric 9 | $19 | F3 |
|
||||
| $0A | Hex Numeric A | $1A | F2 |
|
||||
| $0B | Hex Numeric B | $1B | F1 |
|
||||
| $0C | Hex Numeric C | | |
|
||||
| $0D | Hex Numeric D | | |
|
||||
| $0E | Hex Numeric E | | |
|
||||
| $0F | Hex Numeric F | | |
|
||||
|
||||
### Function 0x30 -- DSKY Reset (DSKYRESET)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x30 | A: Status |
|
||||
|
||||
This function performs a device dependent reset operation on the DSKY.
|
||||
The display will be cleared, keyboard queue will be flushed, and
|
||||
chip will be reinitialized. The returned Status (A) is a standard
|
||||
HBIOS result code.
|
||||
|
||||
### Function 0x31 -- DSKY (DSKYSTATUS)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x31 | A: Status / Characters Pending |
|
||||
|
||||
Return the count of Characters Pending (A) in the input buffer of the
|
||||
DSKY. If the unit has no input buffer or the
|
||||
buffer utilization is not available, the function may return simply 0 or
|
||||
1 where 0 means there is no character available and 1 means there is at
|
||||
least one character available.
|
||||
|
||||
The value returned in register A is used as both a Status (A) code and
|
||||
the return value. Negative values (bit 7 set) indicate a standard HBIOS
|
||||
result (error) code. Otherwise, the return value represents the number
|
||||
of characters in the buffer.
|
||||
|
||||
### Function 0x32 -- DSKY Get Key (DSKYGETKEY)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x32 | A: Status |
|
||||
| | E: Character Value |
|
||||
|
||||
Read and return a Character (E) from the DSKY.
|
||||
If no character(s) are available in the unit's input buffer, this
|
||||
function will wait indefinitely. The returned Status (A) is a standard
|
||||
HBIOS result code.
|
||||
|
||||
The Character Value (E) returned is not ASCII. It is a keypad key
|
||||
id. The possible id values are listed at the start of this section.
|
||||
|
||||
### Function 0x33 -- DSKY Show HEX (RTCSHOWHEX)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x33 | A: Status |
|
||||
| DE:HL=Binary Value | |
|
||||
|
||||
Display the 32-bit binary value (DE:HL) in hex on the DSKY segment
|
||||
display. All decimal points of the display will be off.
|
||||
The Status (A) is a standard HBIOS result code.
|
||||
|
||||
### Function 0x34 -- DSKY Show Segments (DSKYSHOWSEG)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x34 | A: Status |
|
||||
| HL: Buffer Address | |
|
||||
|
||||
Display the segment-encoded values on the segment display. The encoding
|
||||
is defined at the start of this section. The entire displa is updated
|
||||
and it is assumed that an 8 character buffer will be pointed to by HL.
|
||||
The buffer must reside in high memory.
|
||||
The Status (A) is a standard HBIOS result code.
|
||||
|
||||
### Function 0x35 -- DSKY Keypad LEDs (DSKYKEYLEDS)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x35 | A: Status |
|
||||
| HL: Buffer Address | |
|
||||
|
||||
Light the LEDs for the keypad keys according to the
|
||||
bitmap contained in the buffer pointed to by HL. The buffer
|
||||
must be located in high memory and is assumed to be 8 bytes.
|
||||
|
||||
At this time, the bitmap is specific to the PKD hardware.
|
||||
This function is ignored by the ICM hardware.
|
||||
The Status (A) is a standard HBIOS result code.
|
||||
|
||||
### Function 0x36 -- DSKY Status LED (DSKYSTATLED)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x36 | A: Status |
|
||||
| D: LED Number | |
|
||||
| E: LED State | |
|
||||
|
||||
Set or clear the status LED specified in D. The state of
|
||||
the LED is contained in E. If E=0, the LED will be turned
|
||||
off. If E=1, the LED will be turned on.
|
||||
|
||||
This function is specific to the PKD hardware. It will be ignored
|
||||
by the ICM hardware.
|
||||
The Status (A) is a standard HBIOS result code.
|
||||
|
||||
### Function 0x37 -- DSKY Beep (DSKYBEEP)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x37 | A: Status |
|
||||
|
||||
Beep the onboard speaker of the DSKY.
|
||||
This function is specific to the PKD hardware. It will be ignored
|
||||
by the ICM hardware.
|
||||
The Status (A) is a standard HBIOS result code.
|
||||
|
||||
### Function 0x38 -- DSKY Device (DSKYDEVICE)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0x38 | A: Status |
|
||||
| | C: Device Attributes |
|
||||
| | D: Device Type |
|
||||
| | E: Device Number |
|
||||
| | H: Device Unit Mode |
|
||||
| | L: Device I/O Base Address |
|
||||
|
||||
Returns device information for the DSKY unit. The Status (A) is a
|
||||
standard HBIOS result code.
|
||||
|
||||
Device Attribute (C) values are not yet defined. Device Type (D)
|
||||
indicates the specific hardware driver that handles the specified
|
||||
character unit. Values are listed at the start of this section. Device
|
||||
Number (E) indicates the physical device number assigned per driver
|
||||
which is always 0 for DSKY.
|
||||
|
||||
Device Mode (H) is used to indicate the variant of the chip or circuit
|
||||
that is used by the specified unit. The Device I/O Base Address (L)
|
||||
indicates the starting port address of the hardware interface that is
|
||||
servicing the specified unit. Both of these values are considered
|
||||
driver specific. Refer to the associated hardware driver for the values
|
||||
used.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
## Video Display Adapter (VDA)
|
||||
|
||||
The VDA functions are provided as a common interface to Video Display
|
||||
@@ -1752,6 +1952,9 @@ The hardware Platform (L) is identified as follows:
|
||||
| PLT_RCZ280 |12 | RCBUS W/ Z280 |
|
||||
| PLT_MBC |13 | NHYODYNE MULTI-BOARD COMPUTER |
|
||||
| PLT_RPH |14 | RHYOPHYRE GRAPHICS SBC |
|
||||
| PLT_Z80RETRO |15 | Z80 RETRO COMPUTER |
|
||||
| PLT_S100 |16 | S100 COMPUTERS Z180 |
|
||||
| PLT_DUO |17 | DUODYNE Z80 SYSTEM |
|
||||
|
||||
### Function 0xF2 -- System Set Bank (SYSSETBNK)
|
||||
|
||||
|
||||
@@ -202,6 +202,8 @@ below, **carefully** pick the appropriate ROM image for your hardware.
|
||||
| [Z280 ZZRCC CPU Module]^7^ | RCBus | RCZ280_zzrc.rom | 115200 |
|
||||
| [Z280 ZZ80MB SBC]^7^ | RCBus | RCZ280_zz80mb.rom | 115200 |
|
||||
| [Z80-Retro SBC]^8^ | - | Z80RETRO_std.rom | 38400 |
|
||||
| [S100 Computers Z180]^9^ | S100 | S100_std.rom | 38400 |
|
||||
| [Duodyne Z80 System]^1^ | Duo | DUO_std.rom | 38400 |
|
||||
|
||||
| ^1^Designed by Andrew Lynch
|
||||
| ^2^Designed by Sergey Kiselev
|
||||
@@ -211,6 +213,7 @@ below, **carefully** pick the appropriate ROM image for your hardware.
|
||||
| ^6^Designed by Steve Garcia
|
||||
| ^7^Designed by Bill Shen
|
||||
| ^8^Designed by Peter Wilson
|
||||
| ^9^Designed by John Monahan
|
||||
|
||||
RCBus refers to Spencer Owen's RC2014 bus specification and derivatives
|
||||
including RC26, RC40, RC80, and BP80.
|
||||
@@ -2213,18 +2216,23 @@ file which is bootable.
|
||||
output will be garbled if no such terminal or emulator
|
||||
is used for console output.
|
||||
|
||||
* There is no straightforward mechanism to move files in
|
||||
* There is no built-in mechanism to move files in
|
||||
and out of p-System. However, the .vol files in Source/pSys
|
||||
can be read and modified by CiderPress. CiderPress is able
|
||||
to add and remove individual files.
|
||||
|
||||
Andrew Davidson has created a Python script that can extract p-System
|
||||
volumes from an existing disk image file. The script is also capable
|
||||
of inserting a modified volume back into the disk image file.
|
||||
This tool is available at
|
||||
<https://github.com/robosnacks/psysimg>.
|
||||
|
||||
## FreeRTOS
|
||||
|
||||
Phillip Stevens has ported FreeRTOS to run under RomWBW. FreeRTOS is
|
||||
not provided in the RomWBW distribution. FreeRTOS is available under
|
||||
the
|
||||
[MIT licence](https://www.freertos.org/a00114.html) and further general
|
||||
information is available at
|
||||
the [MIT licence](https://www.freertos.org/a00114.html)
|
||||
and further general information is available at
|
||||
[FreeRTOS](https://www.freertos.org/RTOS.html).
|
||||
|
||||
You can also contact Phillip for detailed information on the Z180
|
||||
@@ -2300,26 +2308,35 @@ This application understands both FAT filesystems as well as CP/M filesystems.
|
||||
* Long filenames are not supported. Files with long filenames will
|
||||
show up with their names truncated into the older 8.3 convention.
|
||||
* A FAT filesystem can be located on floppy or hard disk media. For
|
||||
hard disk media, the FAT filesystem must be located within a valid
|
||||
FAT partition.
|
||||
hard disk media, a valid FAT Filesystem partition must exist.
|
||||
* Note that CP/M (and compatible) OSes do not support all of the
|
||||
filename characters that a modern computer does. The following
|
||||
characters are **not permitted** in a CP/M filename:
|
||||
|
||||
`< > . , ; : = ? * [ ] _ % | ( ) / \`
|
||||
|
||||
The FAT application does not auto-rename files when it encounters
|
||||
invalid filenames. It will just issue an error and quit.
|
||||
Additionally, the error message is not very clear about the problem.
|
||||
|
||||
## FAT Filesystem Preparation
|
||||
|
||||
In general, you can create media formatted with a FAT filesystem on
|
||||
your RomWBW computer or on your modern computer. We will only be
|
||||
discussing the RomWBW-based approach here.
|
||||
|
||||
In the case of a floppy disk, you can use the `FAT` application to
|
||||
format the floppy disk. For example, if your floppy disk is on RomWBW
|
||||
disk unit 2, you could use `FAT FORMAT 2:`. This will overwrite the
|
||||
floppy with a FAT filesystem and all previous contents will be lost.
|
||||
Once formatted this way, the floppy disk can be used in a floppy drive
|
||||
attached to a modern computer or it can be used on RomWBW using the
|
||||
In the case of a floppy disk, you can use the `FAT` application to
|
||||
format the floppy disk. The floppy disk must already be physically
|
||||
formatted using RomWBW FDU or equivalent. If your floppy disk is on
|
||||
RomWBW disk unit 2, you could use `FAT FORMAT 2:`. This will overwrite
|
||||
the floppy with a FAT filesystem and all previous contents will be lost.
|
||||
Once formatted this way, the floppy disk can be used in a floppy drive
|
||||
attached to a modern computer or it can be used on RomWBW using the
|
||||
other `FAT` tool commands.
|
||||
|
||||
In the case of hard disk media, it is necessary to have a FAT
|
||||
partition. If you prepared your RomWBW hard disk media using the
|
||||
disk image process, then this partition will already be present and
|
||||
disk image process, then this partition will already be defined and
|
||||
you do not need to recreate it. This default FAT partition is located
|
||||
at approximately 512MB from the start of your disk and it is 384MB in
|
||||
size. So, your hard disk media must be 1GB or greater to use this
|
||||
@@ -2367,8 +2384,13 @@ If your RomWBW system has multiple disk drives/slots, you can also just
|
||||
create a disk with your modern computer that is a dedicated FAT
|
||||
filesystem disk. You can use your modern computer to format the disk
|
||||
(floppy, CF Card, SD Card, etc.), then insert the disk in your RomWBW
|
||||
computer and access if using `FAT` based on its RomWBW unit number.
|
||||
computer and access it using `FAT` based on its RomWBW unit number.
|
||||
|
||||
**WARNING**: Microsoft Windows will sometimes suggest reformatting
|
||||
partitions that it does not recognize. If you are prompted to format
|
||||
a partition of your SD/CF Card when inserting the card into a Windows
|
||||
computer, you probably want to select Cancel.
|
||||
|
||||
## FAT Application Usage
|
||||
|
||||
Complete instructions for the `FAT` application are found in $doc_apps$.
|
||||
@@ -3152,6 +3174,46 @@ directed to complete a partial flash using the /P command line switch.
|
||||
|
||||
`E>FLASH WRITE ROM.UPD /P`
|
||||
|
||||
# Related Projects
|
||||
|
||||
Outside of the hardware platforms adapted to RomWBW, there are a variety
|
||||
of software projects that either target RomWBW specifically or provide
|
||||
a RomWBW-specific variation.
|
||||
|
||||
## Z88DK
|
||||
|
||||
Z88DK is a software powerful development kit for Z80 computers
|
||||
supporting both C and assembly language. This kit now provides
|
||||
specific library support for RomWBW HBIOS. The Z88DK project is
|
||||
hosted at <https://github.com/z88dk/z88dk>.
|
||||
|
||||
## Paleo Editor
|
||||
|
||||
Steve Garcia has created a Windows-hosted IDE that is tailored to
|
||||
development of RomWBW. The project can be found at
|
||||
<https://github.com/alloidian/PaleoEditor>.
|
||||
|
||||
## p-System Volume Management Script
|
||||
|
||||
Andrew Davidson has created a Python script to automate the insertion
|
||||
and deletion of volumes within the p-System disk image. These scripts
|
||||
are hosted at <https://github.com/robosnacks/psysimg>.
|
||||
|
||||
## Z80 fig-FORTH
|
||||
|
||||
Dimitri Theulings' implementation of fig-FORTH for the Z80 has a
|
||||
RomWBW-specific variant. This fig-FORTH is built into the RomWBW
|
||||
ROM. However, the project itself is hosted at
|
||||
<https://github.com/dimitrit/figforth>.
|
||||
|
||||
## RomWBW Date/Time Utility
|
||||
|
||||
Kevin Boone has created a generic application that will display or
|
||||
set the date/time of an RTC on RomWBW. The application runs on all of
|
||||
the CP/M OS variants. This tool (`WDATE`) is included on the RomWBW
|
||||
OS disk images. The project is hosted at
|
||||
<https://github.com/kevinboone/wdate-cpm>.
|
||||
|
||||
# Acknowledgments
|
||||
|
||||
I want to acknowledge that a great deal of the code and inspiration
|
||||
@@ -3217,6 +3279,11 @@ please let me know if I missed you!
|
||||
|
||||
* The RomWBW Disk Catalog document was produced by Mykl Orders.
|
||||
|
||||
* Rob Prouse has created many of the supplemental disk images
|
||||
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft
|
||||
BASIC Compiler, Microsoft Fortran Compiler, and a Games
|
||||
compendium.
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
|
||||
# Licensing
|
||||
@@ -3877,6 +3944,41 @@ the RomWBW HBIOS configuration.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
### S100 Computers Z180
|
||||
|
||||
| | |
|
||||
|-------------------|---------------|
|
||||
| ROM Image File | S100_std.rom |
|
||||
| Console Baud Rate | 38400 |
|
||||
| Interrupts | Mode 2 |
|
||||
|
||||
- CPU speed assumed to be 18.432 MHz
|
||||
- System timer is generated by Z180 CPU
|
||||
- Hardware auto-detected:
|
||||
- Interrupt-driven RTC
|
||||
- Z180 ASCI Serial Ports
|
||||
- Onboard SD Card Interface
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
### Duodyne Z80 System
|
||||
|
||||
| | |
|
||||
|-------------------|---------------|
|
||||
| ROM Image File | DUO_std.rom |
|
||||
| Console Baud Rate | 38400 |
|
||||
| Interrupts | Mode 2 |
|
||||
|
||||
- CPU speed is detected at startup if DS1302 RTC is active
|
||||
- Otherwise 8.000 MHz assumed
|
||||
- System timer is generated by CTC if available
|
||||
- Hardware auto-detected:
|
||||
- DS1302 RTC
|
||||
- Zilog DMA Module
|
||||
- UART Serial Adapter
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
## Appendix B - Device Summary
|
||||
|
||||
The table below briefly describes each of the possible devices that
|
||||
@@ -3893,7 +3995,6 @@ may be discovered by RomWBW in your system.
|
||||
| DMA | System | Zilog DMA Controller |
|
||||
| DS1307 | RTC | Maxim DS1307 PCF I2C Real-Time Clock w/ NVRAM |
|
||||
| DS1501RTC | RTC | Maxim DS1501/DS1511 Watchdog Real-Time Clock |
|
||||
| DSKY | System | Keypad & Display |
|
||||
| DSRTC | RTC | Maxim DS1302 Real-Time Clock w/ NVRAM |
|
||||
| DUART | Char | SCC2681 or compatible Dual UART |
|
||||
| EMM | Disk | Disk drive on Parallel Port emm interface (Zip Drive) |
|
||||
@@ -3901,6 +4002,8 @@ may be discovered by RomWBW in your system.
|
||||
| GDC | Video | uPD7220 Video Display Controller |
|
||||
| HDSK | Disk | SIMH Simulator Hard Disk |
|
||||
| IDE | Disk | IDE/ATA Hard Disk Interface |
|
||||
| ICM | DsKy | ICM7218-based Display/Keypad on PPI |
|
||||
| IMM | Disk | IMM Zip Drive on PPI |
|
||||
| INTRTC | RTC | Interrupt-based Real Time Clock |
|
||||
| KBD | Kbd | 8242 PS/2 Keyboard Controller |
|
||||
| KIO | System | Zilog Serial/ Parallel Counter/Timer |
|
||||
@@ -3909,7 +4012,9 @@ may be discovered by RomWBW in your system.
|
||||
| MSXKYB | Kbd | MSX Compliant Matrix Keyboard |
|
||||
| I2C | System | I2C Interface |
|
||||
| PIO | Char | Zilog Parallel Interface Controller |
|
||||
| PKD | DsKy | P8279-based Display/Keypad on PPI |
|
||||
| PPIDE | Disk | 8255 IDE/ATA Hard Disk Interface |
|
||||
| PPA | Disk | PPA Zip Drive on PPI |
|
||||
| PPK | Kbd | Matrix Keyboard |
|
||||
| PPPSD | Disk | ParPortProp SD Card Interface |
|
||||
| PPPCON | Serial | ParPortProp Serial Console Interface |
|
||||
@@ -3922,6 +4027,7 @@ may be discovered by RomWBW in your system.
|
||||
| SIO | Char | Zilog Serial Port Interface |
|
||||
| SN76489 | Sound | SN76489 Programmable Sound Generator |
|
||||
| SPK | Sound | Bit-bang Speaker |
|
||||
| SYQ | Disk | Iomega SparQ Drive on PPI |
|
||||
| TMS | Video | TMS9918/38/58 Video Display Controller |
|
||||
| UART | Char | 16C550 Family Serial Interface |
|
||||
| USB-FIFO | Char | FT232H-based ECB USB FIFO |
|
||||
|
||||
@@ -484,3 +484,93 @@ TERM_ATTACH: (C=VIDEO UNIT, DE=<VDA>_DISPATCH)
|
||||
- QUERY ATTACHED VDA FOR SCREEN SIZE (VIA <EMU>_VDADISP)
|
||||
- INITIALIZE ALL WORKING VARIABLES AND EMULATOR STATE
|
||||
- RETURN (A=STATUS)
|
||||
|
||||
|
||||
==============
|
||||
DSKY Functions
|
||||
==============
|
||||
|
||||
RESET ($30):
|
||||
B=Function A=Result
|
||||
|
||||
STAT ($31):
|
||||
B=Function A=Result / Bytes Pending
|
||||
|
||||
A=Number of characters waiting or error code if negative
|
||||
|
||||
GETKEY ($32):
|
||||
B=Function A=Result
|
||||
E=Key Code
|
||||
|
||||
A=DSKY key value or error code if negative
|
||||
|
||||
SHOWHEX ($33):
|
||||
B=Function A=Result
|
||||
DE:HL=Value (32-bit)
|
||||
|
||||
Display value of DE:HL in hex on display. It is not
|
||||
possible to show decimal points.
|
||||
|
||||
SHOWSEG ($34):
|
||||
B=Function A=Result
|
||||
HL=Buffer (raw segment encoded)
|
||||
|
||||
Display raw segment values. Each byte represents one
|
||||
character. Each segment of the character is represented
|
||||
by a bit. The buffer must be located in high memory.
|
||||
The segments are encoded as shown below:
|
||||
|
||||
+--01--+
|
||||
20 02
|
||||
+--40--+
|
||||
10 04
|
||||
+--08--+ 80
|
||||
|
||||
KEYLEDS ($35):
|
||||
B=Function A=Result
|
||||
HL=Buffer (LED bitmap)
|
||||
|
||||
Light the LEDs for the keypad keys according to the
|
||||
bitmap contained in the buffer pointed to by HL. The buffer
|
||||
must be located in high memory.
|
||||
|
||||
At this time, the bitmap is specific to the DSKYNG hardware.
|
||||
This function is ignored by the original DSKY.
|
||||
|
||||
STATLED ($36):
|
||||
B=Function A=Result
|
||||
D=LED Number
|
||||
E=LED State (0/1)
|
||||
|
||||
Set or clear the status LED specified in D. The state of
|
||||
the LED is contained in E. If E=0, the LED will be turned
|
||||
off. If E=1, the LED will be turned on.
|
||||
|
||||
BEEP ($37):
|
||||
B=Function A=Result
|
||||
|
||||
Beep the onboard speaker of the DSKY. Only the DSKYNG hardware
|
||||
has a speaker. This function will be ignored by the original
|
||||
DSKY.
|
||||
|
||||
DEVICE ($38):
|
||||
B=Function A=Result
|
||||
D=Device Type
|
||||
E=Device Number
|
||||
C=Device Attributes
|
||||
H=Device Mode
|
||||
L=Base I/O Adr
|
||||
|
||||
Returns device information for the DSKY unit. The Status (A) is a
|
||||
standard HBIOS result code. Device Attribute (C) values are not yet
|
||||
defined. Device Type (D) indicates the specific hardware driver that
|
||||
handles the specified character unit. Values are listed at the start
|
||||
of this section. Device Number (E) indicates the physical device
|
||||
number assigned per driver which is always 0 for DSKY.
|
||||
|
||||
Device Mode (H) is used to indicate the variant of the chip or circuit
|
||||
that is used by the specified unit. The Device I/O Base Address (L)
|
||||
indicates the starting port address of the hardware interface that is
|
||||
servicing the specified unit. Both of these values are considered
|
||||
driver specific. Refer to the associated hardware driver for the
|
||||
values used.
|
||||
|
||||
@@ -93,7 +93,14 @@ call :asm imgpad2 || exit /b
|
||||
|
||||
copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin + ..\cpm22\cpm_wbw.bin osimg.bin || exit /b
|
||||
copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + netboot.mod + updater.bin + usrrom.bin osimg1.bin || exit /b
|
||||
copy /b imgpad2.bin osimg2.bin || exit /b
|
||||
|
||||
if %Platform%==S100 (
|
||||
zxcc slr180 -s100mon/fh
|
||||
zxcc mload25 -s100mon || exit /b
|
||||
copy /b s100mon.com osimg2.bin || exit /b
|
||||
) else (
|
||||
copy /b imgpad2.bin osimg2.bin || exit /b
|
||||
)
|
||||
|
||||
copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin osimg_small.bin || exit /b
|
||||
|
||||
@@ -224,5 +231,7 @@ call Build DYNO std || exit /b
|
||||
call Build UNA std || exit /b
|
||||
call Build RPH std || exit /b
|
||||
call Build Z80RETRO std || exit /b
|
||||
call Build S100 std || exit /b
|
||||
call Build DUO std || exit /b
|
||||
|
||||
goto :eof
|
||||
|
||||
@@ -27,8 +27,8 @@ $ErrorAction = 'Stop'
|
||||
# UNA BIOS is simply imbedded, it is not built here.
|
||||
#
|
||||
|
||||
$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "Z80RETRO", "UNA"
|
||||
$PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO", "RPH"
|
||||
$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "Z80RETRO", "DUO", "UNA"
|
||||
$PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO", "RPH", "S100"
|
||||
$PlatformListZ280 = "RCZ280"
|
||||
|
||||
#
|
||||
|
||||
@@ -32,11 +32,13 @@ if [ "${ROM_PLATFORM}" == "dist" ] ; then
|
||||
ROM_PLATFORM="SBC"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="SBC"; ROM_CONFIG="simh"; bash Build.sh
|
||||
ROM_PLATFORM="MBC"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="DUO"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc126"; bash Build.sh
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc130"; bash Build.sh
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc131"; bash Build.sh
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc140"; bash Build.sh
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc503"; bash Build.sh
|
||||
ROM_PLATFORM="S100"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="UNA"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="Z80RETRO"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="ZETA"; ROM_CONFIG="std"; bash Build.sh
|
||||
|
||||
@@ -11,6 +11,7 @@ if exist *.exp del *.exp
|
||||
if exist *.tmp del *.tmp
|
||||
if exist *.mrk del *.mrk
|
||||
if exist *.sys del *.sys
|
||||
if exist *.hex del *.hex
|
||||
if exist build.inc del build.inc
|
||||
if exist font*.asm del font*.asm
|
||||
if exist build_env.cmd del build_env.cmd
|
||||
|
||||
46
Source/HBIOS/Config/DUO_std.asm
Normal file
46
Source/HBIOS/Config/DUO_std.asm
Normal file
@@ -0,0 +1,46 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; DUODYNE STANDARD CONFIGURATION
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE
|
||||
; CFG_<PLT>.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS
|
||||
; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE
|
||||
; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS.
|
||||
; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE <PLT>_XXX.ASM AND SPECIFY
|
||||
; YOUR FILE IN THE BUILD PROCESS.
|
||||
;
|
||||
; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM.
|
||||
; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO
|
||||
; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON
|
||||
; SETTINGS.
|
||||
;
|
||||
; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE,
|
||||
; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING
|
||||
; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS!
|
||||
;
|
||||
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
|
||||
; DIRECTORIES ABOVE THIS ONE).
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
|
||||
;
|
||||
#include "cfg_duo.asm"
|
||||
;
|
||||
CPUOSC .SET 8000000 ; 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)
|
||||
;
|
||||
;;;DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
;
|
||||
BATCOND .SET TRUE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
;
|
||||
ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
;
|
||||
PCFENABLE .SET TRUE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
;
|
||||
MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM
|
||||
;
|
||||
UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
;UARTCFG .SET UARTCFG | SER_RTS
|
||||
@@ -42,12 +42,15 @@ RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
;
|
||||
MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM
|
||||
;
|
||||
DSKYENABLE .SET FALSE ; ENABLES DSKY
|
||||
DSKYMODE .SET DSKYMODE_NG ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYENABLE .SET TRUE ; ENABLES DSKY FUNCTIONALITY
|
||||
ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
PKDENABLE .SET TRUE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
;
|
||||
UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
;UARTCFG .SET UARTCFG | SER_RTS
|
||||
;
|
||||
ESPENABLE .SET TRUE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
;
|
||||
#include "cfg_rcz280.asm"
|
||||
;
|
||||
CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ
|
||||
CPUOSC .SET 24000000 ; 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
|
||||
;
|
||||
|
||||
79
Source/HBIOS/Config/RCZ80_jbl.asm
Normal file
79
Source/HBIOS/Config/RCZ80_jbl.asm
Normal file
@@ -0,0 +1,79 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; RCBUS Z80 COLECOVISION-COMPATIBLE CONFIGURATION FOR J.B. LANGSTON'S GAME BOARDS
|
||||
;==================================================================================================
|
||||
;
|
||||
; THIS CONFIGURATION ENABLES DRIVERS FOR THE TMS9918 AND SN76489 BOARDS BY J.B. LANGSTON
|
||||
; AND THE YM2149 BOARD BY ED BRINDLEY. THE TMS9918 IS CONFIGURED TO USE THE COLECOVISION
|
||||
; PORTS AND HAS INTERRUPTS DISABLED BECAUSE COLECOVISION USES NMI, WHICH WOULD BREAK CP/M
|
||||
; WHEN ENABLED. IT IS CONFIGURED FOR A 3.686MHZ CPU CLOCK IN ORDER TO BE COMPATIBLE WITH
|
||||
; COLECOVISION GAMES. THE FIRST SIO PORT IS CONFIGURED TO RUN AT 115200 BPS WITH THE CPU
|
||||
; RUNNING AT THIS SPEED. THE SECOND SIO PORT IS CONFIGURED TO RUN AT 115200 BPS WITH THE
|
||||
; SECOND CLOCK SET TO 7.373MHZ. LOWER BAUD RATES CAN BE ACHIEVED ON THE SECOND PORT BY
|
||||
; MOVING THE SECONDARY CLOCK DIVIDER JUMPER (E.G., 38400 @ 2.458MHZ). THE BAUD RATE DOES
|
||||
; NOT NEED TO BE CHANGED IN THIS CONFIGURATION FILE IN ORDER TO DO THIS, BUT THE DEVICE
|
||||
; LIST WILL INCORRECTLY SHOW THE PORT RUNNING AT 115200 REGARDLESS OF THE CLOCK DIVIDER.
|
||||
; UNCOMMENT THE LINE THAT SETS BOOTCON TO 1 TO BOOT ON THE SECOND SIO PORT BY DEFAULT.
|
||||
;
|
||||
; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE
|
||||
; CFG_<PLT>.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS
|
||||
; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE
|
||||
; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS.
|
||||
; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE <PLT>_XXX.ASM AND SPECIFY
|
||||
; YOUR FILE IN THE BUILD PROCESS.
|
||||
;
|
||||
; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE,
|
||||
; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING
|
||||
; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS!
|
||||
;
|
||||
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
|
||||
; DIRECTORIES ABOVE THIS ONE).
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "Z" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
|
||||
;
|
||||
#include "cfg_rcz80.asm"
|
||||
;
|
||||
CPUOSC .SET 3686400 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;BOOTCON .SET 1 ; BOOT CONSOLE DEVICE
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
;
|
||||
UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
ACIAENABLE .SET FALSE ; 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)
|
||||
;
|
||||
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT
|
||||
SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED)
|
||||
SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
|
||||
SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP]
|
||||
SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR
|
||||
SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG
|
||||
SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG
|
||||
SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
;
|
||||
TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_COLECO ; 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 1 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC]
|
||||
SN76489ENABLE .SET TRUE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
;
|
||||
FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
|
||||
;
|
||||
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET FALSE ; 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
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
47
Source/HBIOS/Config/S100_std.asm
Normal file
47
Source/HBIOS/Config/S100_std.asm
Normal file
@@ -0,0 +1,47 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; S100 STANDARD CONFIGURATION
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE
|
||||
; CFG_<PLT>.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS
|
||||
; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE
|
||||
; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS.
|
||||
; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE <PLT>_XXX.ASM AND SPECIFY
|
||||
; YOUR FILE IN THE BUILD PROCESS.
|
||||
;
|
||||
; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM.
|
||||
; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO
|
||||
; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON
|
||||
; SETTINGS.
|
||||
;
|
||||
; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE,
|
||||
; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING
|
||||
; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS!
|
||||
;
|
||||
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
|
||||
; DIRECTORIES ABOVE THIS ONE).
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
|
||||
;
|
||||
#include "cfg_s100.asm"
|
||||
;
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
;
|
||||
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)
|
||||
;
|
||||
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
;
|
||||
IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR]
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY
|
||||
@@ -39,6 +39,8 @@ 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)
|
||||
ICMENABLE .SET TRUE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
PKDENABLE .SET TRUE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
;
|
||||
|
||||
@@ -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
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .SET $A0 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .SET $A0 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
;
|
||||
|
||||
@@ -35,7 +35,9 @@ 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
|
||||
FPLED_IO .SET $A0 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
FPSW_IO .SET $A0 ; FP: PORT ADDRESS FOR FP SWITCHES
|
||||
;
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
;
|
||||
|
||||
@@ -6,7 +6,7 @@ MOREDIFF = game.bin hbios_rom.bin nascom.bin usrrom.bin \
|
||||
SUBDIRS =
|
||||
DEST = ../../Binary
|
||||
TOOLS =../../Tools
|
||||
OTHERS = *.img *.rom *.com *.upd *.bin *.z80 cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh
|
||||
OTHERS = *.img *.rom *.com *.upd *.bin *.hex cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh
|
||||
|
||||
# DIFFMAKE = 1
|
||||
|
||||
@@ -43,6 +43,10 @@ else
|
||||
BIOS=wbw
|
||||
endif
|
||||
|
||||
ifeq ($(ROM_PLATFORM),S100)
|
||||
ROMDEPS += s100mon.bin
|
||||
endif
|
||||
|
||||
ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG}
|
||||
|
||||
# $(info DEPS=$(DEPS))
|
||||
@@ -58,7 +62,11 @@ $(OBJECTS) : $(ROMDEPS)
|
||||
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >osimg_small.bin
|
||||
if [ $(ROM_PLATFORM) != UNA ] ; then \
|
||||
cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin usrrom.bin >osimg1.bin ; \
|
||||
cat imgpad2.bin >osimg2.bin ; \
|
||||
if [ $(ROM_PLATFORM) = S100 ] ; then \
|
||||
cat s100mon.bin >osimg2.bin ; \
|
||||
else \
|
||||
cat imgpad2.bin >osimg2.bin ; \
|
||||
fi ; \
|
||||
if [ $(ROMSIZE) -gt 0 ] ; then \
|
||||
for f in hbios_rom.bin osimg.bin osimg1.bin osimg2.bin ; do \
|
||||
srec_cat $$f -Binary -Crop 0 0x7FFF -Checksum_Negative_Big_Endian 0x7FFF 1 1 -o $$f -Binary ; \
|
||||
@@ -89,6 +97,10 @@ font%.asm:
|
||||
camel80.bin:
|
||||
cp ../Forth/$@ .
|
||||
|
||||
s100mon.bin:
|
||||
$(ZXCC) $(CPM)/SLR180 -s100mon/FH
|
||||
$(ZXCC) $(CPM)/MLOAD25 -s100mon.bin=s100mon
|
||||
|
||||
tastybasic.bin:
|
||||
cp ../TastyBasic/src/$@ .
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
RomWBW ROM Layout Notes
|
||||
RomWBW ROM Layout
|
||||
|
||||
Bank Module Start Size
|
||||
------ ------ ------ ------
|
||||
@@ -24,4 +24,16 @@ Bank Module Start Size
|
||||
3 imgpad2 0x0000 0x8000
|
||||
<end> 0x8000
|
||||
|
||||
4-N ROM Disk Data
|
||||
4 - N ROM Disk Data
|
||||
|
||||
|
||||
RomWBW RAM Layout
|
||||
|
||||
Bank ID Usage Physical Address
|
||||
------- ------ ----------------
|
||||
0x80-0x87 RAM Disk Data 0x80000-0xBFFFF
|
||||
0x88-0x8B CP/M 3 Buffers 0xC0000-0xDFFFF
|
||||
0x8C CP/M 3 OS 0xE0000-0xE7FFF
|
||||
0x8D RomWBW HBIOS 0xE8000-0xEFFFF
|
||||
0x8E User TPA 0xF0000-0xF7FFF
|
||||
0x8F Common 0xF8000-0xFFFFF
|
||||
|
||||
@@ -81,7 +81,7 @@ ASCI_RTS .EQU %00010000 ; ~RTS BIT OF CNTLA REG
|
||||
;
|
||||
#IF (ASCIINTS)
|
||||
;
|
||||
#IF (INTMODE == 2)
|
||||
#IF (INTMODE > 0)
|
||||
;
|
||||
ASCI0_IVT .EQU IVT(INT_SER0)
|
||||
ASCI1_IVT .EQU IVT(INT_SER1)
|
||||
@@ -125,25 +125,19 @@ ASCI_PREINIT2:
|
||||
;
|
||||
#IF (ASCIINTS)
|
||||
;
|
||||
#IF (INTMODE >= 1)
|
||||
; Z180 ASCI INTERRUPTS OPERATE LIKE IM2 EVEN WHEN IM1 IS ACTIVE.
|
||||
;
|
||||
#IF (INTMODE > 0)
|
||||
; SETUP INT VECTORS AS APPROPRIATE
|
||||
LD A,(ASCI_DEV) ; GET DEVICE COUNT
|
||||
OR A ; SET FLAGS
|
||||
JR Z,ASCI_PREINIT3 ; IF ZERO, NO ASCI DEVICES, ABORT
|
||||
;
|
||||
#IF (INTMODE == 1)
|
||||
; ADD IM1 INT CALL LIST ENTRY
|
||||
LD HL,ASCI_INT ; GET INT VECTOR
|
||||
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
|
||||
#ENDIF
|
||||
;
|
||||
#IF (INTMODE == 2)
|
||||
; SETUP IM2 VECTORS
|
||||
LD HL,ASCI_INT0
|
||||
LD (ASCI0_IVT),HL ; IVT INDEX
|
||||
LD HL,ASCI_INT1
|
||||
LD (ASCI1_IVT),HL ; IVT INDEX
|
||||
#ENDIF
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
@@ -204,24 +198,6 @@ ASCI_INIT1:
|
||||
;
|
||||
#IF (INTMODE > 0)
|
||||
;
|
||||
; IM1 ENTRY POINT
|
||||
;
|
||||
ASCI_INT:
|
||||
; CHECK/HANDLE FIRST PORT
|
||||
LD A,(ASCI0_CFG + 1) ; GET ASCI TYPE FOR FIRST ASCI
|
||||
OR A ; SET FLAGS
|
||||
CALL NZ,ASCI_INT0 ; CALL IF EXISTS
|
||||
RET NZ ; DONE IF INT HANDLED
|
||||
;
|
||||
; CHECK/HANDLE SECOND PORT
|
||||
LD A,(ASCI1_CFG + 1) ; GET ASCI TYPE FOR SECOND ASCI
|
||||
OR A ; SET FLAGS
|
||||
CALL NZ,ASCI_INT1 ; CALL IF EXISTS
|
||||
;
|
||||
RET ; DONE
|
||||
;
|
||||
; IM2 ENTRY POINTS
|
||||
;
|
||||
ASCI_INT0:
|
||||
; INTERRUPT HANDLER FOR FIRST ASCI (ASCI0)
|
||||
LD IY,ASCI0_CFG ; POINT TO ASCI0 CFG
|
||||
|
||||
303
Source/HBIOS/cfg_duo.asm
Normal file
303
Source/HBIOS/cfg_duo.asm
Normal file
@@ -0,0 +1,303 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR DUODYNE
|
||||
;==================================================================================================
|
||||
;
|
||||
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
|
||||
; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD
|
||||
; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY
|
||||
; UNDER THIS DIRECTORY.
|
||||
;
|
||||
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
|
||||
; FOR THE PLATFORM.
|
||||
;
|
||||
#DEFINE PLATFORM_NAME "Duodyne", " [", CONFIG, "]"
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_DUO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
|
||||
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
|
||||
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
|
||||
;
|
||||
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT
|
||||
;
|
||||
CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO
|
||||
CPUSPDDEF .EQU SPD_UNSUP ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW
|
||||
CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
DEFSERCFG .EQU SER_38400_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
|
||||
;
|
||||
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED)
|
||||
MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH]
|
||||
MPGSEL_0 .EQU $50 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGSEL_1 .EQU $51 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGSEL_2 .EQU $52 ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGSEL_3 .EQU $53 ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGENA .EQU $54 ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY)
|
||||
;
|
||||
RTCIO .EQU $94 ; RTC LATCH REGISTER ADR
|
||||
;
|
||||
KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT
|
||||
KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS
|
||||
;
|
||||
CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
|
||||
CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU TRUE ; ENABLE CTC PERIODIC TIMER
|
||||
CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256]
|
||||
CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256)
|
||||
CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3)
|
||||
CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3)
|
||||
CTCOSC .EQU (4915200/8) ; CTC CLOCK FREQUENCY
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $56 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
FPLED_DSKACT .EQU FALSE ; 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
|
||||
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
|
||||
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]
|
||||
MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
|
||||
;
|
||||
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC]
|
||||
DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!)
|
||||
;
|
||||
DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM)
|
||||
DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS
|
||||
;
|
||||
BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM)
|
||||
BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
|
||||
;
|
||||
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
;
|
||||
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
|
||||
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
|
||||
;
|
||||
DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM)
|
||||
DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF]
|
||||
;
|
||||
DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM)
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ
|
||||
UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS
|
||||
UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED
|
||||
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
|
||||
UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
|
||||
UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART
|
||||
UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU TRUE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM)
|
||||
;
|
||||
ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
;
|
||||
SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT
|
||||
SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED)
|
||||
SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
|
||||
SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R]
|
||||
SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR
|
||||
SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG
|
||||
SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG
|
||||
SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
;
|
||||
XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
|
||||
VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30]
|
||||
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
|
||||
CVDUMODE .EQU CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC]
|
||||
CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
|
||||
GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM)
|
||||
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .EQU TMSMODE_MBC ; 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)
|
||||
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
|
||||
MDRAM .EQU TRUE ; MD: ENABLE RAM DISK
|
||||
MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM
|
||||
;
|
||||
;
|
||||
FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .EQU FDMODE_MBC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC]
|
||||
FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2)
|
||||
FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL)
|
||||
FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS
|
||||
FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
;
|
||||
RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER
|
||||
RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4)
|
||||
;
|
||||
IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH
|
||||
IDE0MODE .EQU IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC]
|
||||
IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS
|
||||
IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O
|
||||
IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O
|
||||
IDE0A8BIT .EQU FALSE ; IDE 0A (MASTER): 8 BIT XFER
|
||||
IDE0B8BIT .EQU FALSE ; IDE 0B (MASTER): 8 BIT XFER
|
||||
IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC]
|
||||
IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS
|
||||
IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O
|
||||
IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O
|
||||
IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER
|
||||
IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER
|
||||
IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC]
|
||||
IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS
|
||||
IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O
|
||||
IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O
|
||||
IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER
|
||||
IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER
|
||||
;
|
||||
PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP
|
||||
PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR
|
||||
PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER
|
||||
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
|
||||
PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR
|
||||
PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER
|
||||
PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
|
||||
PPIDE2BASE .EQU $14 ; PPIDE 2: PPI REGISTERS BASE ADR
|
||||
PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER
|
||||
PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
|
||||
;
|
||||
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR]
|
||||
SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE
|
||||
SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY
|
||||
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE
|
||||
;
|
||||
PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT
|
||||
PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
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 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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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)
|
||||
PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD
|
||||
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
|
||||
PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI
|
||||
;
|
||||
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
|
||||
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
|
||||
;
|
||||
SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
|
||||
SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD
|
||||
SNMODE .EQU SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM]
|
||||
;
|
||||
AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD
|
||||
AYMODE .EQU AYMODE_MBC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC]
|
||||
;
|
||||
SPKENABLE .EQU TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $40 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_DUO ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -60,6 +60,9 @@ CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -133,6 +136,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
@@ -243,6 +247,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -256,6 +262,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.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
|
||||
@@ -275,7 +283,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -87,6 +87,9 @@ CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3)
|
||||
CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3)
|
||||
CTCOSC .EQU 614400 ; CTC CLOCK FREQUENCY
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -108,10 +111,13 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -166,6 +172,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
@@ -302,6 +309,9 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
|
||||
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
ESPCONENABLE .EQU TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
;
|
||||
@@ -320,17 +330,24 @@ 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]
|
||||
PPAMODE .EQU PPAMODE_SPP ; 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]
|
||||
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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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)
|
||||
@@ -354,7 +371,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -54,6 +54,9 @@ CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3)
|
||||
CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3)
|
||||
CTCOSC .EQU (4915200/8) ; CTC CLOCK FREQUENCY
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -73,10 +76,13 @@ LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -124,6 +130,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU TRUE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
@@ -226,6 +233,9 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
ESPCONENABLE .EQU TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
;
|
||||
@@ -255,6 +265,13 @@ 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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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)
|
||||
@@ -278,7 +295,7 @@ SPKENABLE .EQU TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_MBC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_MBC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -60,6 +60,9 @@ CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -79,10 +82,13 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -130,6 +136,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU TRUE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
@@ -240,6 +247,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
|
||||
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -258,6 +267,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.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)
|
||||
@@ -281,7 +292,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -62,6 +62,9 @@ CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -81,10 +84,13 @@ LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU N8_PPI0 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU N8_PPI0 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU N8_PPI0 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -132,6 +138,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU TRUE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
@@ -238,6 +245,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -251,6 +260,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.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)
|
||||
@@ -274,7 +285,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -60,6 +60,9 @@ CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -139,6 +142,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
@@ -249,6 +253,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -260,7 +266,7 @@ 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
|
||||
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)
|
||||
@@ -277,6 +283,13 @@ 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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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
|
||||
@@ -296,7 +309,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z280 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -60,6 +60,9 @@ CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -133,6 +136,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
@@ -253,6 +257,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -264,7 +270,7 @@ 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
|
||||
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)
|
||||
@@ -281,6 +287,13 @@ 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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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
|
||||
@@ -300,7 +313,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -57,6 +57,9 @@ CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3)
|
||||
CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3)
|
||||
CTCOSC .EQU CPUOSC ; CTC CLOCK FREQUENCY
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -132,6 +135,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
@@ -247,6 +251,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -275,6 +281,13 @@ 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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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
|
||||
@@ -294,7 +307,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_RPH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_RPH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU TRUE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -60,6 +60,9 @@ CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -79,10 +82,13 @@ LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU RPH_PPI0 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU RPH_PPI0 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU RPH_PPI0 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -130,6 +136,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
@@ -227,6 +234,8 @@ PRPCONENABLE .EQU FALSE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -240,6 +249,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
;
|
||||
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
|
||||
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
|
||||
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
|
||||
@@ -263,7 +274,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
309
Source/HBIOS/cfg_s100.asm
Normal file
309
Source/HBIOS/cfg_s100.asm
Normal file
@@ -0,0 +1,309 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR S100 Z180
|
||||
;==================================================================================================
|
||||
;
|
||||
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
|
||||
; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD
|
||||
; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY
|
||||
; UNDER THIS DIRECTORY.
|
||||
;
|
||||
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
|
||||
; FOR THE PLATFORM.
|
||||
;
|
||||
#DEFINE PLATFORM_NAME "S100", " [", CONFIG, "]"
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_S100 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
|
||||
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
|
||||
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
|
||||
;
|
||||
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT
|
||||
;
|
||||
CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO
|
||||
CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW
|
||||
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
DEFSERCFG .EQU SER_57600_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
|
||||
;
|
||||
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED)
|
||||
MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH]
|
||||
RAMLOC .EQU 19 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE
|
||||
RAMBIAS .EQU (1 << (RAMLOC - 10)) ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE
|
||||
MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY)
|
||||
MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY)
|
||||
;
|
||||
Z180_BASE .EQU $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS
|
||||
Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER
|
||||
;
|
||||
RTCIO .EQU $0C ; RTC LATCH REGISTER ADR
|
||||
;
|
||||
KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT
|
||||
KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS
|
||||
;
|
||||
CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
|
||||
CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
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 TRUE ; ENABLES STATUS LED (SINGLE LED)
|
||||
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
|
||||
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]
|
||||
MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
|
||||
;
|
||||
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC]
|
||||
DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!)
|
||||
;
|
||||
DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM)
|
||||
DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS
|
||||
;
|
||||
BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM)
|
||||
BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
|
||||
;
|
||||
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
;
|
||||
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
|
||||
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
|
||||
;
|
||||
DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM)
|
||||
DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF]
|
||||
;
|
||||
DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM)
|
||||
DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2)
|
||||
DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP
|
||||
DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG
|
||||
DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG
|
||||
DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP
|
||||
DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG
|
||||
DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ
|
||||
UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS
|
||||
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
|
||||
UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
|
||||
UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART
|
||||
UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS
|
||||
ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED)
|
||||
ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG
|
||||
ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG
|
||||
;
|
||||
Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM)
|
||||
;
|
||||
ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
;
|
||||
SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT
|
||||
SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED)
|
||||
SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
|
||||
SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R]
|
||||
SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR
|
||||
SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0ACFG .EQU SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG
|
||||
SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0BCFG .EQU SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG
|
||||
SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R]
|
||||
SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR
|
||||
SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO1ACFG .EQU SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG
|
||||
SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO1BCFG .EQU SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG
|
||||
SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
;
|
||||
XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG
|
||||
;
|
||||
VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
|
||||
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
|
||||
GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM)
|
||||
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
|
||||
MDRAM .EQU TRUE ; MD: ENABLE RAM DISK
|
||||
MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM
|
||||
;
|
||||
FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC]
|
||||
FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2)
|
||||
FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL)
|
||||
FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS
|
||||
FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
;
|
||||
RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER
|
||||
;
|
||||
IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH
|
||||
IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC]
|
||||
IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS
|
||||
IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O
|
||||
IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O
|
||||
IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER
|
||||
IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER
|
||||
IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC]
|
||||
IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS
|
||||
IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O
|
||||
IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O
|
||||
IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER
|
||||
IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER
|
||||
IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC]
|
||||
IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS
|
||||
IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O
|
||||
IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O
|
||||
IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER
|
||||
IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER
|
||||
;
|
||||
PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP
|
||||
PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR
|
||||
PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER
|
||||
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
|
||||
PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR
|
||||
PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER
|
||||
PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
|
||||
PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR
|
||||
PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER
|
||||
PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
|
||||
;
|
||||
SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .EQU SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR]
|
||||
SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE
|
||||
SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY
|
||||
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE
|
||||
SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011
|
||||
;
|
||||
PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT
|
||||
PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
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 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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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
|
||||
;
|
||||
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
|
||||
;
|
||||
SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
|
||||
SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD
|
||||
SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM]
|
||||
;
|
||||
AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD
|
||||
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC]
|
||||
;
|
||||
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -54,6 +54,9 @@ CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3)
|
||||
CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3)
|
||||
CTCOSC .EQU 614400 ; CTC CLOCK FREQUENCY
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -73,10 +76,13 @@ LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -124,6 +130,7 @@ UARTMFP .EQU TRUE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU TRUE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
@@ -225,6 +232,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
;
|
||||
@@ -239,6 +248,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.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)
|
||||
@@ -262,7 +273,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -60,6 +60,9 @@ CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT
|
||||
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
|
||||
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -67,7 +70,7 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPLED_IO .EQU $0D ; FP: PORT ADDRESS FOR FP 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
|
||||
@@ -133,6 +136,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
@@ -243,6 +247,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -271,6 +277,13 @@ 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
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM)
|
||||
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2)
|
||||
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014]
|
||||
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ
|
||||
;
|
||||
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
|
||||
@@ -290,7 +303,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "../UBIOS/ubios.inc"
|
||||
;
|
||||
;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_Z80RETRO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_Z80RETRO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -57,6 +57,9 @@ CTCPRECH .EQU 0 ; PRESCALE CHANNEL (0-3)
|
||||
CTCTIMCH .EQU 1 ; TIMER CHANNEL (0-3)
|
||||
CTCOSC .EQU 7372800 ; CTC CLOCK FREQUENCY
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -76,10 +79,13 @@ LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU $00 ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -122,6 +128,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
@@ -200,6 +207,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
|
||||
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -210,6 +219,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.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
|
||||
@@ -223,7 +234,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; BIOS_[WBW|UNA]: HARDWARE BIOS
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -46,6 +46,9 @@ KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS
|
||||
;
|
||||
CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -65,10 +68,13 @@ LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -111,6 +117,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
@@ -171,6 +178,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
|
||||
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -181,6 +190,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.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
|
||||
@@ -194,7 +205,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
#INCLUDE "hbios.inc"
|
||||
;
|
||||
PLATFORM .EQU PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO]
|
||||
PLATFORM .EQU PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO]
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
@@ -57,6 +57,9 @@ CTCPRECH .EQU 0 ; PRESCALE CHANNEL (0-3)
|
||||
CTCTIMCH .EQU 1 ; TIMER CHANNEL (0-3)
|
||||
CTCOSC .EQU 921600 ; CTC CLOCK FREQUENCY
|
||||
;
|
||||
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS
|
||||
;
|
||||
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
;
|
||||
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
@@ -76,10 +79,13 @@ LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
|
||||
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
|
||||
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
|
||||
;
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY
|
||||
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG]
|
||||
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI
|
||||
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ)
|
||||
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY
|
||||
DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY
|
||||
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI
|
||||
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI
|
||||
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ)
|
||||
;
|
||||
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE
|
||||
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
@@ -122,6 +128,7 @@ UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
|
||||
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
|
||||
UARTDUO .EQU FALSE ; UART: AUTO-DETECT DUODYNE UART
|
||||
;
|
||||
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
;
|
||||
@@ -182,6 +189,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
|
||||
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
|
||||
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
|
||||
;
|
||||
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
|
||||
@@ -192,6 +201,8 @@ PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
|
||||
;
|
||||
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.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
|
||||
@@ -205,7 +216,7 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
|
||||
;
|
||||
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)
|
||||
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO)
|
||||
;
|
||||
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
|
||||
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)
|
||||
|
||||
@@ -31,12 +31,7 @@ BUFLEN .EQU 40 ; INPUT LINE LENGTH
|
||||
JP DSKY_ENTRY
|
||||
JP UART_ENTRY
|
||||
;
|
||||
#IF DSKYENABLE
|
||||
#DEFINE USEDELAY
|
||||
ENA_XM .EQU FALSE ; NO ROOM FOR BOTH DSKY+XMODEM
|
||||
#ELSE
|
||||
ENA_XM .EQU TRUE ; INCLUDE XMODEM IF SPACE AVAILABLE
|
||||
#ENDIF
|
||||
ENA_XM .EQU TRUE ; INCLUDE XMODEM
|
||||
;
|
||||
ENA_MBC6502 .EQU FALSE ; ENABLE OR DISABLE MBC6502 OPTION
|
||||
;
|
||||
@@ -149,10 +144,7 @@ SERIALCMDLOOP:
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
INITIALIZE:
|
||||
;LD A,$C3 ; JP OPCODE
|
||||
;LD (0),A ; STORE AT $0000
|
||||
;LD (1),HL ; STORE AT $0001
|
||||
|
||||
;
|
||||
#IF (BIOS == BIOS_UNA)
|
||||
; INSTALL UNA INVOCATION VECTOR FOR RST 08
|
||||
LD A,$C3 ; JP INSTRUCTION
|
||||
@@ -160,14 +152,6 @@ INITIALIZE:
|
||||
LD HL,($FFFE) ; UNA ENTRY VECTOR
|
||||
LD (9),HL ; STORE AT 0x0009
|
||||
#ENDIF
|
||||
|
||||
#IF DSKYENABLE
|
||||
LD B,BF_SYSGET ; HBIOS FUNC=GET SYS INFO
|
||||
LD C,BF_SYSGET_CPUINFO ; HBIOS SUBFUNC=GET CPU INFO
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
LD A,L ; PUT SPEED IN MHZ IN ACCUM
|
||||
CALL DELAY_INIT
|
||||
#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
@@ -1278,14 +1262,6 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):"
|
||||
;
|
||||
#IF DSKYENABLE
|
||||
;
|
||||
#DEFINE DSKY_KBD
|
||||
#IF (DSKYMODE == DSKYMODE_V1)
|
||||
#INCLUDE "dsky.asm"
|
||||
#ENDIF
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
#INCLUDE "dskyng.asm"
|
||||
#ENDIF
|
||||
;
|
||||
KY_PR .EQU KY_FW ; USE [FW] FOR [PR] (PORT READ)
|
||||
KY_PW .EQU KY_BK ; USE [BW] FOR [PW] (PORT WRITE)
|
||||
;
|
||||
@@ -1295,8 +1271,9 @@ KY_PW .EQU KY_BK ; USE [BW] FOR [PW] (PORT WRITE)
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
DSKY_ENTRY:
|
||||
; SHOULD WE DO SOMETHING HERE TO CONFIRM THAT A DSKY
|
||||
; IS ACTUALLY OPERATING???
|
||||
LD SP,MON_STACK ; SET THE STACK POINTER
|
||||
;EI ; INTS OK NOW
|
||||
LD HL,DSKY_ENTRY ; RESTART ADDRESS
|
||||
CALL INITIALIZE
|
||||
;
|
||||
@@ -1305,12 +1282,7 @@ DSKY_ENTRY:
|
||||
; START UP THE SYSTEM WITH THE FRONT PANEL INTERFACE
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
CALL DSKY_PREINIT ; INITIALIZE DSKY
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_BEEP
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
;__COMMAND_PARSE______________________________________________________________
|
||||
;
|
||||
@@ -1320,17 +1292,12 @@ DSKY_ENTRY:
|
||||
FRONTPANELLOOP:
|
||||
LD HL,CPUUP ; SET POINTER TO CPU UP MSG
|
||||
CALL DSKY_SHOW ; DISPLAY UNENCODED
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTCMDKEYS
|
||||
CALL DSKY_L1ON
|
||||
#ENDIF
|
||||
|
||||
CALL KB_GET ; GET KEY FROM KB
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL KB_GET ; GET KEY FROM DSKY
|
||||
PUSH AF
|
||||
CALL DSKY_L1OFF
|
||||
#ENDIF
|
||||
POP AF
|
||||
|
||||
FRONTPANELLOOP1:
|
||||
CP KY_PR ; IS PORT READ?
|
||||
@@ -1366,11 +1333,7 @@ DOBOOT:
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
DOPORTREAD:
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTNUMKEYS
|
||||
#ENDIF
|
||||
|
||||
CALL GETPORT ; GET PORT INTO A
|
||||
PORTREADLOOP:
|
||||
LD C,A ; STORE PORT IN "C"
|
||||
@@ -1393,11 +1356,7 @@ PORTREADGETKEY:
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
DOPORTWRITE:
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTNUMKEYS
|
||||
#ENDIF
|
||||
|
||||
CALL GETPORT ; GET PORT INTO A
|
||||
PORTWRITELOOP:
|
||||
LD L,A ; SAVE PORT NUM
|
||||
@@ -1419,18 +1378,10 @@ PORTWRITEGETKEY:
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
DOGO:
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTNUMKEYS
|
||||
#ENDIF
|
||||
|
||||
CALL GETADDR ; GET ADDRESS INTO HL
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
PUSH HL
|
||||
CALL DSKY_HIGHLIGHTKEYSOFF
|
||||
#ENDIF
|
||||
|
||||
PUSH HL ; EXEC ADR TO TOS
|
||||
LD HL,GOTO ; POINT TO "GO" MSG
|
||||
CALL INITBUF
|
||||
POP HL
|
||||
@@ -1450,11 +1401,7 @@ DOGO:
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
DOEXAMINE:
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTNUMKEYS
|
||||
#ENDIF
|
||||
|
||||
CALL GETADDR ; GET ADDRESS INTO HL
|
||||
EXAMINELOOP:
|
||||
LD DE,DISPLAYBUF+0
|
||||
@@ -1470,11 +1417,7 @@ EXAMINELOOP:
|
||||
LD A,(HL) ; GET VALUE FROM ADDRESS IN HL
|
||||
CALL PUTVALUE
|
||||
CALL ENCDISPLAY ; DISPLAY BUFFER ON DISPLAYS
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTFWDKEYS
|
||||
#ENDIF
|
||||
|
||||
EXAMINEGETKEY:
|
||||
CALL KB_GET ; GET KEY FROM KB
|
||||
CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP
|
||||
@@ -1492,11 +1435,7 @@ EXAMINEFW:
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
DODEPOSIT:
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTNUMKEYS
|
||||
#ENDIF
|
||||
|
||||
CALL GETADDR ; GET ADDRESS INTO HL
|
||||
DEPOSITLOOP:
|
||||
LD DE,DISPLAYBUF+0
|
||||
@@ -1513,11 +1452,7 @@ DEPOSITLOOP:
|
||||
LD DE,DISPLAYBUF+6 ; DISPLAY WRITTEN MEM VALUE
|
||||
CALL PUTVALUE ; ... WITHOUT DP'S
|
||||
CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
CALL DSKY_HIGHLIGHTFWDKEYS
|
||||
#ENDIF
|
||||
|
||||
DEPOSITGETKEY:
|
||||
CALL KB_GET ; GET KEY FROM KB
|
||||
CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP
|
||||
@@ -1684,6 +1619,7 @@ KB_GET:
|
||||
PUSH DE
|
||||
PUSH HL ; SAVE HL
|
||||
CALL DSKY_GETKEY ; GET A KEY
|
||||
LD A,E ; PUT KEY CODE IN A
|
||||
CP KY_EN ; ENTER?
|
||||
JR Z,KB_GET1 ; IF YES, RET TO CALLER
|
||||
CP $10 ; HEX DIGIT?
|
||||
@@ -1710,7 +1646,7 @@ INITBUF:
|
||||
;
|
||||
;__ENCDISPLAY_________________________________________________________________
|
||||
;
|
||||
; DISPLAY CONTENTS OF DISPLAYBUF DECODED PER SEGDECODE TABLE
|
||||
; DISPLAY CONTENTS OF DISPLAYBUF ENCODED PER SEGDECODE TABLE
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
ENCDISPLAY:
|
||||
@@ -1720,7 +1656,7 @@ ENCDISPLAY:
|
||||
;
|
||||
;__ENCBUF_____________________________________________________________________
|
||||
;
|
||||
; DISPLAY CONTENTS OF BUFFER AT HL DECODED PER SEGDECODE TABLE
|
||||
; DISPLAY CONTENTS OF BUFFER AT HL ENCODED PER SEGDECODE TABLE
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
ENCBUF:
|
||||
@@ -1736,7 +1672,6 @@ ENCBUF1:
|
||||
INC HL ; BUMP TO NEXT BYTE FOR NEXT PASS
|
||||
PUSH AF ; SAVE IT
|
||||
AND $80 ; ISOLATE HI BIT (DP)
|
||||
;XOR $80 ; FLIP IT
|
||||
LD C,A ; SAVE IN C
|
||||
POP AF ; RECOVER ORIGINAL
|
||||
AND $7F ; REMOVE HI BIT (DP)
|
||||
@@ -1757,36 +1692,62 @@ ENCBUF1:
|
||||
POP HL ; RESTORE HL
|
||||
RET
|
||||
;
|
||||
#IF (DSKYMODE == DSKYMODE_V1)
|
||||
;
|
||||
CPUUP .DB $04,$4B,$6E,$3B,$00,$3B,$6E,$04 ; "-CPU UP-" (RAW SEG)
|
||||
MSGBOOT .DB $7F,$1D,$1D,$0F,$A0,$00,$00,$00 ; "Boot! " (RAW SEG)
|
||||
ADDR .DB $17,$18,$19,$10,$00,$00,$00,$00 ; "Adr 0000" (ENCODED)
|
||||
PORT .DB $13,$14,$15,$16,$10,$10,$00,$00 ; "Port 00" (ENCODED)
|
||||
GOTO .DB $1A,$14,$10,$10,$00,$00,$00,$00 ; "Go 0000" (ENCODED)
|
||||
;
|
||||
;_HEX_7_SEG_DECODE_TABLE______________________________________________________
|
||||
;
|
||||
; SET BIT 7 TO DISPLAY W/ DECIMAL POINT
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
SEGDECODE:
|
||||
; DSKY INTERFACE ROUTINES
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
; POS $00 $01 $02 $03 $04 $05 $06 $07
|
||||
; GLYPH '0' '1' '2' '3' '4' '5' '6' '7'
|
||||
.DB $7B, $30, $6D, $75, $36, $57, $5F, $70
|
||||
DSKY_GETKEY:
|
||||
LD B,BF_DSKYGETKEY
|
||||
RST 08
|
||||
RET
|
||||
;
|
||||
; POS $08 $09 $0A $0B $0C $0D $0E $0F
|
||||
; GLYPH '8' '9' 'A' 'B' 'C' 'D' 'E' 'F'
|
||||
.DB $7F, $77, $7E, $1F, $4B, $3D, $4F, $4E
|
||||
DSKY_SHOW:
|
||||
LD B,BF_DSKYSHOWSEG
|
||||
RST 08
|
||||
RET
|
||||
;
|
||||
; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A
|
||||
; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G'
|
||||
.DB $00, $04, $00, $6E, $1D, $0C, $0F, $7E, $3D, $0C, $5B
|
||||
DSKY_BEEP:
|
||||
LD B,BF_DSKYBEEP
|
||||
RST 08
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
DSKY_L1ON:
|
||||
LD E,1
|
||||
JR DSKY_STATLED
|
||||
DSKY_L1OFF:
|
||||
LD E,0
|
||||
DSKY_STATLED:
|
||||
LD B,BF_DSKYSTATLED
|
||||
LD D,0
|
||||
RST 08
|
||||
RET
|
||||
;
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
DSKY_PUTLED:
|
||||
LD B,BF_DSKYKEYLEDS
|
||||
RST 08
|
||||
RET
|
||||
;
|
||||
DSKY_HIGHLIGHTFWDKEYS:
|
||||
LD HL,DSKY_HIGHLIGHTFWDKEYLEDS
|
||||
JR DSKY_PUTLED
|
||||
;
|
||||
DSKY_HIGHLIGHTCMDKEYS:
|
||||
LD HL,DSKY_HIGHLIGHTCMDKEYLEDS
|
||||
JR DSKY_PUTLED
|
||||
;
|
||||
DSKY_HIGHLIGHTNUMKEYS:
|
||||
LD HL,DSKY_HIGHLIGHTNUMKEYLEDS
|
||||
JR DSKY_PUTLED
|
||||
;
|
||||
DSKY_HIGHLIGHTKEYSOFF:
|
||||
LD HL,DSKY_HIGHLIGHTKEYLEDSOFF
|
||||
JR DSKY_PUTLED
|
||||
;
|
||||
DSKY_HIGHLIGHTFWDKEYLEDS .DB $00,$00,$00,$30,$00,$00,$00,$00
|
||||
DSKY_HIGHLIGHTCMDKEYLEDS .DB $20,$00,$20,$3F,$00,$00,$00,$00
|
||||
DSKY_HIGHLIGHTNUMKEYLEDS .DB $1F,$3F,$1F,$30,$00,$00,$00,$00
|
||||
DSKY_HIGHLIGHTKEYLEDSOFF .DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
;
|
||||
CPUUP .DB $40,$39,$73,$3E,$00,$3E,$73,$40 ; "-CPU UP-" (RAW SEG)
|
||||
MSGBOOT .DB $7F,$5C,$5C,$78,$82,$00,$00,$00 ; "Boot! " (RAW SEG)
|
||||
@@ -1813,31 +1774,8 @@ SEGDECODE:
|
||||
; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G'
|
||||
.DB $00, $40, $00, $73, $5C, $50, $78, $77, $5E, $50, $3D
|
||||
;
|
||||
|
||||
DSKY_HIGHLIGHTFWDKEYS:
|
||||
CALL DSKY_PUTLED
|
||||
.DB $00,$00,$00,$30,$00,$00,$00,$00
|
||||
RET
|
||||
|
||||
DSKY_HIGHLIGHTCMDKEYS:
|
||||
|
||||
CALL DSKY_PUTLED
|
||||
.DB $20,$00,$20,$3F,$00,$00,$00,$00
|
||||
RET
|
||||
|
||||
DSKY_HIGHLIGHTNUMKEYS:
|
||||
CALL DSKY_PUTLED
|
||||
.DB $1F,$3F,$1F,$30,$00,$00,$00,$00
|
||||
RET
|
||||
|
||||
DSKY_HIGHLIGHTKEYSOFF:
|
||||
|
||||
CALL DSKY_PUTLED
|
||||
.DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
DISPLAYBUF: .FILL 8,0
|
||||
DSKY_BUF .FILL 8,0
|
||||
;
|
||||
#ELSE
|
||||
;
|
||||
@@ -1949,130 +1887,6 @@ ADDHLA:
|
||||
INC H
|
||||
RET
|
||||
;
|
||||
; DELAY 16US (CPU SPEED COMPENSATED) INCUDING CALL/RET INVOCATION
|
||||
; REGISTER A AND FLAGS DESTROYED
|
||||
; NO COMPENSATION FOR Z180 MEMORY WAIT STATES
|
||||
; THERE IS AN OVERHEAD OF 3TS PER INVOCATION
|
||||
; IMPACT OF OVERHEAD DIMINISHES AS CPU SPEED INCREASES
|
||||
;
|
||||
; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US + 3TS DELAY
|
||||
; NOTE: CPUSCL MUST BE >= 1!
|
||||
;
|
||||
; EXAMPLE: 8MHZ CPU (DELAY GOAL IS 16US)
|
||||
; LOOP = ((6 * 16) - 5) = 91TS
|
||||
; TOTAL COST = (91 + 40) = 131TS
|
||||
; ACTUAL DELAY = (131 / 8) = 16.375US
|
||||
;
|
||||
; --- TOTAL COST = (LOOP COST + 40) TS -----------------+
|
||||
DELAY: ; 17TS (FROM INVOKING CALL) |
|
||||
LD A,(CPUSCL) ; 13TS |
|
||||
; |
|
||||
DELAY1: ; |
|
||||
; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ |
|
||||
DEC A ; 4TS | |
|
||||
#IF (BIOS == BIOS_WBW) ; | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | |
|
||||
OR A ; +4TS FOR Z180 | |
|
||||
#ENDIF ; | |
|
||||
#ENDIF ; | |
|
||||
JR NZ,DELAY1 ; 12TS (NZ) / 7TS (Z) | |
|
||||
; ----------------------------------------------+ |
|
||||
; |
|
||||
RET ; 10TS (RETURN) |
|
||||
;-------------------------------------------------------+
|
||||
;
|
||||
; DELAY 16US * DE (CPU SPEED COMPENSATED)
|
||||
; REGISTER DE, A, AND FLAGS DESTROYED
|
||||
; NO COMPENSATION FOR Z180 MEMORY WAIT STATES
|
||||
; THERE IS A 27TS OVERHEAD FOR CALL/RET PER INVOCATION
|
||||
; IMPACT OF OVERHEAD DIMINISHES AS DE AND/OR CPU SPEED INCREASES
|
||||
;
|
||||
; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US OUTER LOOP COST
|
||||
; NOTE: CPUSCL MUST BE > 0!
|
||||
;
|
||||
; EXAMPLE: 8MHZ CPU, DE=6250 (DELAY GOAL IS .1 SEC OR 100,000US)
|
||||
; INNER LOOP = ((16 * 6) - 5) = 91TS
|
||||
; OUTER LOOP = ((91 + 37) * 6250) = 800,000TS
|
||||
; ACTUAL DELAY = ((800,000 + 27) / 8) = 100,003US
|
||||
;
|
||||
; --- TOTAL COST = (OUTER LOOP + 27) TS ------------------------+
|
||||
VDELAY: ; 17TS (FROM INVOKING CALL) |
|
||||
; |
|
||||
; --- OUTER LOOP = ((INNER LOOP + 37) * DE) TS ---------+ |
|
||||
LD A,(CPUSCL) ; 13TS | |
|
||||
; | |
|
||||
VDELAY1: ; | |
|
||||
; --- INNER LOOP = ((CPUSCL * 16) - 5) TS ------+ | |
|
||||
#IF (BIOS == BIOS_WBW) ; | | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | | |
|
||||
OR A ; +4TS FOR Z180 | | |
|
||||
#ENDIF ; | | |
|
||||
#ENDIF ; | | |
|
||||
DEC A ; 4TS | | |
|
||||
JR NZ,VDELAY1 ; 12TS (NZ) / 7TS (Z) | | |
|
||||
; ----------------------------------------------+ | |
|
||||
; | |
|
||||
DEC DE ; 6TS | |
|
||||
#IF (BIOS == BIOS_WBW) ; | | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | |
|
||||
OR A ; +4TS FOR Z180 | |
|
||||
#ENDIF ; | |
|
||||
#ENDIF ; | |
|
||||
LD A,D ; 4TS | |
|
||||
OR E ; 4TS | |
|
||||
JP NZ,VDELAY ; 10TS | |
|
||||
;-------------------------------------------------------+ |
|
||||
; |
|
||||
RET ; 10TS (FINAL RETURN) |
|
||||
;---------------------------------------------------------------+
|
||||
;
|
||||
; DELAY ABOUT 0.5 SECONDS
|
||||
; 500000US / 16US = 31250
|
||||
;
|
||||
LDELAY:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
LD DE,31250
|
||||
CALL VDELAY
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; INITIALIZE DELAY SCALER BASED ON OPERATING CPU SPEED
|
||||
; ENTER WITH A = CPU SPEED IN MHZ
|
||||
;
|
||||
DELAY_INIT:
|
||||
CP 3 ; TEST FOR <= 2 (SPECIAL HANDLING)
|
||||
JR C,DELAY_INIT1 ; IF <= 2, SPECIAL PROCESSING
|
||||
SUB 2 ; ADJUST AS REQUIRED BY DELAY FUNCTIONS
|
||||
JR DELAY_INIT2 ; AND CONTINUE
|
||||
DELAY_INIT1:
|
||||
LD A,1 ; USE THE MIN VALUE OF 1
|
||||
DELAY_INIT2:
|
||||
LD (CPUSCL),A ; UPDATE CPU SCALER VALUE
|
||||
RET
|
||||
|
||||
#IF (CPUMHZ < 3)
|
||||
CPUSCL .DB 1 ; CPU SCALER MUST BE > 0
|
||||
#ELSE
|
||||
CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
|
||||
#ENDIF
|
||||
;
|
||||
; SHORT DELAY FUNCTIONS. NO CLOCK SPEED COMPENSATION, SO THEY
|
||||
; WILL RUN LONGER ON SLOWER SYSTEMS. THE NUMBER INDICATES THE
|
||||
; NUMBER OF CALL/RET INVOCATIONS. A SINGLE CALL/RET IS
|
||||
; 27 T-STATES ON A Z80, 25 T-STATES ON A Z180
|
||||
;
|
||||
; ; Z80 Z180
|
||||
; ; ---- ----
|
||||
DLY64: CALL DLY32 ; 1728 1600
|
||||
DLY32: CALL DLY16 ; 864 800
|
||||
DLY16: CALL DLY8 ; 432 400
|
||||
DLY8: CALL DLY4 ; 216 200
|
||||
DLY4: CALL DLY2 ; 108 100
|
||||
DLY2: CALL DLY1 ; 54 50
|
||||
DLY1: RET ; 27 25
|
||||
;
|
||||
;
|
||||
;
|
||||
.FILL 16,0 ; SET MINIMUM STACK DEPTH
|
||||
|
||||
@@ -2,6 +2,18 @@
|
||||
; Z80 DMA DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF ((DMAMODE == DMAMODE_ECB) | (DMAMODE == DMAMODE_MBC))
|
||||
DMA_IO .EQU DMABASE
|
||||
DMA_CTL .EQU DMABASE + 1
|
||||
DMA_USEHALF .EQU TRUE
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DMAMODE == DMAMODE_DUO)
|
||||
DMA_IO .EQU DMABASE
|
||||
DMA_CTL .EQU DMABASE + 3
|
||||
DMA_USEHALF .EQU FALSE
|
||||
#ENDIF
|
||||
;
|
||||
DMA_CONTINUOUS .equ %10111101 ; + Pulse
|
||||
DMA_BYTE .equ %10011101 ; + Pulse
|
||||
DMA_BURST .equ %11011101 ; + Pulse
|
||||
@@ -30,21 +42,18 @@ DMA_FORCE .EQU 0
|
||||
; DMA CLOCK SPEED CONTROL - OPTION TO SWITCH TO HALF CLOCK SPEED. MOST SYSTEMS NEED THIS.
|
||||
;==================================================================================================
|
||||
;
|
||||
DMA_USEHALF .equ TRUE ; USE CLOCK DIVIDER
|
||||
;
|
||||
#IF (DMA_USEHALF & (DMAMODE=DMAMODE_MBC))
|
||||
#DEFINE DMAIOHALF LD A,(HB_RTCVAL) \ AND ~%00001000 \ OUT (RTCIO),A
|
||||
#DEFINE DMAIOFULL PUSH AF \ LD A,(HB_RTCVAL) \ OUT (RTCIO),A \ POP AF
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DMA_USEHALF & (DMAMODE=DMAMODE_ECB))
|
||||
#DEFINE DMAIOHALF LD A,(HB_RTCVAL) \ OR %00001000 \ OUT (RTCIO),A
|
||||
#DEFINE DMAIOFULL PUSH AF \ LD A,(HB_RTCVAL) \ OUT (RTCIO),A \ POP AF
|
||||
#ENDIF
|
||||
;
|
||||
#IF (!DMA_USEHALF)
|
||||
#DEFINE DMAIOHALF \;
|
||||
#DEFINE DMAIOFULL \;
|
||||
#IF (DMA_USEHALF)
|
||||
#IF (DMAMODE=DMAMODE_MBC)
|
||||
#DEFINE DMAIOHALF LD A,(HB_RTCVAL) \ AND ~%00001000 \ OUT (RTCIO),A
|
||||
#DEFINE DMAIOFULL PUSH AF \ LD A,(HB_RTCVAL) \ OUT (RTCIO),A \ POP AF
|
||||
#ENDIF
|
||||
#IF (DMAMODE=DMAMODE_ECB)
|
||||
#DEFINE DMAIOHALF LD A,(HB_RTCVAL) \ OR %00001000 \ OUT (RTCIO),A
|
||||
#DEFINE DMAIOFULL PUSH AF \ LD A,(HB_RTCVAL) \ OUT (RTCIO),A \ POP AF
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#DEFINE DMAIOHALF \;
|
||||
#DEFINE DMAIOFULL \;
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
@@ -54,11 +63,11 @@ DMA_USEHALF .equ TRUE ; USE CLOCK DIVIDER
|
||||
DMA_INIT:
|
||||
CALL NEWLINE
|
||||
PRTS("DMA: IO=0x$") ; announce
|
||||
LD A, DMABASE
|
||||
LD A, DMA_IO
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
LD A,DMA_FORCE
|
||||
out (DMABASE+1),a ; force ready off
|
||||
out (DMA_CTL),a ; force ready off
|
||||
;
|
||||
DMAIOHALF
|
||||
;
|
||||
@@ -67,7 +76,7 @@ DMA_INIT:
|
||||
;
|
||||
ld hl,DMACode ; program the
|
||||
ld b,DMACode_Len ; dma command
|
||||
ld c,DMABASE ; block
|
||||
ld c,DMA_IO ; block
|
||||
;
|
||||
di
|
||||
otir ; load dma
|
||||
@@ -103,31 +112,31 @@ DMA_FAIL_FLAG:
|
||||
;==================================================================================================
|
||||
;
|
||||
DMAProbe:
|
||||
ld a,DMA_RESET
|
||||
out (DMABASE),a
|
||||
ld a,%01111101 ; R0-Transfer mode, A -> B, start address follows
|
||||
out (DMABASE),a
|
||||
ld a,DMA_RESET ; $C3
|
||||
out (DMA_IO),a
|
||||
ld a,%01111101 ; R0-Transfer mode, A -> B, start address follows $7D
|
||||
out (DMA_IO),a
|
||||
ld a,$cc
|
||||
out (DMABASE),a
|
||||
out (DMA_IO),a
|
||||
ld a,$dd
|
||||
out (DMABASE),a
|
||||
out (DMA_IO),a
|
||||
ld a,$e5
|
||||
out (DMABASE),a
|
||||
out (DMA_IO),a
|
||||
ld a,$1a
|
||||
out (DMABASE),a
|
||||
ld a,DMA_LOAD
|
||||
out (DMABASE),a
|
||||
out (DMA_IO),a
|
||||
ld a,DMA_LOAD ; $CF
|
||||
out (DMA_IO),a
|
||||
;
|
||||
ld a,DMA_READ_MASK_FOLLOWS ; set up
|
||||
out (DMABASE),a ; for
|
||||
ld a,%00011000 ; register
|
||||
out (DMABASE),a ; read
|
||||
ld a,DMA_START_READ_SEQUENCE
|
||||
out (DMABASE),a
|
||||
ld a,DMA_READ_MASK_FOLLOWS ; set up ; $BB
|
||||
out (DMA_IO),a ; for
|
||||
ld a,%00011000 ; register $18
|
||||
out (DMA_IO),a ; read
|
||||
ld a,DMA_START_READ_SEQUENCE ; $A7
|
||||
out (DMA_IO),a
|
||||
;
|
||||
in a,(DMABASE) ; read in
|
||||
in a,(DMA_IO) ; read in
|
||||
ld c,a ; address
|
||||
in a,(DMABASE)
|
||||
in a,(DMA_IO)
|
||||
ld b,a
|
||||
;
|
||||
xor a ; is it
|
||||
@@ -165,7 +174,7 @@ DMALDIR:
|
||||
;
|
||||
ld hl,DMACopy ; program the
|
||||
ld b,DMACopy_Len ; dma command
|
||||
ld c,DMABASE ; block
|
||||
ld c,DMA_IO ; block
|
||||
;
|
||||
DMAIOHALF
|
||||
;
|
||||
@@ -174,8 +183,8 @@ DMALDIR:
|
||||
ei
|
||||
;
|
||||
ld a,DMA_READ_STATUS_BYTE ; check status
|
||||
out (DMABASE),a ; of transfer
|
||||
in a,(DMABASE) ; set non-zero
|
||||
out (DMA_IO),a ; of transfer
|
||||
in a,(DMA_IO) ; set non-zero
|
||||
and %00111011 ; if failed
|
||||
sub %00011011
|
||||
|
||||
@@ -211,7 +220,7 @@ DMAOTIR:
|
||||
;
|
||||
ld hl,DMAOutCode ; program the
|
||||
ld b,DMAOut_Len ; dma command
|
||||
ld c,DMABASE ; block
|
||||
ld c,DMA_IO ; block
|
||||
;
|
||||
DMAIOHALF
|
||||
|
||||
@@ -220,8 +229,8 @@ DMAOTIR:
|
||||
ei
|
||||
;
|
||||
ld a,DMA_READ_STATUS_BYTE ; check status
|
||||
out (DMABASE),a ; of transfer
|
||||
in a,(DMABASE) ; set non-zero
|
||||
out (DMA_IO),a ; of transfer
|
||||
in a,(DMA_IO) ; set non-zero
|
||||
and %00111011 ; if failed
|
||||
sub %00011011
|
||||
;
|
||||
@@ -262,7 +271,7 @@ DMAINIR:
|
||||
;
|
||||
ld hl,DMAInCode ; program the
|
||||
ld b,DMAIn_Len ; dma command
|
||||
ld c,DMABASE ; block
|
||||
ld c,DMA_IO ; block
|
||||
;
|
||||
DMAIOHALF
|
||||
;
|
||||
@@ -271,8 +280,8 @@ DMAINIR:
|
||||
ei
|
||||
;
|
||||
ld a,DMA_READ_STATUS_BYTE ; check status
|
||||
out (DMABASE),a ; of transfer
|
||||
in a,(DMABASE) ; set non-zero
|
||||
out (DMA_IO),a ; of transfer
|
||||
in a,(DMA_IO) ; set non-zero
|
||||
and %00111011 ; if failed
|
||||
sub %00011011
|
||||
;
|
||||
@@ -306,31 +315,31 @@ DMAIn_Len .equ $-DMAInCode
|
||||
;
|
||||
DMARegDump:
|
||||
ld a,DMA_READ_MASK_FOLLOWS
|
||||
out (DMABASE),a
|
||||
out (DMA_IO),a
|
||||
ld a,%01111110
|
||||
out (DMABASE),a
|
||||
out (DMA_IO),a
|
||||
ld a,DMA_START_READ_SEQUENCE
|
||||
out (DMABASE),a
|
||||
out (DMA_IO),a
|
||||
;
|
||||
in a,(DMABASE)
|
||||
in a,(DMA_IO)
|
||||
ld c,a
|
||||
in a,(DMABASE)
|
||||
in a,(DMA_IO)
|
||||
ld b,a
|
||||
call PRTHEXWORD
|
||||
ld a,':'
|
||||
call COUT
|
||||
;
|
||||
in a,(DMABASE)
|
||||
in a,(DMA_IO)
|
||||
ld c,a
|
||||
in a,(DMABASE)
|
||||
in a,(DMA_IO)
|
||||
ld b,a
|
||||
call PRTHEXWORD
|
||||
ld a,':'
|
||||
call COUT
|
||||
;
|
||||
in a,(DMABASE)
|
||||
in a,(DMA_IO)
|
||||
ld c,a
|
||||
in a,(DMABASE)
|
||||
in a,(DMA_IO)
|
||||
ld b,a
|
||||
call PRTHEXWORD
|
||||
;
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (!PCFENABLE)
|
||||
.ECHO "*** DS7 DRIVER REQUIRES PCF DRIVER. SET PCFENABLE!!!\n"
|
||||
!!! ; FORCE AN ASSEMBLY ERROR
|
||||
#ENDIF
|
||||
;
|
||||
DS7_OUT .EQU 10000000B ; SELECT SQUARE WAVE FUNCTION
|
||||
DS7_SQWE .EQU 00010000B ; ENABLE SQUARE WAVE OUTPUT
|
||||
DS7_RATE .EQU 00000000B ; SET 1HZ OUPUT
|
||||
@@ -31,6 +36,7 @@ DS7_CTL .EQU (DS7_OUT | DS7_SQWE | DS7_RATE)
|
||||
; 12HR MODE IS CURRENTLY ASSUMED
|
||||
;
|
||||
DS7RTC_INIT:
|
||||
CALL NEWLINE ; Formatting
|
||||
PRTS("DS1307: $") ; ANNOUNCE DRIVER
|
||||
;
|
||||
LD A,(PCF_FAIL_FLAG) ; CHECK IF THE
|
||||
|
||||
@@ -1,386 +0,0 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY (DISPLAY AND KEYBOARD) ROUTINES
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE DSKY MAY COINCIDE ON THE SAME PPI BUS AS A PPISD. IT MAY NOT
|
||||
; SHARE A PPI BUS WITH A PPIDE. SEE PPI_BUS.TXT FOR MORE INFORMATION.
|
||||
;
|
||||
; LED SEGMENTS (BIT VALUES)
|
||||
;
|
||||
; +--40--+
|
||||
; 02 20
|
||||
; +--04--+
|
||||
; 08 10
|
||||
; +--01--+ 80
|
||||
;
|
||||
; DSKY SCAN CODES ARE ONE BYTE: CCRRRRRR
|
||||
; BITS 7-6 IDENTFY THE COLUMN OF THE KEY PRESSED
|
||||
; BITS 5-0 ARE A BITMAP, WITH A BIT ON TO INDICATE ROW OF KEY PRESSED
|
||||
;
|
||||
; ____PC0________PC1________PC2________PC3____
|
||||
; PB5 | $20 [D] $60 [E] $A0 [F] $E0 [BO]
|
||||
; PB4 | $10 [A] $50 [B] $90 [C] $D0 [GO]
|
||||
; PB3 | $08 [7] $48 [8] $88 [9] $C8 [EX]
|
||||
; PB2 | $04 [4] $44 [5] $84 [6] $C4 [DE]
|
||||
; PB1 | $02 [1] $42 [2] $82 [3] $C2 [EN]
|
||||
; PB0 | $01 [FW] $41 [0] $81 [BK] $C1 [CL]
|
||||
;
|
||||
;
|
||||
PPIA .EQU DSKYPPIBASE + 0 ; PORT A
|
||||
PPIB .EQU DSKYPPIBASE + 1 ; PORT B
|
||||
PPIC .EQU DSKYPPIBASE + 2 ; PORT C
|
||||
PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT
|
||||
;
|
||||
;__DSKY_INIT_________________________________________________________________________________________
|
||||
;
|
||||
; CONFIGURE PARALLEL PORT AND CLEAR KEYPAD BUFFER
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_PREINIT:
|
||||
OR $FF ; SIGNAL TO WAIT FOR KEY RELEASE
|
||||
LD (DSKY_KEYBUF),A ; SET IT
|
||||
;
|
||||
; PPI PORT B IS NORMALLY SET TO INPUT, BUT HERE WE
|
||||
; TEMPORARILY SET IT TO OUTPUT. WHILE IN OUTPUT MODE, WE
|
||||
; WRITE A VALUE OF $FF WHICH WILL BE PERSISTED BY THE PPI
|
||||
; CHIP BUS HOLD CIRCUIT IF THERE IS NO DSKY PRESENT. SO,
|
||||
; WE CAN SUBSEQUENTLY TEST FOR PPIB=$FF TO SEE IF THERE IS
|
||||
; NO DSKY AND PREVENT PROBLEMS WITH PHANTOM DSKY KEY PRESSES.
|
||||
; IF A DSKY IS PRESENT, IT WILL SIMPLY OVERPOWER THE PPI
|
||||
; BUS HOLD CIRCUIT.
|
||||
LD A,$80 ; PA OUT, PB OUT, PC OUT
|
||||
OUT (PPIX),A
|
||||
LD A,$FF ; SET PPIB=$FF, BUS HOLD
|
||||
OUT (PPIB),A
|
||||
;
|
||||
LD A,$82 ; PA OUT, PB IN, PC OUT
|
||||
OUT (PPIX),A
|
||||
;
|
||||
;IN A,(PPIB) ; *DEBUG*
|
||||
;CALL PRTHEXBYTE ; *DEBUG*
|
||||
;
|
||||
IN A,(PPIB) ; READ PPIB
|
||||
XOR $FF ; INVERT RESULT
|
||||
LD (DSKY_PRESENT),A ; SAVE AS PRESENT FLAG
|
||||
;
|
||||
DSKY_RESET:
|
||||
PUSH AF
|
||||
;
|
||||
LD A,$70 ; PPISD AND 7218 INACTIVE
|
||||
OUT (PPIC),A
|
||||
;
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
#IFDEF HBIOS
|
||||
;
|
||||
DSKY_INIT:
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("DSKY:$") ; FORMATTING
|
||||
;
|
||||
PRTS(" IO=0x$") ; FORMATTING
|
||||
LD A,DSKYPPIBASE ; GET BASE PORT
|
||||
CALL PRTHEXBYTE ; PRINT BASE PORT
|
||||
PRTS(" MODE=$") ; FORMATTING
|
||||
PRTS("V1$") ; PRINT DSKY TYPE
|
||||
;
|
||||
LD A,(DSKY_PRESENT) ; PRESENT?
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; YES, ALL DONE
|
||||
PRTS(" NOT PRESENT$") ; NOT PRESENT
|
||||
;
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IFDEF DSKY_KBD
|
||||
;
|
||||
KY_0 .EQU $00
|
||||
KY_1 .EQU $01
|
||||
KY_2 .EQU $02
|
||||
KY_3 .EQU $03
|
||||
KY_4 .EQU $04
|
||||
KY_5 .EQU $05
|
||||
KY_6 .EQU $06
|
||||
KY_7 .EQU $07
|
||||
KY_8 .EQU $08
|
||||
KY_9 .EQU $09
|
||||
KY_A .EQU $0A
|
||||
KY_B .EQU $0B
|
||||
KY_C .EQU $0C
|
||||
KY_D .EQU $0D
|
||||
KY_E .EQU $0E
|
||||
KY_F .EQU $0F
|
||||
KY_FW .EQU $10 ; FORWARD
|
||||
KY_BK .EQU $11 ; BACKWARD
|
||||
KY_CL .EQU $12 ; CLEAR
|
||||
KY_EN .EQU $13 ; ENTER
|
||||
KY_DE .EQU $14 ; DEPOSIT
|
||||
KY_EX .EQU $15 ; EXAMINE
|
||||
KY_GO .EQU $16 ; GO
|
||||
KY_BO .EQU $17 ; BOOT
|
||||
;
|
||||
;__DSKY_GETKEY_____________________________________________________________________________________
|
||||
;
|
||||
; WAIT FOR A DSKY KEYPRESS AND RETURN
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_GETKEY:
|
||||
LD A,(DSKY_PRESENT) ; DOES IT EXIST?
|
||||
OR A ; SET FLAGS
|
||||
JR Z,DSKY_GETKEY1A ; ABORT IF NOT PRESENT
|
||||
;
|
||||
CALL DSKY_STAT ; CHECK STATUS
|
||||
JR Z,DSKY_GETKEY ; LOOP IF NOTHING READY
|
||||
LD A,(DSKY_KEYBUF)
|
||||
LD B,24 ; SIZE OF DECODE TABLE
|
||||
LD C,0 ; INDEX
|
||||
LD HL,DSKY_KEYMAP ; POINT TO BEGINNING OF TABLE
|
||||
DSKY_GETKEY1:
|
||||
CP (HL) ; MATCH?
|
||||
JR Z,DSKY_GETKEY2 ; FOUND, DONE
|
||||
INC HL
|
||||
INC C ; BUMP INDEX
|
||||
DJNZ DSKY_GETKEY1 ; LOOP UNTIL EOT
|
||||
DSKY_GETKEY1A:
|
||||
LD A,$FF ; NOT FOUND ERR, RETURN $FF
|
||||
RET
|
||||
DSKY_GETKEY2:
|
||||
LD A,$FF ; SET KEY BUF TO $FF
|
||||
LD (DSKY_KEYBUF),A ; DO IT
|
||||
; RETURN THE INDEX POSITION WHERE THE SCAN CODE WAS FOUND
|
||||
LD A,C ; RETURN INDEX VALUE
|
||||
RET
|
||||
;
|
||||
;__DSKY_STAT_________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_STAT:
|
||||
LD A,(DSKY_PRESENT) ; DOES IT EXIST?
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; ABORT WITH A=0 IF NOT THERE
|
||||
;
|
||||
LD A,(DSKY_KEYBUF) ; GET CURRENT BUF VAL
|
||||
CP $FF ; $FF MEANS WE ARE WAITING FOR PREV KEY TO BE RELEASED
|
||||
JR Z,DSKY_STAT1 ; CHECK FOR PREV KEY RELEASE
|
||||
OR A ; DO WE HAVE A SCAN CODE BUFFERED ALREADY?
|
||||
RET NZ ; IF SO, WE ARE DONE
|
||||
JR DSKY_STAT2 ; OTHERWISE, DO KEY CHECK
|
||||
|
||||
DSKY_STAT1:
|
||||
; WAITING FOR PREVIOUS KEY RELEASE
|
||||
CALL DSKY_KEY ; SCAN
|
||||
JR Z,DSKY_STAT2 ; IF ZERO, PREV KEY RELEASED, CONTINUE
|
||||
XOR A ; SIGNAL NO KEY PRESSED
|
||||
RET ; AND DONE
|
||||
|
||||
DSKY_STAT2:
|
||||
CALL DSKY_KEY ; SCAN
|
||||
LD (DSKY_KEYBUF),A ; SAVE RESULT
|
||||
RET ; RETURN WITH ZF SET APPROPRIATELY
|
||||
;
|
||||
;__DSKY_KEY_______________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS W/ DEBOUNCE
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_KEY:
|
||||
; IF PPIB VALUE IS $FF, THERE IS NO DSKY, SEE DSKY_INIT
|
||||
IN A,(PPIB)
|
||||
INC A
|
||||
RET Z
|
||||
|
||||
CALL DSKY_SCAN ; INITIAL KEY PRESS SCAN
|
||||
LD E,A ; SAVE INITIAL SCAN VALUE
|
||||
DSKY_KEY1:
|
||||
; MAX BOUNCE TIME FOR OMRON B3F IS 3MS
|
||||
PUSH DE ; SAVE DE
|
||||
LD DE,300 ; ~3MS DELAY
|
||||
CALL VDELAY ; DO IT
|
||||
CALL DSKY_SCAN ; REPEAT SCAN
|
||||
POP DE ; RESTORE DE
|
||||
RET Z ; IF NOTHING PRESSED, DONE
|
||||
CP E ; SAME?
|
||||
JR DSKY_KEY2 ; YES, READY TO RETURN
|
||||
LD E,A ; OTHERWISE, SAVE NEW SCAN VAL
|
||||
JR DSKY_KEY1 ; AND LOOP UNTIL STABLE VALUE
|
||||
DSKY_KEY2:
|
||||
OR A ; SET FLAGS BASED ON VALUE
|
||||
RET ; AND DONE
|
||||
;
|
||||
;__DSKY_SCAN______________________________________________________________________________________
|
||||
;
|
||||
; SCAN KEYPAD AND RETURN RAW SCAN CODE (RETURNS ZERO IF NO KEY PRESSED)
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_SCAN:
|
||||
LD B,4 ; 4 COLUMNS
|
||||
LD C,$01 ; FIRST COLUMN
|
||||
LD E,0 ; INITIAL COL ID
|
||||
DSKY_SCAN1:
|
||||
LD A,C ; COL TO A
|
||||
OR $70 ; KEEP PPISD AND 7218 INACTIVE
|
||||
OUT (PPIC),A ; ACTIVATE COL
|
||||
IN A,(PPIB) ; READ ROW BITS
|
||||
AND $3F ; MASK, WE ONLY HAVE 6 ROWS, OTHERS UNDEFINED
|
||||
JR NZ,DSKY_SCAN2 ; IF NOT ZERO, GOT SOMETHING
|
||||
RLC C ; NEXT COL
|
||||
INC E ; BUMP COL ID
|
||||
DJNZ DSKY_SCAN1 ; LOOP THROUGH ALL COLS
|
||||
XOR A ; NOTHING FOUND, RETURN ZERO
|
||||
JP DSKY_RESET ; RETURN VIA RESET
|
||||
DSKY_SCAN2:
|
||||
RRC E ; MOVE COL ID
|
||||
RRC E ; ... TO HIGH BITS 6 & 7
|
||||
OR E ; COMBINE WITH ROW
|
||||
JP DSKY_RESET ; RETURN VIA RESET
|
||||
;
|
||||
;_KEYMAP_TABLE_____________________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_KEYMAP:
|
||||
; POS $00 $01 $02 $03 $04 $05 $06 $07
|
||||
; KEY [0] [1] [2] [3] [4] [5] [6] [7]
|
||||
.DB $41, $02, $42, $82, $04, $44, $84, $08
|
||||
;
|
||||
; POS $08 $09 $0A $0B $0C $0D $0E $0F
|
||||
; KEY [8] [9] [A] [B] [C] [D] [E] [F]
|
||||
.DB $48, $88, $10, $50, $90, $20, $60, $A0
|
||||
;
|
||||
; POS $10 $11 $12 $13 $14 $15 $16 $17
|
||||
; KEY [FW] [BK] [CL] [EN] [DE] [EX] [GO] [BO]
|
||||
.DB $01, $81, $C1, $C2, $C4, $C8, $D0, $E0
|
||||
;
|
||||
; KBD WORKING STORAGE
|
||||
;
|
||||
DSKY_KEYBUF .DB 0
|
||||
;
|
||||
#ENDIF ; DSKY_KBD
|
||||
;
|
||||
;==================================================================================================
|
||||
; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY
|
||||
;==================================================================================================
|
||||
;
|
||||
; HL: ADR OF 32 BIT BINARY
|
||||
; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES)
|
||||
;
|
||||
DSKY_BIN2SEG:
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
LD B,4 ; 4 BYTES OF INPUT
|
||||
EX DE,HL
|
||||
DSKY_BIN2SEG1:
|
||||
LD A,(DE) ; FIRST NIBBLE
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
PUSH HL
|
||||
LD HL,DSKY_HEXMAP
|
||||
CALL DSKY_ADDHLA
|
||||
LD A,(HL)
|
||||
POP HL
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(DE) ; SECOND NIBBLE
|
||||
AND 0FH
|
||||
PUSH HL
|
||||
LD HL,DSKY_HEXMAP
|
||||
CALL DSKY_ADDHLA
|
||||
LD A,(HL)
|
||||
POP HL
|
||||
LD (HL),A
|
||||
INC HL
|
||||
INC DE ; NEXT BYTE
|
||||
DJNZ DSKY_BIN2SEG1
|
||||
POP DE
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY SHOW BUFFER
|
||||
; HL: ADDRESS OF BUFFER
|
||||
;==================================================================================================
|
||||
;
|
||||
DSKY_SHOW:
|
||||
;;PUSH AF ; SAVE 7218 CONTROL BITS
|
||||
LD A,82H ; SETUP PPI
|
||||
OUT (PPIX),A
|
||||
CALL DSKY_COFF
|
||||
;;POP AF
|
||||
LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE)
|
||||
OUT (PPIA),A
|
||||
CALL DSKY_STROBEC ; STROBE COMMAND
|
||||
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
|
||||
LD C,PPIA
|
||||
DSKY_HEXOUT2:
|
||||
;OUTI
|
||||
LD A,(HL)
|
||||
XOR $80 ; FIX DOT POLARITY
|
||||
OUT (C),A
|
||||
INC HL
|
||||
DEC B
|
||||
JP Z,DSKY_STROBE ; DO FINAL STROBE AND RETURN
|
||||
CALL DSKY_STROBE ; STROBE BYTE VALUE
|
||||
JR DSKY_HEXOUT2
|
||||
DSKY_STROBEC: ; COMMAND STROBE
|
||||
LD A,80H | 30H
|
||||
JP DSKY_STROBE0
|
||||
DSKY_STROBE: ; DATA STROBE
|
||||
LD A,00H | 30H ; SET WRITE STROBE
|
||||
DSKY_STROBE0:
|
||||
OUT (PPIC),A ; OUT TO PORTC
|
||||
CALL DLY2 ; DELAY
|
||||
DSKY_COFF:
|
||||
LD A,40H | 30H ; QUIESCE
|
||||
OUT (PPIC),A ; OUT TO PORTC
|
||||
; CALL DSKY_DELAY ; WAIT
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; UTILTITY FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
DSKY_ADDHLA:
|
||||
ADD A,L
|
||||
LD L,A
|
||||
RET NC
|
||||
INC H
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; STORAGE
|
||||
;==================================================================================================
|
||||
;
|
||||
; CODES FOR NUMERICS
|
||||
; HIGH BIT ALWAYS CLEAR TO SUPPRESS DECIMAL POINT
|
||||
; SET HIGH BIT TO SHOW DECIMAL POINT
|
||||
;
|
||||
DSKY_HEXMAP:
|
||||
.DB $7B ; 0
|
||||
.DB $30 ; 1
|
||||
.DB $6D ; 2
|
||||
.DB $75 ; 3
|
||||
.DB $36 ; 4
|
||||
.DB $57 ; 5
|
||||
.DB $5F ; 6
|
||||
.DB $70 ; 7
|
||||
.DB $7F ; 8
|
||||
.DB $77 ; 9
|
||||
.DB $7E ; A
|
||||
.DB $1F ; B
|
||||
.DB $4B ; C
|
||||
.DB $3D ; D
|
||||
.DB $4F ; E
|
||||
.DB $4E ; F
|
||||
;
|
||||
; SEG DISPLAY WORKING STORAGE
|
||||
;
|
||||
DSKY_PRESENT .DB 0
|
||||
;
|
||||
DSKY_BUF .FILL 8,0
|
||||
DSKY_BUFLEN .EQU $ - DSKY_BUF
|
||||
DSKY_HEXBUF .FILL 4,0
|
||||
DSKY_HEXBUFLEN .EQU $ - DSKY_HEXBUF
|
||||
314
Source/HBIOS/esp.asm
Normal file
314
Source/HBIOS/esp.asm
Normal file
@@ -0,0 +1,314 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ESP32 DRIVER
|
||||
;
|
||||
; SUPPORTS DAN WERNER'S NHYODYNE (MBC) ESP32 MODULE
|
||||
; https://github.com/danwerner21/nhyodyne/tree/main/Z80ESP
|
||||
;==================================================================================================
|
||||
;
|
||||
; TODO:
|
||||
;
|
||||
ESP_IOBASE .EQU $9C
|
||||
ESP_0_IO .EQU ESP_IOBASE + 0
|
||||
ESP_1_IO .EQU ESP_IOBASE + 1
|
||||
ESP_STAT .EQU ESP_IOBASE + 2
|
||||
;
|
||||
; ESP STATUS PORT
|
||||
; MSB XX S S S S S S
|
||||
; | | | | | +- ESP0 READY OUTPUT
|
||||
; | | | | +--- ESP0 BUSY
|
||||
; | | | +----- ESP0 SPARE
|
||||
; | | +------- ESP1 READY OUTPUT
|
||||
; | +--------- ESP1 BUSY
|
||||
; +----------- ESP1 SPARE
|
||||
;
|
||||
ESP_0_RDY .EQU %00000001
|
||||
ESP_0_BUSY .EQU %00000010
|
||||
ESP_0_SPARE .EQU %00000100
|
||||
ESP_1_RDY .EQU %00001000
|
||||
ESP_1_BUSY .EQU %00010000
|
||||
ESP_1_SPARE .EQU %00100000
|
||||
;
|
||||
; COMMAND OPCODES
|
||||
;
|
||||
ESP_CMD_NOP .EQU 0 ; NO OP
|
||||
ESP_CMD_COUT .EQU 1 ; CHAR OUT
|
||||
ESP_CMD_SOUT .EQU 2 ; STRING OUT
|
||||
ESP_CMD_KIN .EQU 3 ; KEY IN
|
||||
ESP_CMD_KST .EQU 4 ; KBD BUF STATUS
|
||||
ESP_CMD_DISC .EQU $FF ; DISCOVER
|
||||
;
|
||||
; GLOBAL ESP INITIALIZATION
|
||||
;
|
||||
ESP_INIT:
|
||||
;
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("ESP: IO=0x$")
|
||||
LD A,ESP_IOBASE
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
CALL ESP_DETECT
|
||||
LD DE,ESP_STR_NOHW
|
||||
JP NZ,WRITESTR
|
||||
;
|
||||
; PRINT FIRMWARE VERSION
|
||||
PRTS(" F/W=$")
|
||||
CALL ESP_PRTVER
|
||||
;
|
||||
CALL ESPCON_INIT ; CONSOLE INITIALIZATION
|
||||
;
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; ESP32 INTERFACE FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
ESP_DETECT:
|
||||
CALL ESP_CLR ; CLEAR ANY PENDING DATA
|
||||
RET NZ ; IF FAILS, ASSUME NOT PRESENT
|
||||
LD A,ESP_CMD_DISC ; DISCOVER COMMAND
|
||||
CALL ESP_OUT ; SEND IT
|
||||
;
|
||||
; LOOK FOR SIGNATURE STARTING WITH "ESP"
|
||||
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
|
||||
;CALL PRTHEXBYTE
|
||||
CP 'E'
|
||||
RET NZ
|
||||
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
|
||||
;CALL PRTHEXBYTE
|
||||
CP 'S'
|
||||
RET NZ
|
||||
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
|
||||
;CALL PRTHEXBYTE
|
||||
CP 'P'
|
||||
RET
|
||||
|
||||
;LD DE,10 ; DELAY 160US
|
||||
;CALL VDELAY ; ... TO ENSURE OUTPUT RDY SET
|
||||
;IN A,(ESP_STAT) ; GET STATUS
|
||||
;AND ESP_0_RDY ; ISOLATE OUTPUT READY BIT
|
||||
;XOR ESP_0_RDY ; INVERT SO 0=FOUND
|
||||
;RET ; DONE
|
||||
;
|
||||
; CLEAR ESP INPUT QUEUE
|
||||
;
|
||||
ESP_CLR:
|
||||
LD B,0 ; MAX CHARS TO READ
|
||||
ESP_CLR0:
|
||||
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
|
||||
RET NZ ; BAIL OUT IF TIMEOUT
|
||||
IN A,(ESP_STAT) ; GET STATUS
|
||||
AND ESP_0_RDY ; IS THERE MORE DATA?
|
||||
RET Z ; IF NOT, DONE
|
||||
IN A,(ESP_0_IO) ; GET CHAR
|
||||
DJNZ ESP_CLR0 ; LOOP TILL DONE
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET
|
||||
;
|
||||
; PRINT ESP VERSION STRING TO CONSOLE
|
||||
;
|
||||
ESP_PRTVER:
|
||||
CALL ESP_CLR ; CLEAR ANY PENDING DATA
|
||||
LD A,ESP_CMD_DISC ; DISCOVER COMMAND
|
||||
CALL ESP_OUT ; SEND IT
|
||||
CALL ESP_WTRDY ; WAIT FOR READY TO OUTPUT
|
||||
ESP_PRTVER1:
|
||||
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
|
||||
IN A,(ESP_STAT) ; GET STATUS
|
||||
AND ESP_0_RDY ; ISOLATE OUTPUT READY BIT
|
||||
RET Z ; DONE IF NOTHING READY
|
||||
CALL ESP_IN ; GET NEXT CHAR
|
||||
CALL COUT ; PRINT CHAR
|
||||
JR ESP_PRTVER1 ; LOOP
|
||||
;
|
||||
; SEND BYTE TO ESP
|
||||
;
|
||||
ESP_OUT:
|
||||
PUSH AF ; SAVE VALUE
|
||||
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
|
||||
POP AF ; POP VALUE
|
||||
OUT (ESP_0_IO),A ; SEND CHARACTER
|
||||
JR ESP_WTBSY ; RETURN VIA WTBSY
|
||||
;
|
||||
; GET BYTE FROM ESP (BLOCKING)
|
||||
;
|
||||
ESP_INWAIT:
|
||||
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
|
||||
CALL ESP_WTRDY ; WAIT FOR READY TO OUTPUT
|
||||
; FALL THRU (GET CHAR VIA ESP_IN)
|
||||
;
|
||||
; GET BYTE FROM ESP (NON BLOCKING)
|
||||
;
|
||||
ESP_IN:
|
||||
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
|
||||
ESP_IN1:
|
||||
IN A,(ESP_0_IO) ; GET BYTE
|
||||
PUSH AF ; SAVE VALUE
|
||||
CALL ESP_WTBSY ; WAIT TILL BUSY
|
||||
POP AF ; RESTORE VALUE
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; WAIT FOR ESP TO BE NOT BUSY
|
||||
;
|
||||
ESP_WTNBSY:
|
||||
LD B,0 ; MAX TRIES
|
||||
ESP_WTNBSY1:
|
||||
IN A,(ESP_STAT) ; GET STATUS
|
||||
AND ESP_0_BUSY ; IS ESP BUSY?
|
||||
RET Z ; RETURN IF NOT BUSY
|
||||
DJNZ ESP_WTNBSY1 ; ELSE LOOP
|
||||
OR $FF ; SIGNAL TIMEOUT
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; WAIT FOR ESP TO BE BUSY
|
||||
;
|
||||
ESP_WTBSY:
|
||||
LD B,20 ; MAX TRIES
|
||||
ESP_WTBSY1:
|
||||
IN A,(ESP_STAT) ; GET STATUS
|
||||
AND ESP_0_BUSY ; IS ESP BUSY?
|
||||
XOR ESP_0_BUSY ; INVERT
|
||||
RET Z ; RETURN IF BUSY
|
||||
DJNZ ESP_WTBSY1 ; ELSE LOOP
|
||||
OR $FF ; SIGNAL TIMEOUT
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; WAIT FOR ESP TO BE READY TO OUTPUT
|
||||
;
|
||||
ESP_WTRDY:
|
||||
LD B,0 ; MAX TRIES
|
||||
ESP_WTRDY1:
|
||||
IN A,(ESP_STAT) ; GET STATUS
|
||||
AND ESP_0_RDY ; IS ESP READY TO OUTPUT
|
||||
XOR ESP_0_RDY ; INVERT, 0=READY
|
||||
RET Z ; RETURN IF READY
|
||||
DJNZ ESP_WTRDY1 ; ELSE LOOP
|
||||
OR $FF ; SIGNAL TIMEOUT
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
ESP_STR_NOHW .TEXT " NOT PRESENT$"
|
||||
ESP_STR_UPGRADE .TEXT " !!!UPGRADE REQUIRED!!!$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; ESP32 CONSOLE DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
;
|
||||
ESPCON_ROWS .EQU 25 ; VGA DISPLAY ROWS
|
||||
ESPCON_COLS .EQU 80 ; VGA DISPLAY COLS
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_INIT:
|
||||
;
|
||||
CALL NEWLINE
|
||||
PRTS("ESPCON:$")
|
||||
;
|
||||
; DISPLAY CONSOLE DIMENSIONS
|
||||
CALL PC_SPACE
|
||||
LD A,ESPCON_COLS
|
||||
CALL PRTDECB
|
||||
LD A,'X'
|
||||
CALL COUT
|
||||
LD A,ESPCON_ROWS
|
||||
CALL PRTDECB
|
||||
CALL PRTSTRD
|
||||
.TEXT " TEXT (ANSI)$"
|
||||
;
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
;
|
||||
LD D,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD E,CIODEV_ESPCON ; DEVICE TYPE
|
||||
LD BC,ESPCON_FNTBL ; BC := FUNCTION TABLE ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; DRIVER FUNCTION TABLE
|
||||
;
|
||||
ESPCON_FNTBL:
|
||||
.DW ESPCON_IN
|
||||
.DW ESPCON_OUT
|
||||
.DW ESPCON_IST
|
||||
.DW ESPCON_OST
|
||||
.DW ESPCON_INITDEV
|
||||
.DW ESPCON_QUERY
|
||||
.DW ESPCON_DEVICE
|
||||
#IF (($ - ESPCON_FNTBL) != (CIO_FNCNT * 2))
|
||||
.ECHO "*** INVALID ESPCON FUNCTION TABLE ***\n"
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_IN:
|
||||
CALL ESPCON_IST
|
||||
JR Z,ESPCON_IN
|
||||
LD A,ESP_CMD_KIN ; KBD INPUT
|
||||
CALL ESP_OUT ; SEND CMD OPCODE
|
||||
CALL ESP_INWAIT ; GET KEY
|
||||
LD E,A ; PUT IN E
|
||||
XOR A ; SIGNAL SUCCES
|
||||
RET ; AND DONE
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_IST:
|
||||
LD A,ESP_CMD_KST ; KBD BUF STATUS
|
||||
CALL ESP_OUT ; SEND CMD OPCODE
|
||||
CALL ESP_INWAIT ; GET BUF SIZE
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; AND DONE
|
||||
OR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_OUT:
|
||||
PUSH DE
|
||||
LD A,ESP_CMD_COUT ; CHAR OUT OPCODE
|
||||
CALL ESP_OUT
|
||||
POP DE
|
||||
LD A,E
|
||||
CALL ESP_OUT ; SEND CHAR VALUE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_OST:
|
||||
OR $FF ; SIGNAL OUTPUT QUEUE READY
|
||||
RET ; RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_INITDEV:
|
||||
SYSCHKERR(ERR_NOTIMPL)
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_QUERY:
|
||||
LD DE,0
|
||||
LD HL,0
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ESPCON_DEVICE:
|
||||
LD D,CIODEV_ESPCON ; D := DEVICE TYPE
|
||||
LD E,0 ; E := DEVICE NUM, ALWAYS 0
|
||||
LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,ESP_IOBASE ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;=============================================================================
|
||||
; DATA STORAGE
|
||||
;=============================================================================
|
||||
;
|
||||
@@ -231,12 +231,12 @@ FDMM_8 .DB FDM111, $FF
|
||||
; FDT_ VALUES DEFINED IN STD.ASM
|
||||
;
|
||||
FD_DEVATTR:
|
||||
.DB %11100000 ; DRIVE TYPE NONE
|
||||
.DB %11010100 ; DRIVE TYPE 3.5 DD
|
||||
.DB %11011000 ; DRIVE TYPE 3.5 HD
|
||||
.DB %10110100 ; DRIVE TYPE 5.25 DD
|
||||
.DB %10111000 ; DRIVE TYPE 5.25 HD
|
||||
.DB %10010100 ; DRIVE TYPE 8
|
||||
.DB %11000000 ; DRIVE TYPE NONE
|
||||
.DB %11010101 ; DRIVE TYPE 3.5 DD
|
||||
.DB %11010110 ; DRIVE TYPE 3.5 HD
|
||||
.DB %11001101 ; DRIVE TYPE 5.25 DD
|
||||
.DB %11001110 ; DRIVE TYPE 5.25 HD
|
||||
.DB %11000101 ; DRIVE TYPE 8
|
||||
;
|
||||
; FDC COMMANDS
|
||||
;
|
||||
@@ -1130,9 +1130,11 @@ FD_RETRY1:
|
||||
FD_START:
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
LD A,4
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACTCHS ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
LD A,(FCD_FDCRDY)
|
||||
@@ -1202,9 +1204,6 @@ FD_RUN1:
|
||||
RET
|
||||
|
||||
FD_RUNCHK:
|
||||
;;#IF (DSKYENABLE)
|
||||
;; CALL FD_DSKY
|
||||
;;#ENDIF
|
||||
|
||||
FD_RUNEXIT:
|
||||
LD A,(FST_RC)
|
||||
@@ -1221,23 +1220,6 @@ FD_RUNERR:
|
||||
|
||||
JP FD_RETRC
|
||||
|
||||
;;#IF (DSKYENABLE)
|
||||
;;FD_DSKY:
|
||||
;; LD HL,DSKY_HEXBUF
|
||||
;; LD A,(FCD_C)
|
||||
;; LD (HL),A
|
||||
;; INC HL
|
||||
;; LD A,(FCD_R)
|
||||
;; LD (HL),A
|
||||
;; INC HL
|
||||
;; LD A,(FRB_ST0)
|
||||
;; LD (HL),A
|
||||
;; INC HL
|
||||
;; LD A,(FRB_ST1)
|
||||
;; LD (HL),A
|
||||
;; CALL DSKY_HEXOUT
|
||||
;; RET
|
||||
;;#ENDIF
|
||||
;
|
||||
;===============================================================================
|
||||
; FLOPPY DISK CONTROL SERVICES (PHYSICAL DEVICE CONTROL FOR FDC HARDWARE)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -36,7 +36,16 @@ BF_RTCGETALM .EQU BF_RTC + 6 ; GET ALARM
|
||||
BF_RTCSETALM .EQU BF_RTC + 7 ; SET ALARM
|
||||
BF_RTCDEVICE .EQU BF_RTC + 8 ; RTC DEVICE INFO REPORT
|
||||
;
|
||||
BF_EMU .EQU $30 ; DEPRECATED
|
||||
BF_DSKY .EQU $30
|
||||
BF_DSKYRESET .EQU BF_DSKY + 0 ; RESET DSKY HARDWARE
|
||||
BF_DSKYSTAT .EQU BF_DSKY + 1 ; GET KEYPAD STATUS
|
||||
BF_DSKYGETKEY .EQU BF_DSKY + 2 ; GET KEY FROM KEYPAD
|
||||
BF_DSKYSHOWHEX .EQU BF_DSKY + 3 ; DISPLAY BINARY VALUE IN HEX
|
||||
BF_DSKYSHOWSEG .EQU BF_DSKY + 4 ; DISPLAY ENCODED SEGMENT STRING
|
||||
BF_DSKYKEYLEDS .EQU BF_DSKY + 5 ; SET/CLEAR KEYPAD LEDS
|
||||
BF_DSKYSTATLED .EQU BF_DSKY + 6 ; SET/CLEAR STATUS LEDS
|
||||
BF_DSKYBEEP .EQU BF_DSKY + 7 ; BEEP ONBOARD DSKY SPEAKER
|
||||
BF_DSKYDEVICE .EQU BF_DSKY + 8 ; DSKY DEVICE INFO REPORT
|
||||
;
|
||||
BF_VDA .EQU $40
|
||||
BF_VDAINI .EQU BF_VDA + 0 ; INITIALIZE VDU
|
||||
@@ -98,6 +107,7 @@ BF_SYSGET_CIOFN .EQU $01 ; GET CIO UNIT FN/DATA ADR
|
||||
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
|
||||
BF_SYSGET_DIOFN .EQU $11 ; GET DIO UNIT FN/DATA ADR
|
||||
BF_SYSGET_RTCCNT .EQU $20 ; GET RTC UNIT COUNT
|
||||
BF_SYSGET_DSKYCNT .EQU $30 ; GET DSKY UNIT COUNT
|
||||
BF_SYSGET_VDACNT .EQU $40 ; GET VDA UNIT COUNT
|
||||
BF_SYSGET_VDAFN .EQU $41 ; GET VDA UNIT FN/DATA ADR
|
||||
BF_SYSGET_SNDCNT .EQU $50 ; GET VDA UNIT COUNT
|
||||
@@ -140,6 +150,8 @@ PLT_RCZ280 .EQU 12 ; RCBUS W/ Z280
|
||||
PLT_MBC .EQU 13 ; MULTI BOARD COMPUTER
|
||||
PLT_RPH .EQU 14 ; RHYOPHYRE GRAPHICS COMPUTER
|
||||
PLT_Z80RETRO .EQU 15 ; Z80 RETRO COMPUTER
|
||||
PLT_S100 .EQU 16 ; S100 COMPUTERS Z180 SYSTEM
|
||||
PLT_DUO .EQU 17 ; DUODYNE Z80 SYSTEM
|
||||
;
|
||||
; HBIOS GLOBAL ERROR RETURN VALUES
|
||||
;
|
||||
@@ -301,6 +313,7 @@ CIODEV_UF .EQU $80
|
||||
CIODEV_DUART .EQU $90
|
||||
CIODEV_Z2U .EQU $A0
|
||||
CIODEV_LPT .EQU $B0
|
||||
CIODEV_ESPCON .EQU $C0
|
||||
;
|
||||
; SUB TYPES OF CHAR DEVICES
|
||||
;
|
||||
@@ -323,6 +336,7 @@ DIODEV_PPPSD .EQU $80
|
||||
DIODEV_HDSK .EQU $90
|
||||
DIODEV_PPA .EQU $A0
|
||||
DIODEV_IMM .EQU $B0
|
||||
DIODEV_SYQ .EQU $C0
|
||||
;
|
||||
; RTC DEVICE IDS
|
||||
;
|
||||
@@ -333,6 +347,11 @@ RTCDEV_INT .EQU $30 ; PERIODIC INT TIMER
|
||||
RTCDEV_DS7 .EQU $40 ; DS1307 (I2C)
|
||||
RTCDEV_RP5 .EQU $50 ; RP5C01
|
||||
;
|
||||
; DSKY DEVICE IDS
|
||||
;
|
||||
DSKYDEV_ICM .EQU $00 ; Intersil ICM7218
|
||||
DSKYDEV_PKD .EQU $10 ; Intel P8279
|
||||
;
|
||||
; VIDEO DEVICE IDS
|
||||
;
|
||||
VDADEV_VDU .EQU $00 ; ECB VDU - MOTOROLA 6545
|
||||
@@ -349,6 +368,37 @@ SNDDEV_AY38910 .EQU $10
|
||||
SNDDEV_BITMODE .EQU $20
|
||||
SNDDEV_YM2612 .EQU $30
|
||||
;
|
||||
; DSKY KEYS
|
||||
;
|
||||
KY_0 .EQU $00
|
||||
KY_1 .EQU $01
|
||||
KY_2 .EQU $02
|
||||
KY_3 .EQU $03
|
||||
KY_4 .EQU $04
|
||||
KY_5 .EQU $05
|
||||
KY_6 .EQU $06
|
||||
KY_7 .EQU $07
|
||||
KY_8 .EQU $08
|
||||
KY_9 .EQU $09
|
||||
KY_A .EQU $0A
|
||||
KY_B .EQU $0B
|
||||
KY_C .EQU $0C
|
||||
KY_D .EQU $0D
|
||||
KY_E .EQU $0E
|
||||
KY_F .EQU $0F
|
||||
KY_FW .EQU $10 ; FORWARD
|
||||
KY_BK .EQU $11 ; BACKWARD
|
||||
KY_CL .EQU $12 ; CLEAR
|
||||
KY_EN .EQU $13 ; ENTER
|
||||
KY_DE .EQU $14 ; DEPOSIT
|
||||
KY_EX .EQU $15 ; EXAMINE
|
||||
KY_GO .EQU $16 ; GO
|
||||
KY_BO .EQU $17 ; BOOT
|
||||
KY_F4 .EQU $18 ; F4
|
||||
KY_F3 .EQU $19 ; F3
|
||||
KY_F2 .EQU $1A ; F2
|
||||
KY_F1 .EQU $1B ; F1
|
||||
;
|
||||
; HBIOS CONTROL BLOCK OFFSETS
|
||||
; WARNING: THESE OFFSETS WILL CHANGE SIGNIFICANTLY BETWEEN RELEASES
|
||||
; IT IS STRONGLY RECOMMENDED THAT YOU DO NOT USE THEM!
|
||||
|
||||
@@ -166,7 +166,7 @@ HDSK_GEOM:
|
||||
HDSK_DEVICE:
|
||||
LD D,DIODEV_HDSK ; D := DEVICE TYPE
|
||||
LD E,(IY+HDSK_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%00000000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK
|
||||
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,HDSK_IO ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -234,9 +234,11 @@ HDSK_RW0:
|
||||
LD (HDSK_RC),A ; CLEAR RETURN CODE
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
LD A,HDSK_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
; CONVERT LBA HHHH:LLLL (4 BYTES)
|
||||
|
||||
359
Source/HBIOS/icm.asm
Normal file
359
Source/HBIOS/icm.asm
Normal file
@@ -0,0 +1,359 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY V1 ICM7218 (DISPLAY AND KEYBOARD) ROUTINES
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE ICM MAY COINCIDE ON THE SAME PPI BUS AS A PPISD. IT MAY NOT
|
||||
; SHARE A PPI BUS WITH A PPIDE. SEE PPI_BUS.TXT FOR MORE INFORMATION.
|
||||
;
|
||||
; LED SEGMENTS (BIT VALUES)
|
||||
;
|
||||
; +--40--+
|
||||
; 02 20
|
||||
; +--04--+
|
||||
; 08 10
|
||||
; +--01--+ 80
|
||||
;
|
||||
; ICM SCAN CODES ARE ONE BYTE: CCRRRRRR
|
||||
; BITS 7-6 IDENTFY THE COLUMN OF THE KEY PRESSED
|
||||
; BITS 5-0 ARE A BITMAP, WITH A BIT ON TO INDICATE ROW OF KEY PRESSED
|
||||
;
|
||||
; ____PC0________PC1________PC2________PC3____
|
||||
; PB5 | $20 [D] $60 [E] $A0 [F] $E0 [BO]
|
||||
; PB4 | $10 [A] $50 [B] $90 [C] $D0 [GO]
|
||||
; PB3 | $08 [7] $48 [8] $88 [9] $C8 [EX]
|
||||
; PB2 | $04 [4] $44 [5] $84 [6] $C4 [DE]
|
||||
; PB1 | $02 [1] $42 [2] $82 [3] $C2 [EN]
|
||||
; PB0 | $01 [FW] $41 [0] $81 [BK] $C1 [CL]
|
||||
;
|
||||
;
|
||||
ICM_PPIA .EQU ICMPPIBASE + 0 ; PORT A
|
||||
ICM_PPIB .EQU ICMPPIBASE + 1 ; PORT B
|
||||
ICM_PPIC .EQU ICMPPIBASE + 2 ; PORT C
|
||||
ICM_PPIX .EQU ICMPPIBASE + 3 ; PPI CONTROL PORT
|
||||
;
|
||||
;__ICM_INIT__________________________________________________________________________________________
|
||||
;
|
||||
; CONFIGURE PARALLEL PORT AND CLEAR KEYPAD BUFFER
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
ICM_PREINIT:
|
||||
LD A,(DSKY_DISPACT) ; DSKY DISPATCHER ALREADY SET?
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; IF ALREADY ACTIVE, ABORT
|
||||
;
|
||||
OR $FF ; SIGNAL TO WAIT FOR KEY RELEASE
|
||||
LD (ICM_KEYBUF),A ; SET IT
|
||||
;
|
||||
; PPI PORT B IS NORMALLY SET TO INPUT, BUT HERE WE
|
||||
; TEMPORARILY SET IT TO OUTPUT. WHILE IN OUTPUT MODE, WE
|
||||
; WRITE A VALUE OF $FF WHICH WILL BE PERSISTED BY THE PPI
|
||||
; CHIP BUS HOLD CIRCUIT IF THERE IS NO ICM PRESENT. SO,
|
||||
; WE CAN SUBSEQUENTLY TEST FOR PPIB=$FF TO SEE IF THERE IS
|
||||
; NO ICM AND PREVENT PROBLEMS WITH PHANTOM ICM KEY PRESSES.
|
||||
; IF A ICM IS PRESENT, IT WILL SIMPLY OVERPOWER THE PPI
|
||||
; BUS HOLD CIRCUIT.
|
||||
LD A,$80 ; PA OUT, PB OUT, PC OUT
|
||||
OUT (ICM_PPIX),A
|
||||
LD A,$FF ; SET PPIB=$FF, BUS HOLD
|
||||
OUT (ICM_PPIB),A
|
||||
;
|
||||
LD A,$82 ; PA OUT, PB IN, PC OUT
|
||||
OUT (ICM_PPIX),A
|
||||
;
|
||||
;IN A,(ICM_PPIB) ; *DEBUG*
|
||||
;CALL PRTHEXBYTE ; *DEBUG*
|
||||
;
|
||||
IN A,(ICM_PPIB) ; READ PPIB
|
||||
XOR $FF ; INVERT RESULT
|
||||
;
|
||||
CALL ICM_RESET
|
||||
;
|
||||
RET Z ; BAIL OUT NOW IF NOT PRESENT
|
||||
;
|
||||
; RECORD HARDWARE PRESENT
|
||||
LD A,$FF
|
||||
LD (ICM_PRESENT),A
|
||||
;
|
||||
; REGISTER DRIVER WITH HBIOS
|
||||
LD BC,ICM_DISPATCH
|
||||
CALL DSKY_SETDISP
|
||||
;
|
||||
RET
|
||||
;
|
||||
ICM_INIT:
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("ICM:$") ; FORMATTING
|
||||
;
|
||||
PRTS(" IO=0x$") ; FORMATTING
|
||||
LD A,ICMPPIBASE ; GET BASE PORT
|
||||
CALL PRTHEXBYTE ; PRINT BASE PORT
|
||||
;
|
||||
LD A,(ICM_PRESENT) ; PRESENT?
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; YES, ALL DONE
|
||||
PRTS(" NOT PRESENT$") ; NOT PRESENT
|
||||
;
|
||||
RET
|
||||
;
|
||||
; ICM DEVICE FUNCTION DISPATCH ENTRY
|
||||
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
|
||||
; B: FUNCTION (IN)
|
||||
;
|
||||
ICM_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JP Z,ICM_RESET ; RESET DSKY HARDWARE
|
||||
DEC A
|
||||
JP Z,ICM_STAT ; GET KEYPAD STATUS
|
||||
DEC A
|
||||
JP Z,ICM_GETKEY ; READ A KEY FROM THE KEYPAD
|
||||
DEC A
|
||||
JP Z,ICM_SHOWHEX ; DISPLAY A 32-BIT BINARY VALUE IN HEX
|
||||
DEC A
|
||||
JP Z,ICM_SHOWSEG ; DISPLAY SEGMENTS
|
||||
DEC A
|
||||
JP Z,ICM_KEYLEDS ; SET KEYPAD LEDS
|
||||
DEC A
|
||||
JP Z,ICM_STATLED ; SET STATUS LED
|
||||
DEC A
|
||||
JP Z,ICM_BEEP ; BEEP DSKY SPEAKER
|
||||
DEC A
|
||||
JP Z,ICM_DEVICE ; DEVICE INFO
|
||||
SYSCHKERR(ERR_NOFUNC)
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ICM_RESET:
|
||||
PUSH AF
|
||||
LD A,$70 ; PPISD AND 7218 INACTIVE
|
||||
OUT (ICM_PPIC),A
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;
|
||||
ICM_STAT:
|
||||
LD A,(ICM_KEYBUF) ; GET CURRENT BUF VAL
|
||||
CP $FF ; $FF MEANS WE ARE WAITING FOR PREV KEY TO BE RELEASED
|
||||
JR Z,ICM_STAT1 ; CHECK FOR PREV KEY RELEASE
|
||||
OR A ; DO WE HAVE A SCAN CODE BUFFERED ALREADY?
|
||||
RET NZ ; IF SO, WE ARE DONE
|
||||
JR ICM_STAT2 ; OTHERWISE, DO KEY CHECK
|
||||
|
||||
ICM_STAT1:
|
||||
; WAITING FOR PREVIOUS KEY RELEASE
|
||||
CALL ICM_KEY ; SCAN
|
||||
JR Z,ICM_STAT2 ; IF ZERO, PREV KEY RELEASED, CONTINUE
|
||||
XOR A ; SIGNAL NO KEY PRESSED
|
||||
RET ; AND DONE
|
||||
|
||||
ICM_STAT2:
|
||||
CALL ICM_KEY ; SCAN
|
||||
LD (ICM_KEYBUF),A ; SAVE RESULT
|
||||
RET ; RETURN WITH ZF SET APPROPRIATELY
|
||||
;
|
||||
; WAIT FOR A ICM KEYPRESS AND RETURN
|
||||
;
|
||||
ICM_GETKEY:
|
||||
CALL ICM_STAT ; CHECK STATUS
|
||||
JR Z,ICM_GETKEY ; LOOP IF NOTHING READY
|
||||
LD A,(ICM_KEYBUF)
|
||||
LD B,24 ; SIZE OF DECODE TABLE
|
||||
LD C,0 ; INDEX
|
||||
LD HL,ICM_KEYMAP ; POINT TO BEGINNING OF TABLE
|
||||
ICM_GETKEY1:
|
||||
CP (HL) ; MATCH?
|
||||
JR Z,ICM_GETKEY2 ; FOUND, DONE
|
||||
INC HL
|
||||
INC C ; BUMP INDEX
|
||||
DJNZ ICM_GETKEY1 ; LOOP UNTIL EOT
|
||||
ICM_GETKEY1A:
|
||||
LD A,$FF ; NOT FOUND ERR, RETURN $FF
|
||||
RET
|
||||
ICM_GETKEY2:
|
||||
LD A,$FF ; SET KEY BUF TO $FF
|
||||
LD (ICM_KEYBUF),A ; DO IT
|
||||
; RETURN THE INDEX POSITION WHERE THE SCAN CODE WAS FOUND
|
||||
LD E,C ; RETURN INDEX VALUE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; DISPLAY HEX VALUE FROM DE:HL
|
||||
;
|
||||
ICM_SHOWHEX:
|
||||
LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER
|
||||
CALL ST32 ; STORE 32-BIT BINARY THERE
|
||||
LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL)
|
||||
LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE)
|
||||
CALL DSKY_BIN2SEG ; CONVERT
|
||||
LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER
|
||||
; AND FALL THRU TO DISPLAY IT
|
||||
;
|
||||
; ICM SHOW BUFFER
|
||||
; HL: ADDRESS OF BUFFER
|
||||
;
|
||||
ICM_SHOWSEG:
|
||||
LD A,82H ; SETUP PPI
|
||||
OUT (ICM_PPIX),A
|
||||
CALL ICM_COFF
|
||||
LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE)
|
||||
OUT (ICM_PPIA),A
|
||||
CALL ICM_STROBEC ; STROBE COMMAND
|
||||
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
|
||||
LD C,ICM_PPIA
|
||||
ICM_HEXOUT2:
|
||||
LD A,(HL)
|
||||
CALL ICM_XLAT ; MAP SEGMENTS
|
||||
XOR $80 ; FIX DOT POLARITY
|
||||
OUT (C),A
|
||||
INC HL
|
||||
DEC B
|
||||
JP Z,ICM_STROBE ; DO FINAL STROBE AND RETURN
|
||||
CALL ICM_STROBE ; STROBE BYTE VALUE
|
||||
JR ICM_HEXOUT2
|
||||
ICM_STROBEC: ; COMMAND STROBE
|
||||
LD A,80H | 30H
|
||||
JP ICM_STROBE0
|
||||
ICM_STROBE: ; DATA STROBE
|
||||
LD A,00H | 30H ; SET WRITE STROBE
|
||||
ICM_STROBE0:
|
||||
OUT (ICM_PPIC),A ; OUT TO PORTC
|
||||
CALL DLY2 ; DELAY
|
||||
ICM_COFF:
|
||||
LD A,40H | 30H ; QUIESCE
|
||||
OUT (ICM_PPIC),A ; OUT TO PORTC
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ICM_KEYLEDS:
|
||||
ICM_STATLED:
|
||||
ICM_BEEP:
|
||||
XOR A ; PRETEND SUCCESS
|
||||
RET
|
||||
;
|
||||
; DEVICE INFORMATION
|
||||
;
|
||||
ICM_DEVICE:
|
||||
LD D,DSKYDEV_ICM ; D := DEVICE TYPE
|
||||
LD E,0 ; E := PHYSICAL DEVICE NUMBER
|
||||
LD H,0 ; H := MODE
|
||||
LD L,ICMPPIBASE ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;__ICM_KEY___________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS W/ DEBOUNCE
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
ICM_KEY:
|
||||
CALL ICM_SCAN ; INITIAL KEY PRESS SCAN
|
||||
LD E,A ; SAVE INITIAL SCAN VALUE
|
||||
ICM_KEY1:
|
||||
; MAX BOUNCE TIME FOR OMRON B3F IS 3MS
|
||||
PUSH DE ; SAVE DE
|
||||
LD DE,300 ; ~3MS DELAY
|
||||
CALL VDELAY ; DO IT
|
||||
CALL ICM_SCAN ; REPEAT SCAN
|
||||
POP DE ; RESTORE DE
|
||||
RET Z ; IF NOTHING PRESSED, DONE
|
||||
CP E ; SAME?
|
||||
JR ICM_KEY2 ; YES, READY TO RETURN
|
||||
LD E,A ; OTHERWISE, SAVE NEW SCAN VAL
|
||||
JR ICM_KEY1 ; AND LOOP UNTIL STABLE VALUE
|
||||
ICM_KEY2:
|
||||
OR A ; SET FLAGS BASED ON VALUE
|
||||
RET ; AND DONE
|
||||
;
|
||||
;__ICM_SCAN__________________________________________________________________________________________
|
||||
;
|
||||
; SCAN KEYPAD AND RETURN RAW SCAN CODE (RETURNS ZERO IF NO KEY PRESSED)
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
ICM_SCAN:
|
||||
LD B,4 ; 4 COLUMNS
|
||||
LD C,$01 ; FIRST COLUMN
|
||||
LD E,0 ; INITIAL COL ID
|
||||
ICM_SCAN1:
|
||||
LD A,C ; COL TO A
|
||||
OR $70 ; KEEP PPISD AND 7218 INACTIVE
|
||||
OUT (ICM_PPIC),A ; ACTIVATE COL
|
||||
IN A,(ICM_PPIB) ; READ ROW BITS
|
||||
AND $3F ; MASK, WE ONLY HAVE 6 ROWS, OTHERS UNDEFINED
|
||||
JR NZ,ICM_SCAN2 ; IF NOT ZERO, GOT SOMETHING
|
||||
RLC C ; NEXT COL
|
||||
INC E ; BUMP COL ID
|
||||
DJNZ ICM_SCAN1 ; LOOP THROUGH ALL COLS
|
||||
XOR A ; NOTHING FOUND, RETURN ZERO
|
||||
JP ICM_RESET ; RETURN VIA RESET
|
||||
ICM_SCAN2:
|
||||
RRC E ; MOVE COL ID
|
||||
RRC E ; ... TO HIGH BITS 6 & 7
|
||||
OR E ; COMBINE WITH ROW
|
||||
JP ICM_RESET ; RETURN VIA RESET
|
||||
;
|
||||
;
|
||||
; CONVERT FORM STANDARD SEGMENT ENCODING TO ICM ENCODING
|
||||
;
|
||||
; From: To:
|
||||
; +--01--+ +--40--+
|
||||
; 20 02 02 20
|
||||
; +--40--+ +--04--+
|
||||
; 10 04 08 10
|
||||
; +--08--+ 80 +--01--+ 80
|
||||
;
|
||||
ICM_XLAT:
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
LD C,A ; ORIG VALUE TO C
|
||||
XOR A ; INIT RESULT VALUE
|
||||
LD B,8
|
||||
LD HL,ICM_XTBL
|
||||
ICM_XLAT1:
|
||||
RRC C ; SHIFT NEXT BIT TO CF
|
||||
JR NC,ICM_XLAT2 ; SKIP IF BIT NOT SET
|
||||
OR (HL)
|
||||
ICM_XLAT2:
|
||||
INC HL
|
||||
DJNZ ICM_XLAT1
|
||||
POP HL
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
ICM_XTBL .DB $40, $20, $10, $01, $08, $02, $04, $80
|
||||
;
|
||||
;_ _TABLE_____________________________________________________________________________________________________________
|
||||
;
|
||||
ICM_KEYMAP:
|
||||
; POS $00 $01 $02 $03 $04 $05 $06 $07
|
||||
; KEY [0] [1] [2] [3] [4] [5] [6] [7]
|
||||
.DB $41, $02, $42, $82, $04, $44, $84, $08
|
||||
;
|
||||
; POS $08 $09 $0A $0B $0C $0D $0E $0F
|
||||
; KEY [8] [9] [A] [B] [C] [D] [E] [F]
|
||||
.DB $48, $88, $10, $50, $90, $20, $60, $A0
|
||||
;
|
||||
; POS $10 $11 $12 $13 $14 $15 $16 $17
|
||||
; KEY [FW] [BK] [CL] [EN] [DE] [EX] [GO] [BO]
|
||||
.DB $01, $81, $C1, $C2, $C4, $C8, $D0, $E0
|
||||
;
|
||||
; KBD WORKING STORAGE
|
||||
;
|
||||
ICM_KEYBUF .DB 0
|
||||
;
|
||||
;==================================================================================================
|
||||
; UTILTITY FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
;
|
||||
;==================================================================================================
|
||||
; STORAGE
|
||||
;==================================================================================================
|
||||
;
|
||||
; SEG DISPLAY WORKING STORAGE
|
||||
;
|
||||
ICM_PRESENT .DB 0
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,11 +9,14 @@
|
||||
; INTENDED TO CO-EXIST WITH LPT DRIVER.
|
||||
;
|
||||
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
|
||||
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
|
||||
; MUCH OF THE CODE IS DERIVED FROM LINUX AND FUZIX (ALAN COX).
|
||||
; - https://github.com/EtchedPixels/FUZIX
|
||||
; - https://github.com/torvalds/linux
|
||||
;
|
||||
; 5/23/2023 WBW - INITIAL RELEASE
|
||||
; 5/26/2023 WBW - CLEAN UP, LED ACTIVITY
|
||||
; 5/27/2023 WBW - ADDED SPP MODE
|
||||
; 05/23/2023 WBW - INITIAL RELEASE
|
||||
; 05/26/2023 WBW - CLEAN UP, LED ACTIVITY
|
||||
; 05/27/2023 WBW - ADDED SPP MODE
|
||||
; 06/06/2023 WBW - OPTIMIZE BLOCK READ AND WRITE
|
||||
;
|
||||
;=============================================================================
|
||||
;
|
||||
@@ -71,22 +74,18 @@
|
||||
;
|
||||
; TODO:
|
||||
;
|
||||
; - OPTIMIZE READ/WRITE LOOPS
|
||||
;
|
||||
; NOTES:
|
||||
;
|
||||
; - THIS DRIVER IS FOR THE ZIP DRIVE IMM 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 IMM OR PPA. SIGH.
|
||||
; DRIVE IS PPA OR IMM. 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.
|
||||
; - THIS DRIVER OPERATES USES NIBBLE READ MODE. ALTHOUGH THE 8255
|
||||
; (MG014) CAN READ OR WRITE TO PORT A (DATA), IT "GLITCHES" WHEN
|
||||
; THE MODE IS CHANGED CAUSING THE CONTROL LINES TO CHANGE AND
|
||||
; BREAKS THE PROTOCOL. I SUSPECT THE MBC SPP CAN SUPPORT 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
|
||||
@@ -130,6 +129,17 @@ IMM_IOBASE .EQU 3 ; IO BASE ADDRESS (BYTE)
|
||||
IMM_MEDCAP .EQU 4 ; MEDIA CAPACITY (DWORD)
|
||||
IMM_LBA .EQU 8 ; OFFSET OF LBA (DWORD)
|
||||
;
|
||||
; MACROS
|
||||
;
|
||||
#DEFINE IMM_WCTL(VAL) LD A,VAL \ CALL IMM_WRITECTRL
|
||||
#DEFINE IMM_WDATA(VAL) LD A,VAL \ CALL IMM_WRITEDATA
|
||||
;
|
||||
; INCLUDE MG014 NIBBLE MAP FOR MG014 MODE
|
||||
;
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
#DEFINE MG014_MAP
|
||||
#ENDIF
|
||||
;
|
||||
;=============================================================================
|
||||
; INITIALIZATION ENTRY POINT
|
||||
;=============================================================================
|
||||
@@ -184,8 +194,8 @@ IMM_INIT4:
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
|
||||
;
|
||||
CALL IMM_RESET ; RESET/INIT THE INTERFACE
|
||||
#IF (IMMTRACE == 0)
|
||||
CALL IMM_PRTSTAT
|
||||
#IF (IMMTRACE <= 1)
|
||||
CALL NZ,IMM_PRTSTAT
|
||||
#ENDIF
|
||||
JR NZ,IMM_INIT6
|
||||
;
|
||||
@@ -219,6 +229,11 @@ IMM_INIT6:
|
||||
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
|
||||
;
|
||||
IMM_DETECT:
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nDETECT:$")
|
||||
#ENDIF
|
||||
;
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+IMM_IOBASE) ; BASE PORT
|
||||
ADD A,IMM_IOSETUP ; BUMP TO SETUP PORT
|
||||
@@ -226,29 +241,53 @@ IMM_DETECT:
|
||||
LD A,$82 ; CONFIG A OUT, B IN, C OUT
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
|
||||
#ENDIF
|
||||
;
|
||||
; WE USE THIS SEQUENCE TO DETECT AN ACTUAL IMM DEVICE ON THE
|
||||
; PARALLEL PORT. THE VALUES RECORDED IN THE FINAL CALL TO
|
||||
; IMM_DISCONNECT ARE USED TO CONFIRM DEVICE PRESENCE.
|
||||
; NO ACTUAL SCSI COMMANDS ARE USED.
|
||||
; ATTEMPT TO ESTABLISH A CONNECTION TO THE IMM DEVICE AND
|
||||
; ISSUE A SCSI BUS RESET. WE DON'T KNOW IF DEVICE IS THERE
|
||||
; YET. THIS IS DONE BLIND ASSUMING IT IS THERE.
|
||||
CALL IMM_DISCONNECT
|
||||
CALL IMM_CONNECT
|
||||
CALL IMM_RESETPULSE ; ISSUE A SCSI BUS RESET
|
||||
LD DE,62 ; WAIT A BIT
|
||||
CALL VDELAY
|
||||
;
|
||||
; USE AN ABBREVIATED VERSION OF SELECT PROCESSING TO
|
||||
; CHECK IF DEVICE EXISTS.
|
||||
IMM_WCTL($0C)
|
||||
CALL IMM_READSTATUS
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; READY FOR SELECT?
|
||||
AND $08
|
||||
CP $00
|
||||
JR NZ,IMM_DETECT1
|
||||
;
|
||||
IMM_WCTL($04)
|
||||
LD A,$80 | (1 << IMM_TGT)
|
||||
CALL IMM_WRITEDATA
|
||||
IMM_WCTL($0C)
|
||||
IMM_WCTL($0D)
|
||||
CALL DELAY
|
||||
CALL IMM_READSTATUS
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; DID SELECT SUCCEED?
|
||||
AND $08
|
||||
CP $08
|
||||
;
|
||||
IMM_DETECT1:
|
||||
PUSH AF
|
||||
CALL IMM_DISCONNECT
|
||||
;
|
||||
; THE IMM_SN VALUES ARE RECORDED IN THE CPP ROUTINE USED BY
|
||||
; IMM_CONNECT/DISCONNECT.
|
||||
; EXPECTING S1=$B8, S2=$18, S3=$38
|
||||
LD A,(IMM_S1)
|
||||
CP $B8
|
||||
RET NZ
|
||||
LD A,(IMM_S2)
|
||||
CP $18
|
||||
RET NZ
|
||||
LD A,(IMM_S3)
|
||||
CP $38
|
||||
RET NZ
|
||||
;
|
||||
XOR A
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;=============================================================================
|
||||
@@ -289,7 +328,7 @@ IMM_READ:
|
||||
;
|
||||
;
|
||||
IMM_WRITE:
|
||||
CALL HB_DSKREAD ; HOOK DISK WRITE CONTROLLER
|
||||
CALL HB_DSKWRITE ; HOOK DISK WRITE CONTROLLER
|
||||
LD A,SCSI_CMD_WRITE ; SETUP SCSI WRITE
|
||||
LD (IMM_CMD_RW),A ; AND SAVE IT IN SCSI CMD
|
||||
JP IMM_IO ; DO THE I/O
|
||||
@@ -297,9 +336,20 @@ IMM_WRITE:
|
||||
;
|
||||
;
|
||||
IMM_IO:
|
||||
LD (IMM_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
PUSH HL
|
||||
CALL IMM_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
|
||||
POP HL
|
||||
JR NZ,IMM_IO3 ; BAIL OUT ON ERROR
|
||||
;
|
||||
LD (IMM_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
LD A,IMM_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
; SETUP LBA
|
||||
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
|
||||
@@ -313,10 +363,9 @@ IMM_IO:
|
||||
LD A,(IY+IMM_LBA+0)
|
||||
LD (HL),A
|
||||
INC HL
|
||||
;
|
||||
; DO SCSI IO
|
||||
LD DE,(IMM_DSKBUF) ; DISK BUFFER TO DE
|
||||
LD BC,512 ; ONE SECTOR, 512 BYTES
|
||||
LD A,1 ; BLOCK I/O, ONE SECTOR
|
||||
LD HL,IMM_CMD_RW ; POINT TO READ/WRITE CMD TEMPLATE
|
||||
CALL IMM_RUNCMD ; RUN THE SCSI ENGINE
|
||||
CALL Z,IMM_CHKCMD ; IF EXIT OK, CHECK SCSI RESULTS
|
||||
@@ -358,7 +407,7 @@ IMM_RESET:
|
||||
IMM_DEVICE:
|
||||
LD D,DIODEV_IMM ; D := DEVICE TYPE
|
||||
LD E,(IY+IMM_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%01000000 ; C := REMOVABLE HARD DISK
|
||||
LD C,%01111001 ; C := REMOVABLE HARD DISK
|
||||
LD H,(IY+IMM_MODE) ; H := MODE
|
||||
LD L,(IY+IMM_IOBASE) ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -445,6 +494,10 @@ IMM_WRITECTRL:
|
||||
#IF (IMMMODE == IMMMODE_MG014
|
||||
XOR $0B | $80 ; HIGH BIT IS MG014 LED
|
||||
#ENDIF
|
||||
;#IF (IMMMODE == IMMMODE_SPP
|
||||
; AND %00001111
|
||||
; OR %11000000
|
||||
;#ENDIF
|
||||
LD C,(IY+IMM_IOBASE) ; GET BASE IO ADDRESS
|
||||
INC C ; BUMP TO CONTROL PORT
|
||||
INC C
|
||||
@@ -503,28 +556,28 @@ IMM_READSTATUS5:
|
||||
;
|
||||
IMM_CPP:
|
||||
PUSH AF
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
LD A,$AA \ CALL IMM_WRITEDATA
|
||||
LD A,$55 \ CALL IMM_WRITEDATA
|
||||
LD A,$00 \ CALL IMM_WRITEDATA
|
||||
LD A,$FF \ CALL IMM_WRITEDATA
|
||||
IMM_WCTL($0C)
|
||||
IMM_WDATA($AA)
|
||||
IMM_WDATA($55)
|
||||
IMM_WDATA($00)
|
||||
IMM_WDATA($FF)
|
||||
CALL IMM_READSTATUS
|
||||
AND $B8
|
||||
LD (IMM_S1),A
|
||||
LD A,$87 \ CALL IMM_WRITEDATA
|
||||
IMM_WDATA($87)
|
||||
CALL IMM_READSTATUS
|
||||
AND $B8
|
||||
LD (IMM_S2),A
|
||||
LD A,$78 \ CALL IMM_WRITEDATA
|
||||
IMM_WDATA($78)
|
||||
CALL IMM_READSTATUS
|
||||
AND $38
|
||||
LD (IMM_S3),A
|
||||
POP AF
|
||||
CALL IMM_WRITEDATA
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
LD A,$0D \ CALL IMM_WRITECTRL
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
LD A,$FF \ CALL IMM_WRITEDATA
|
||||
IMM_WCTL($0C)
|
||||
IMM_WCTL($0D)
|
||||
IMM_WCTL($0C)
|
||||
IMM_WDATA($FF)
|
||||
;
|
||||
; CONNECT: S1=$B8 S2=$18 S3=$30
|
||||
; DISCONNECT: S1=$B8 S2=$18 S3=$38
|
||||
@@ -567,23 +620,23 @@ IMM_DISCONNECT:
|
||||
CALL IMM_CPP
|
||||
;
|
||||
; TURNS OFF MG014 LED
|
||||
LD A,$8C \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($8C)
|
||||
;
|
||||
RET
|
||||
;
|
||||
; INITIATE A SCSI BUS RESET.
|
||||
;
|
||||
IMM_RESETPULSE:
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
LD A,$40 \ CALL IMM_WRITEDATA
|
||||
IMM_WCTL($04)
|
||||
IMM_WDATA($40)
|
||||
CALL DELAY ; 16 US, IDEALLY, 1 US
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
LD A,$0D \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($0C)
|
||||
IMM_WCTL($0D)
|
||||
CALL DELAY ; 48 US, IDEALLY, 50 US
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($0C)
|
||||
IMM_WCTL($04)
|
||||
RET
|
||||
;
|
||||
; SCSI SELECT PROCESS
|
||||
@@ -592,44 +645,29 @@ IMM_SELECT:
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nSELECT: $")
|
||||
#ENDIF
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
;
|
||||
LD HL,500 ; TIMEOUT COUNTER
|
||||
IMM_WCTL($0C)
|
||||
;
|
||||
LD B,0 ; TIMEOUT COUNTER
|
||||
IMM_SELECT1:
|
||||
CALL IMM_READSTATUS
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
AND $08
|
||||
JR Z,IMM_SELECT2 ; IF CLEAR, MOVE ON
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JP Z,IMM_CMD_TIMEOUT ; TIMEOUT
|
||||
JR IMM_SELECT1
|
||||
DJNZ IMM_SELECT1
|
||||
JP IMM_CMD_TIMEOUT ; TIMEOUT
|
||||
;
|
||||
IMM_SELECT2:
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
; PLACE HOST AND TARGET BIT ON DATA BUS
|
||||
LD A,$80 | (1 << IMM_TGT)
|
||||
CALL IMM_WRITEDATA
|
||||
CALL DELAY ; CONFIRM DELAY TIME?
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL IMM_READSTATUS
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
LD A,$0D \ CALL IMM_WRITECTRL
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL IMM_READSTATUS
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
LD HL,500 ; TIMEOUT COUNTER
|
||||
IMM_WCTL($0C)
|
||||
IMM_WCTL($0D)
|
||||
;
|
||||
LD B,0 ; TIMEOUT COUNTER
|
||||
IMM_SELECT3:
|
||||
CALL IMM_READSTATUS
|
||||
#IF (IMMTRACE >= 3)
|
||||
@@ -638,14 +676,11 @@ IMM_SELECT3:
|
||||
#ENDIF
|
||||
AND $08
|
||||
JR NZ,IMM_SELECT4 ; IF SET, MOVE ON
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JP Z,IMM_CMD_TIMEOUT ; TIMEOUT
|
||||
JR IMM_SELECT3
|
||||
DJNZ IMM_SELECT3
|
||||
JP IMM_CMD_TIMEOUT ; TIMEOUT
|
||||
;
|
||||
IMM_SELECT4:
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($0C)
|
||||
;
|
||||
XOR A
|
||||
RET
|
||||
@@ -675,7 +710,7 @@ IMM_SENDCMD:
|
||||
;
|
||||
INC HL ; BACK TO FIRST CMD BYTE
|
||||
IMM_SENDCMD1:
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
LD A,(HL) ; LOAD CMD BYTE
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
@@ -686,8 +721,8 @@ IMM_SENDCMD1:
|
||||
CALL IMM_WRITEDATA ; PUT IT ON THE BUS
|
||||
INC HL ; BUMP TO NEXT BYTE
|
||||
DEC B ; DEC LOOP COUNTER
|
||||
LD A,$05
|
||||
CALL IMM_WRITECTRL \ LD A,(HL) ; LOAD CMD BYTE
|
||||
IMM_WCTL($05)
|
||||
LD A,(HL) ; LOAD CMD BYTE
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
@@ -696,11 +731,11 @@ IMM_SENDCMD1:
|
||||
;
|
||||
CALL IMM_WRITEDATA ; PUT IT ON THE BUS
|
||||
INC HL ; BUMP TO NEXT BYTE
|
||||
LD A,$00 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($00)
|
||||
DJNZ IMM_SENDCMD1 ; LOOP TILL DONE
|
||||
;
|
||||
IMM_SENDCMD2:
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
;
|
||||
RET
|
||||
;
|
||||
@@ -718,20 +753,23 @@ IMM_WAITLOOP:
|
||||
;
|
||||
IMM_WAIT:
|
||||
LD HL,500 ; GOOD VALUE???
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($0C)
|
||||
CALL IMM_WAITLOOP
|
||||
JP Z,IMM_CMD_TIMEOUT ; HANDLE TIMEOUT
|
||||
PUSH AF
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
POP AF
|
||||
AND $B8
|
||||
RET ; RETURN W/ RESULT IN A
|
||||
;
|
||||
; MAX OBSERVED IMM_WAITLOOP ITERATIONS IS $0116B3
|
||||
; MAX OBSERVED WAITLOOP ITERATIONS IS $0116B3 @ 7.3728 MHZ ON MG014
|
||||
; MAX OBSERVED WAITLOOP ITERATIONS IS $028EFE @ 8.000 MHZ ON MBC SPP
|
||||
;
|
||||
IMM_LONGWAIT:
|
||||
LD B,3 ; VALUE???
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
LD A,(CB_CPUMHZ) ; LOAD CPU SPEED IN MHZ
|
||||
SRL A ; DIVIDE BY 2, GOOD ENOUGH
|
||||
LD B,A ; USE FOR OUTER LOOP COUNT
|
||||
IMM_WCTL($0C)
|
||||
IMM_LONGWAIT1:
|
||||
LD HL,0
|
||||
CALL IMM_WAITLOOP
|
||||
@@ -741,7 +779,7 @@ IMM_LONGWAIT1:
|
||||
;
|
||||
IMM_LONGWAIT2:
|
||||
PUSH AF
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
;
|
||||
#IF 0
|
||||
CALL PC_GT
|
||||
@@ -761,19 +799,19 @@ IMM_NEGOTIATE:
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nNEGO: $")
|
||||
#ENDIF
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
CALL DELAY ; 16 US, IDEALLY 5 US
|
||||
LD A,$00 \ CALL IMM_WRITEDATA
|
||||
IMM_WDATA($00)
|
||||
LD DE,7 ; 112 US, IDEALLY 100 US
|
||||
CALL VDELAY
|
||||
LD A,$06 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($06)
|
||||
CALL DELAY ; 16 US, IDEALLY 5 US
|
||||
CALL IMM_READSTATUS
|
||||
PUSH AF ; SAVE RESULT
|
||||
CALL DELAY ; 16 US, IDEALLY 5 US
|
||||
LD A,$07 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($07)
|
||||
CALL DELAY ; 16 US, IDEALLY 5 US
|
||||
LD A,$06 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($06)
|
||||
;
|
||||
POP AF
|
||||
;
|
||||
@@ -799,7 +837,7 @@ IMM_NEGOTIATE:
|
||||
;
|
||||
IMM_GETBYTE:
|
||||
CALL IMM_WAIT
|
||||
LD A,$06 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($06)
|
||||
CALL IMM_READSTATUS
|
||||
AND $F0
|
||||
RRCA
|
||||
@@ -807,32 +845,31 @@ IMM_GETBYTE:
|
||||
RRCA
|
||||
RRCA
|
||||
PUSH AF
|
||||
LD A,$05 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($05)
|
||||
CALL IMM_READSTATUS
|
||||
AND $F0
|
||||
POP HL
|
||||
OR H
|
||||
PUSH AF
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; GET A CHUNK OF DATA FROM SCSI BUS. THIS IS SPECIFICALLY FOR
|
||||
; READ PHASE. IF A LENGTH IS SPECIFIED (NON-ZERO HL), THEN THE
|
||||
; DATA IS BURST READ. IF NO LENGTH SPECIFIED, DATA IS READ AS
|
||||
; LONG AS SCSI DEVICE WANTS TO CONTINUE SENDING (NO OVERRUN
|
||||
; READ PHASE. IF TRANSFER MODE IS NON-ZERO, THEN A BLOCK (512 BYTES)
|
||||
; OF DATA WILL BE READ. OTHERWISE, DATA IS WRITTEN AS
|
||||
; LONG AS SCSI DEVICE WANTS TO CONTINUE RECEIVING (NO OVERRUN
|
||||
; CHECK IN THIS CASE).
|
||||
;
|
||||
; THIS IS A NIBBLE READ.
|
||||
;
|
||||
; DE=BUFFER
|
||||
; HL=LENGTH (0 FOR VARIABLE)
|
||||
; A=TRANSFER MODE (0=VARIABLE, 1=BLOCK)
|
||||
;
|
||||
IMM_GETDATA:
|
||||
; BRANCH TO CORRECT ROUTINE
|
||||
LD A,H
|
||||
OR L ; IF ZERO
|
||||
JR NZ,IMM_GETDATALEN ; DO BURST READ
|
||||
OR A
|
||||
JR NZ,IMM_GETBLOCK ; DO BLOCK READ
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nGETDATA:$")
|
||||
@@ -844,8 +881,7 @@ IMM_GETDATA1:
|
||||
POP HL ; RESTORE BYTE COUNTER
|
||||
CP $98 ; CHECK FOR READ PHASE
|
||||
JR NZ,IMM_GETDATA2 ; IF NOT, ASSUME WE ARE DONE
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
LD A,$06 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($06)
|
||||
CALL IMM_READSTATUS ; GET FIRST NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
RRCA ; AND SHIFT TO LOW NIBBLE
|
||||
@@ -853,7 +889,7 @@ IMM_GETDATA1:
|
||||
RRCA
|
||||
RRCA
|
||||
PUSH AF ; SAVE WORKING VALUE
|
||||
LD A,$05 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($05)
|
||||
CALL IMM_READSTATUS ; GET SECOND NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
POP BC ; RECOVER LOW NIBBLE
|
||||
@@ -861,8 +897,7 @@ IMM_GETDATA1:
|
||||
LD (DE),A ; AND SAVE THE FULL BYTE VALUE
|
||||
INC DE ; NEXT BUFFER POS
|
||||
INC HL ; INCREMENT BYTES COUNTER
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
JR IMM_GETDATA1 ; LOOP TILL DONE
|
||||
;
|
||||
IMM_GETDATA2:
|
||||
@@ -873,57 +908,112 @@ IMM_GETDATA2:
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
IMM_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
IMM_GETDATALEN:
|
||||
IMM_GETBLOCK:
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nGETDLEN:$")
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
PRTS("\r\nGETBLK:$")
|
||||
#ENDIF
|
||||
;
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_GETDATALEN1:
|
||||
LD A,$06 \ CALL IMM_WRITECTRL
|
||||
CALL IMM_READSTATUS ; GET FIRST NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
RRCA ; MOVE TO LOW NIBBLE
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
PUSH AF ; SAVE WORKING VALUE
|
||||
LD A,$05 \ CALL IMM_WRITECTRL
|
||||
CALL IMM_READSTATUS ; GET SECOND NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
POP BC ; RECOVER FIRST NIBBLE
|
||||
OR B ; COMBINE
|
||||
LD (DE),A ; SAVE FINAL BYTE VALUE
|
||||
INC DE ; NEXT BUFFER POS
|
||||
DEC HL ; DEC LOOP COUNTER
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
LD A,H ; CHECK LOOP COUNTER
|
||||
OR L
|
||||
JR NZ,IMM_GETDATALEN1 ; LOOP IF NOT DONE
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
LD B,0 ; LOOP COUNTER
|
||||
EXX ; SWITCH TO ALT REGS
|
||||
EX AF,AF' ; SWITCH TO ALT AF
|
||||
; SAVE ALT REGS
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
; C: PORT C
|
||||
LD A,(IY+IMM_IOBASE) ; BASE PORT
|
||||
INC A ; STATUS PORT
|
||||
LD (IMM_GETBLOCK_A),A ; FILL IN
|
||||
LD (IMM_GETBLOCK_B),A ; ... DYNAMIC BITS OF CODE
|
||||
INC A ; CONTROL PORT
|
||||
LD C,A ; ... TO C
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
; DE: CLOCK VALUES
|
||||
LD D,$06 ^ ($0B | $80)
|
||||
LD E,$05 ^ ($0B | $80)
|
||||
; HL: STATMAP
|
||||
LD H,MG014_STATMAPLO >> 8
|
||||
#ENDIF
|
||||
#IF (IMMMODE == IMMMODE_SPP)
|
||||
; DE: CLOCK VALUES
|
||||
LD D,$06
|
||||
LD E,$05
|
||||
#ENDIF
|
||||
EXX ; SWITCH TO PRI REGS
|
||||
EX AF,AF' ; SWITCH TO PRI AF
|
||||
CALL IMM_GETBLOCK1 ; LOOP TWICE
|
||||
CALL IMM_GETBLOCK1 ; ... FOR 512 BYTES
|
||||
; RESTORE ALT REGS
|
||||
EXX ; SWITCH TO ALT REGS
|
||||
EX AF,AF' ; SWITCH TO ALT AF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
EXX ; SWITCH TO PRI REGS
|
||||
EX AF,AF' ; SWITCH TO PRI AF
|
||||
IMM_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
IMM_GETBLOCK1:
|
||||
EXX ; ALT REGS
|
||||
OUT (C),D ; SEND FIRST CLOCK
|
||||
IMM_GETBLOCK_A .EQU $+1
|
||||
IN A,($FF) ; GET LOW NIBBLE
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
AND $0F ; RELEVANT BITS ONLY
|
||||
ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR
|
||||
LD L,A ; PUT IN L
|
||||
LD A,(HL) ; LOOKUP LOW NIBBLE VALUE
|
||||
EX AF,AF' ; ALT AF, SAVE NIBBLE
|
||||
#ENDIF
|
||||
#IF (IMMMODE == IMMMODE_SPP)
|
||||
AND $F0 ; RELEVANT BITS ONLY
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
LD L,A ; SAVE NIBBLE IN L
|
||||
#ENDIF
|
||||
OUT (C),E ; SEND SECOND CLOCK
|
||||
IMM_GETBLOCK_B .EQU $+1
|
||||
IN A,($FF) ; GET HIGH NIBBLE
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
AND $0F ; RELEVANT BITS ONLY
|
||||
ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR
|
||||
LD L,A ; PUT IN L
|
||||
EX AF,AF' ; PRI AF, RECOVER LOW NIBBLE VALUE
|
||||
OR (HL) ; COMBINE WITH HIGH NIB VALUE
|
||||
#ENDIF
|
||||
#IF (IMMMODE == IMMMODE_SPP)
|
||||
AND $F0 ; RELEVANT BITS ONLY
|
||||
OR L ; COMBINE WITH HIGH NIB VALUE
|
||||
#ENDIF
|
||||
EXX ; SWITCH TO PRI REGS
|
||||
LD (DE),A ; SAVE BYTE
|
||||
INC DE ; BUMP BUF PTR
|
||||
DJNZ IMM_GETBLOCK1 ; LOOP
|
||||
RET ; DONE
|
||||
;
|
||||
; PUT A CHUNK OF DATA TO THE SCSI BUS. THIS IS SPECIFICALLY FOR
|
||||
; WRITE PHASE. IF A LENGTH IS SPECIFIED (NON-ZERO HL), THEN THE
|
||||
; DATA IS BURST WRITTEN. IF NO LENGTH SPECIFIED, DATA IS WRITTEN AS
|
||||
; WRITE PHASE. IF TRANSFER MODE IS NON-ZERO, THEN A BLOCK (512 BYTES)
|
||||
; OF DATA WILL BE WRITTEN. OTHERWISE, DATA IS WRITTEN AS
|
||||
; LONG AS SCSI DEVICE WANTS TO CONTINUE RECEIVING (NO OVERRUN
|
||||
; CHECK IN THIS CASE).
|
||||
;
|
||||
; READS ARE DONE AS BYTE PAIRS. EACH LOOP READS 2 BYTES.
|
||||
;
|
||||
; DE=BUFFER
|
||||
; HL=LENGTH (0 FOR VARIABLE)
|
||||
; A=TRANSFER MODE (0=VARIABLE, 1=BLOCK)
|
||||
;
|
||||
IMM_PUTDATA:
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,IMM_PUTDATALEN
|
||||
; BRANCH TO CORRECT ROUTINE
|
||||
OR A
|
||||
JR NZ,IMM_PUTBLOCK ; DO BLOCK WRITE
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nPUTDATA:$")
|
||||
@@ -935,21 +1025,21 @@ IMM_PUTDATA1:
|
||||
POP HL ; RESTORE BYTE COUNTER
|
||||
CP $88 ; CHECK FOR WRITE PHASE
|
||||
JR NZ,IMM_PUTDATA2 ; IF NOT, ASSUME WE ARE DONE
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
;IMM_WCTL($04)
|
||||
LD A,(DE) ; GET NEXT BYTE TO WRITE (FIRST OF PAIR)
|
||||
CALL IMM_WRITEDATA ; PUT ON BUS
|
||||
INC DE ; BUMP TO NEXT BUF POS
|
||||
INC HL ; INCREMENT COUNTER
|
||||
LD A,$05 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($05)
|
||||
LD A,(DE) ; GET NEXT BYTE TO WRITE (SECOND OF PAIR)
|
||||
CALL IMM_WRITEDATA ; PUT ON BUS
|
||||
INC DE ; BUMP TO NEXT BUF POS
|
||||
INC HL ; INCREMENT COUNTER
|
||||
LD A,$00 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($00)
|
||||
JR IMM_PUTDATA1 ; LOOP TILL DONE
|
||||
;
|
||||
IMM_PUTDATA2:
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
@@ -959,33 +1049,47 @@ IMM_PUTDATA2:
|
||||
;
|
||||
RET
|
||||
;
|
||||
IMM_PUTDATALEN:
|
||||
IMM_PUTBLOCK:
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nPUTDLEN:$")
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
PRTS("\r\nPUTBLK:$")
|
||||
#ENDIF
|
||||
;
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_PUTDATALEN1:
|
||||
LD A,(DE) ; GET NEXT BYTE (FIRST OF PAIR)
|
||||
CALL IMM_WRITEDATA ; PUT ON BUS
|
||||
INC DE ; INCREMENT BUF POS
|
||||
DEC HL ; DEC LOOP COUNTER
|
||||
LD A,$05 \ CALL IMM_WRITECTRL
|
||||
LD A,(DE) ; GET NEXT BYTE (SECOND OF PAIR)
|
||||
CALL IMM_WRITEDATA ; PUT ON BUS
|
||||
INC DE ; INCREMENT BUF POS
|
||||
DEC HL ; DEC LOOP COUNTER
|
||||
LD A,$00 \ CALL IMM_WRITECTRL
|
||||
LD A,H ; CHECK LOOP COUNTER
|
||||
OR L
|
||||
JR NZ,IMM_PUTDATALEN1 ; LOOP TILL DONE
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
LD B,0 ; LOOP COUNTER
|
||||
LD A,(IY+IMM_IOBASE) ; GET BASE IO ADR
|
||||
LD (IMM_PUTBLOCK_A),A ; FILL IN
|
||||
LD (IMM_PUTBLOCK_B),A ; ... DYNAMIC BITS OF CODE
|
||||
INC A ; STATUS PORT
|
||||
INC A ; CONTROL PORT
|
||||
LD C,A ; ... TO C
|
||||
; HL: CLOCK VALUES
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
LD H,$05 ^ ($0B | $80)
|
||||
LD L,$00 ^ ($0B | $80)
|
||||
#ENDIF
|
||||
#IF (IMMMODE == IMMMODE_SPP)
|
||||
LD H,$05
|
||||
LD L,$00
|
||||
#ENDIF
|
||||
CALL IMM_PUTBLOCK1 ; ONE LOOP CUZ BYTE PAIRS
|
||||
IMM_WCTL($04)
|
||||
RET
|
||||
;
|
||||
IMM_PUTBLOCK1:
|
||||
LD A,(DE) ; GET NEXT BYTE
|
||||
IMM_PUTBLOCK_A .EQU $+1
|
||||
OUT ($FF),A ; PUT ON BUS
|
||||
INC DE ; INCREMENT BUF POS
|
||||
OUT (C),H ; FIRST CLOCK
|
||||
LD A,(DE) ; GET NEXT BYTE
|
||||
IMM_PUTBLOCK_B .EQU $+1
|
||||
OUT ($FF),A ; PUT ON BUS
|
||||
INC DE ; INCREMENT BUF POS
|
||||
OUT (C),L ; SECOND CLOCK
|
||||
DJNZ IMM_PUTBLOCK1 ; LOOP
|
||||
RET ; DONE
|
||||
;
|
||||
; READ SCSI COMMAND STATUS
|
||||
;
|
||||
IMM_GETSTATUS:
|
||||
@@ -1015,13 +1119,13 @@ IMM_GETSTATUS:
|
||||
;
|
||||
RET
|
||||
;
|
||||
; TERMINATE A BULD READ OPERATION
|
||||
; TERMINATE A BULK READ OPERATION
|
||||
;
|
||||
IMM_ENDREAD:
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
LD A,$0C \ CALL IMM_WRITECTRL
|
||||
LD A,$0E \ CALL IMM_WRITECTRL
|
||||
LD A,$04 \ CALL IMM_WRITECTRL
|
||||
IMM_WCTL($04)
|
||||
IMM_WCTL($0C)
|
||||
IMM_WCTL($0E)
|
||||
IMM_WCTL($04)
|
||||
RET
|
||||
;
|
||||
; THIS IS THE MAIN SCSI ENGINE. BASICALLY, IT SELECTS THE DEVICE
|
||||
@@ -1029,7 +1133,7 @@ IMM_ENDREAD:
|
||||
;
|
||||
; HL: COMMAND BUFFER
|
||||
; DE: TRANSFER BUFFER
|
||||
; BC: TRANSFER LENGTH (0=VARIABLE)
|
||||
; A: TRANSFER MODE (0=VARIABLE, 1=BLOCK)
|
||||
;
|
||||
IMM_RUNCMD:
|
||||
; THERE ARE MANY PLACES NESTED WITHIN THE ROUTINES THAT
|
||||
@@ -1038,7 +1142,7 @@ IMM_RUNCMD:
|
||||
; SEE IMM_CMD_ERR BELOW.
|
||||
LD (IMM_CMDSTK),SP ; FOR ERROR ABORTS
|
||||
LD (IMM_DSKBUF),DE ; SAVE BUF PTR
|
||||
LD (IMM_XFRLEN),BC ; SAVE XFER LEN
|
||||
LD (IMM_XFRMODE),A ; SAVE XFER LEN
|
||||
PUSH HL
|
||||
CALL IMM_CONNECT ; PARALLEL PORT BUS CONNECT
|
||||
CALL IMM_SELECT ; SELECT TARGET DEVICE
|
||||
@@ -1069,7 +1173,7 @@ IMM_RUNCMD_PHASE:
|
||||
;
|
||||
IMM_RUNCMD_WRITE:
|
||||
LD DE,(IMM_DSKBUF) ; XFER BUFFER
|
||||
LD HL,(IMM_XFRLEN) ; XFER LENGTH
|
||||
LD A,(IMM_XFRMODE) ; XFER MODE
|
||||
CALL IMM_PUTDATA ; SEND DATA NOW
|
||||
JR IMM_RUNCMD_PHASE ; BACK TO DISPATCH
|
||||
;
|
||||
@@ -1078,7 +1182,7 @@ IMM_RUNCMD_READ:
|
||||
CALL IMM_WAIT ; WAIT TILL READY
|
||||
; CHECK FOR STATUS $98???
|
||||
LD DE,(IMM_DSKBUF) ; XFER BUFFER
|
||||
LD HL,(IMM_XFRLEN) ; XFER LENGTH
|
||||
LD A,(IMM_XFRMODE) ; XFER MODE
|
||||
CALL IMM_GETDATA ; GET THE DATA NOW
|
||||
CALL IMM_ENDREAD ; TERMINATE THE READ
|
||||
JR IMM_RUNCMD_PHASE ; BACK TO DISPATCH
|
||||
@@ -1135,14 +1239,15 @@ IMM_CHKCMD:
|
||||
IMM_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 A,0 ; VARIABLE LENGTH REQUEST
|
||||
LD HL,IMM_CMD_SENSE ; REQUEST SENSE CMD
|
||||
CALL IMM_RUNCMD ; DO IT
|
||||
JP NZ,IMM_IOERR ; BAIL IF ERROR IN CMD
|
||||
;
|
||||
; REQ SENSE CMD COMPLETED
|
||||
#IF (IMMTRACE >= 3)
|
||||
LD A,16
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL Z,PRTHEXBUF
|
||||
#ENDIF
|
||||
@@ -1171,6 +1276,8 @@ IMM_CHKERR:
|
||||
; (RE)INITIALIZE DEVICE
|
||||
;
|
||||
IMM_INITDEV:
|
||||
;
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+IMM_IOBASE) ; BASE PORT
|
||||
ADD A,IMM_IOSETUP ; BUMP TO SETUP PORT
|
||||
@@ -1178,6 +1285,7 @@ IMM_INITDEV:
|
||||
LD A,$82 ; CONFIG A OUT, B IN, C OUT
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; SHORT DELAY FOR BUS SETTLE
|
||||
#ENDIF
|
||||
;
|
||||
CALL IMM_DISCONNECT ; DISCONNECT FIRST JUST IN CASE
|
||||
CALL IMM_CONNECT ; NOW CONNECT TO BUS
|
||||
@@ -1199,7 +1307,7 @@ IMM_INITDEV1:
|
||||
;
|
||||
; REQUEST SENSE COMMAND
|
||||
LD DE,HB_WRKBUF ; BUFFER FOR SENSE DATA
|
||||
LD BC,0 ; READ WHATEVER IS SENT
|
||||
LD A,0 ; READ WHATEVER IS SENT
|
||||
LD HL,IMM_CMD_SENSE ; POINT TO CMD BUFFER
|
||||
CALL IMM_RUNCMD ; RUN THE SCSI ENGINE
|
||||
JR NZ,IMM_INITDEV2 ; CMD PROC ERROR
|
||||
@@ -1210,7 +1318,8 @@ IMM_INITDEV1:
|
||||
JR NZ,IMM_INITDEV2 ; IF ERROR, LOOP
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
LD A,16
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
#ENDIF
|
||||
@@ -1228,13 +1337,14 @@ IMM_INITDEV2:
|
||||
IMM_INITDEV3:
|
||||
; READ & RECORD DEVICE CAPACITY
|
||||
LD DE,HB_WRKBUF ; BUFFER TO CAPACITY RESPONSE
|
||||
LD BC,0 ; READ WHATEVER IS SENT
|
||||
LD A,0 ; READ WHATEVER IS SENT
|
||||
LD HL,IMM_CMD_RDCAP ; POINT TO READ CAPACITY CMD
|
||||
CALL IMM_RUNCMD ; RUN THE SCSI ENGINE
|
||||
CALL Z,IMM_CHKCMD ; CHECK AND RECORD ANY ERRORS
|
||||
RET NZ ; BAIL ON ON ERROR
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nRDCAP:$")
|
||||
LD A,8
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
@@ -1293,7 +1403,7 @@ IMM_ERR:
|
||||
LD (IY+IMM_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
IMM_ERR2:
|
||||
#IF (IMMTRACE >= 1)
|
||||
#IF (IMMTRACE >= 2)
|
||||
CALL IMM_PRTSTAT
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS
|
||||
@@ -1390,7 +1500,7 @@ IMM_STR_NOHW .TEXT "NOT PRESENT$"
|
||||
IMM_DEVNUM .DB 0 ; TEMP DEVICE NUM USED DURING INIT
|
||||
IMM_CMDSTK .DW 0 ; STACK PTR FOR CMD ABORTING
|
||||
IMM_DSKBUF .DW 0 ; WORKING DISK BUFFER POINTER
|
||||
IMM_XFRLEN .DW 0 ; WORKING TRANSFER LENGTH
|
||||
IMM_XFRMODE .DB 0 ; 0=VARIABLE, 1=BLOCK (512 BYTES)
|
||||
IMM_CMDSTAT .DB 0, 0 ; CMD RESULT STATUS
|
||||
;
|
||||
; SCSI COMMAND TEMPLATES (LENGTH PREFIXED)
|
||||
|
||||
@@ -21,9 +21,9 @@ MD_LBA .EQU 2 ; OFFSET OF LBA (DWORD)
|
||||
MD_MID .EQU 6 ; OFFSET OF MEDIA ID (BYTE)
|
||||
MD_ATTRIB .EQU 7 ; OFFSET OF ATTRIBUTE (BYTE)
|
||||
;
|
||||
MD_AROM .EQU %00100000 ; ROM ATTRIBUTE
|
||||
MD_ARAM .EQU %00101000 ; RAM ATTRIBUTE
|
||||
MD_AFSH .EQU %00111000 ; FLASH ATTRIBUTE
|
||||
MD_AROM .EQU %00010100 ; ROM ATTRIBUTE
|
||||
MD_ARAM .EQU %00010101 ; RAM ATTRIBUTE
|
||||
MD_AFSH .EQU %00010111 ; FLASH ATTRIBUTE
|
||||
;
|
||||
MD_FDBG .EQU 0 ; FLASH DEBUG CODE
|
||||
MD_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT
|
||||
@@ -303,9 +303,11 @@ MD_RW1:
|
||||
PUSH BC ; SAVE COUNTERS
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
LD A,MD_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
LD HL,(MD_RWFNADR) ; GET PENDING IO FUNCTION ADDRESS
|
||||
|
||||
@@ -2,12 +2,11 @@
|
||||
; PCF8584 I2C CLOCK DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
PCF_BASE .EQU 0F0H
|
||||
PCF_BASE .EQU PCFBASE
|
||||
PCF_ID .EQU 0AAH
|
||||
CPU_CLK .EQU 12
|
||||
|
||||
;
|
||||
PCF_RS0 .EQU PCF_BASE
|
||||
PCF_RS1 .EQU PCF_RS0+1
|
||||
PCF_RS1 .EQU PCF_BASE+1
|
||||
PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE
|
||||
;
|
||||
;T4LC512D .EQU 10100000B ; DEVICE IDENTIFIER
|
||||
@@ -37,10 +36,10 @@ PCF_STA .EQU 00000100B
|
||||
PCF_STO .EQU 00000010B
|
||||
PCF_ACK .EQU 00000001B
|
||||
;
|
||||
PCF_START_ .EQU (PCF_PIN | PCF_ES0 | PCF_STA | PCF_ACK)
|
||||
PCF_STOP_ .EQU (PCF_PIN | PCF_ES0 | PCF_STO | PCF_ACK)
|
||||
PCF_REPSTART_ .EQU ( PCF_ES0 | PCF_STA | PCF_ACK)
|
||||
PCF_IDLE_ .EQU (PCF_PIN | PCF_ES0 | PCF_ACK)
|
||||
PCF_START_ .EQU (PCF_PIN | PCF_ES0 | PCF_STA | PCF_ACK)
|
||||
PCF_STOP_ .EQU (PCF_PIN | PCF_ES0 | PCF_STO | PCF_ACK)
|
||||
PCF_REPSTART_ .EQU (PCF_ES0 | PCF_STA | PCF_ACK)
|
||||
PCF_IDLE_ .EQU (PCF_PIN | PCF_ES0 | PCF_ACK)
|
||||
;
|
||||
; STATUS REGISTER BITS
|
||||
;
|
||||
@@ -54,43 +53,6 @@ PCF_AAS .EQU 00000100B
|
||||
PCF_LAB .EQU 00000010B
|
||||
PCF_BB .EQU 00000001B
|
||||
;
|
||||
; CLOCK CHIP FREQUENCIES
|
||||
;
|
||||
PCF_CLK3 .EQU 000H
|
||||
PCF_CLK443 .EQU 010H
|
||||
PCF_CLK6 .EQU 014H
|
||||
PCF_CLK8 .EQU 018H
|
||||
PCF_CLK12 .EQU 01cH
|
||||
;
|
||||
; TRANSMISSION FREQUENCIES
|
||||
;
|
||||
PCF_TRNS90 .EQU 000H ; 90 kHz */
|
||||
PCF_TRNS45 .EQU 001H ; 45 kHz */
|
||||
PCF_TRNS11 .EQU 002H ; 11 kHz */
|
||||
PCF_TRNS15 .EQU 003H ; 1.5 kHz */
|
||||
;
|
||||
; TIMEOUT AND DELAY VALUES (ARBITRARY)
|
||||
;
|
||||
PCF_PINTO .EQU 65000
|
||||
PCF_ACKTO .EQU 65000
|
||||
PCF_BBTO .EQU 65000
|
||||
PCF_LABDLY .EQU 65000
|
||||
;
|
||||
; DATA PORT REGISTERS
|
||||
;
|
||||
#IF (CPU_CLK = 443)
|
||||
PCF_CLK .EQU PCF_CLK4433
|
||||
#ELSE
|
||||
#IF (CPU_CLK = 8)
|
||||
PCF_CLK .EQU PCF_CLK8
|
||||
#ELSE
|
||||
#IF (CPU_CLK = 12)
|
||||
PCF_CLK .EQU PCF_CLK12
|
||||
#ELSE ***ERROR
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
; THE PCF8584 TARGETS A TOP I2C CLOCK SPEED OF 90KHZ AND SUPPORTS DIVIDERS FOR
|
||||
; 3, 4.43, 6, 8 AND 12MHZ TO ACHEIVE THIS.
|
||||
;
|
||||
@@ -104,14 +66,44 @@ PCF_CLK .EQU PCF_CLK12
|
||||
; | 12MHz | | | | | | 90Khz | 120Khz | 138Khz | 150Khz |
|
||||
; +----------------------------------------------------------------------------------+---------+
|
||||
;
|
||||
PCF8584_INIT:
|
||||
; CLOCK CHIP FREQUENCIES
|
||||
;
|
||||
PCF_CLK3 .EQU 000H
|
||||
PCF_CLK443 .EQU 010H
|
||||
PCF_CLK6 .EQU 014H
|
||||
PCF_CLK8 .EQU 018H
|
||||
PCF_CLK12 .EQU 01CH
|
||||
;
|
||||
; TRANSMISSION FREQUENCIES
|
||||
;
|
||||
PCF_TRNS90 .EQU 000H ; 90 kHz */
|
||||
PCF_TRNS45 .EQU 001H ; 45 kHz */
|
||||
PCF_TRNS11 .EQU 002H ; 11 kHz */
|
||||
PCF_TRNS15 .EQU 003H ; 1.5 kHz */
|
||||
;
|
||||
; BELOW VARIABLES CONTROL PCF CLOCK DIVISOR PROGRAMMING
|
||||
; HARD-CODED FOR NOW
|
||||
;
|
||||
PCF_CLK .EQU PCF_CLK12
|
||||
PCF_TRNS .EQU PCF_TRNS90
|
||||
;
|
||||
; TIMEOUT AND DELAY VALUES (ARBITRARY)
|
||||
;
|
||||
PCF_PINTO .EQU 65000
|
||||
PCF_ACKTO .EQU 65000
|
||||
PCF_BBTO .EQU 65000
|
||||
PCF_LABDLY .EQU 65000
|
||||
;
|
||||
; DATA PORT REGISTERS
|
||||
;
|
||||
PCF_INIT:
|
||||
CALL NEWLINE ; Formatting
|
||||
PRTS("I2C: IO=0x$")
|
||||
PRTS("PCF: IO=0x$")
|
||||
LD A, PCF_BASE
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_SPACE
|
||||
CALL PCF_INIT
|
||||
CALL NEWLINE
|
||||
CALL PCF_INITDEV
|
||||
;CALL NEWLINE
|
||||
RET
|
||||
;
|
||||
; LINUX DRIVER BASED CODE
|
||||
@@ -141,11 +133,13 @@ PCF_STOP:
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
PCF_INIT:
|
||||
PCF_INITDEV:
|
||||
LD A,PCF_PIN ; S1=80H: S0 SELECTED, SERIAL
|
||||
OUT (PCF_RS1),A ; INTERFACE OFF
|
||||
NOP
|
||||
IN A,(PCF_RS1) ; CHECK TO SEE S1 NOW USED AS R/W
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
AND 07FH ; CTRL. PCF8584 DOES THAT WHEN ESO
|
||||
JR NZ,PCF_FAIL ; IS ZERO
|
||||
;
|
||||
@@ -153,6 +147,8 @@ PCF_INIT:
|
||||
OUT (PCF_RS0),A ; EFFECTIVE ADDRESS IS (OWN <<1)
|
||||
NOP
|
||||
IN A,(PCF_RS0) ; CHECK IT IS REALLY WRITTEN
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
CP PCF_OWN
|
||||
JP NZ,PCF_SETERR
|
||||
;
|
||||
@@ -160,14 +156,18 @@ PCF_INIT:
|
||||
OUT (PCF_RS1),A ; NEXT BYTE IN S2
|
||||
NOP
|
||||
IN A,(PCF_RS1)
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
AND 07FH
|
||||
CP PCF_ES1
|
||||
JP NZ,PCF_REGERR
|
||||
;
|
||||
LD A,PCF_CLK ; LOAD CLOCK REGISTER S2
|
||||
LD A,PCF_CLK | PCF_TRNS ; LOAD CLOCK REGISTER S2
|
||||
OUT (PCF_RS0),A
|
||||
NOP
|
||||
IN A,(PCF_RS0) ; CHECK IT'S REALLY WRITTEN, ONLY
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
AND 1FH ; THE LOWER 5 BITS MATTER
|
||||
CP PCF_CLK
|
||||
JP NZ,PCF_CLKERR
|
||||
@@ -176,6 +176,8 @@ PCF_INIT:
|
||||
OUT (PCF_RS1),A
|
||||
NOP
|
||||
IN A,(PCF_RS1)
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
CP +(PCF_PIN | PCF_BB)
|
||||
JP NZ,PCF_IDLERR
|
||||
;
|
||||
@@ -381,12 +383,12 @@ PCF_READI2C:
|
||||
;
|
||||
; POLL THE BUS BUSY BIT TO DETERMINE IF BUS IS FREE.
|
||||
; RETURN WITH A=00H/Z STATUS IF BUS IS FREE
|
||||
; RETURN WITH A=FFH/NZ STATUS IF BUS
|
||||
; RETURN WITH A=FFH/NZ STATUS IF BUS IS BUSY
|
||||
;
|
||||
; AFTER RESET THE BUS BUSY BIT WILL BE SET TO 1 I.E. NOT BUSY
|
||||
;
|
||||
PCF_WAIT_FOR_BB:
|
||||
LD HL,PCF_BBTO
|
||||
LD HL,PCF_BBTO
|
||||
PCF_WFBB0:
|
||||
IN A,(PCF_RS1)
|
||||
AND PCF_BB
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,11 +9,14 @@
|
||||
; INTENDED TO CO-EXIST WITH LPT DRIVER.
|
||||
;
|
||||
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
|
||||
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
|
||||
; MUCH OF THE CODE IS DERIVED FROM LINUX AND FUZIX (ALAN COX).
|
||||
; - https://github.com/EtchedPixels/FUZIX
|
||||
; - https://github.com/torvalds/linux
|
||||
;
|
||||
; 5/23/2023 WBW - INITIAL RELEASE
|
||||
; 5/26/3023 WBW - CLEAN UP, LED ACTIVITY
|
||||
; 5/27/2023 WBW - ADDED SPP MODE
|
||||
; 05/23/2023 WBW - INITIAL RELEASE
|
||||
; 05/26/3023 WBW - CLEAN UP, LED ACTIVITY
|
||||
; 05/27/2023 WBW - ADDED SPP MODE
|
||||
; 06/06/2023 WBW - OPTIMIZE BLOCK READ AND WRITE
|
||||
;
|
||||
;=============================================================================
|
||||
;
|
||||
@@ -71,22 +74,18 @@
|
||||
;
|
||||
; 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.
|
||||
; FAIL TO EVEN RECOGNIZE A ZIP DRIVE WITH THE NEWER IMM INTERFACE.
|
||||
; THERE DOES NOT SEEM TO BE A WAY TO VISUALLY DETERMINE IF A ZIP
|
||||
; DRIVE IS PPA OR PPA. SIGH.
|
||||
; DRIVE IS PPA OR IMM. 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.
|
||||
; - THIS DRIVER OPERATES USES NIBBLE READ MODE. ALTHOUGH THE 8255
|
||||
; (MG014) CAN READ OR WRITE TO PORT A (DATA), IT "GLITCHES" WHEN
|
||||
; THE MODE IS CHANGED CAUSING THE CONTROL LINES TO CHANGE AND
|
||||
; BREAKS THE PROTOCOL. I SUSPECT THE MBC SPP CAN SUPPORT 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
|
||||
@@ -130,6 +129,20 @@ PPA_IOBASE .EQU 3 ; IO BASE ADDRESS (BYTE)
|
||||
PPA_MEDCAP .EQU 4 ; MEDIA CAPACITY (DWORD)
|
||||
PPA_LBA .EQU 8 ; OFFSET OF LBA (DWORD)
|
||||
;
|
||||
; MACROS
|
||||
;
|
||||
#DEFINE PPA_WCTL(VAL) LD A,VAL \ CALL PPA_WRITECTRL
|
||||
#DEFINE PPA_WDATA(VAL) LD A,VAL \ CALL PPA_WRITEDATA
|
||||
;
|
||||
#DEFINE PPA_DPUL(VAL) LD A,VAL \ CALL PPA_DPULSE
|
||||
#DEFINE PPA_CPUL(VAL) LD A,VAL \ CALL PPA_CPULSE
|
||||
;
|
||||
; INCLUDE MG014 NIBBLE MAP FOR MG014 MODE
|
||||
;
|
||||
#IF (IMMMODE == IMMMODE_MG014)
|
||||
#DEFINE MG014_MAP
|
||||
#ENDIF
|
||||
;
|
||||
;=============================================================================
|
||||
; INITIALIZATION ENTRY POINT
|
||||
;=============================================================================
|
||||
@@ -185,8 +198,8 @@ PPA_INIT4:
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
|
||||
;
|
||||
CALL PPA_RESET ; RESET/INIT THE INTERFACE
|
||||
#IF (PPATRACE == 0)
|
||||
CALL PPA_PRTSTAT
|
||||
#IF (PPATRACE <= 1)
|
||||
CALL NZ,PPA_PRTSTAT
|
||||
#ENDIF
|
||||
JR NZ,PPA_INIT6
|
||||
;
|
||||
@@ -220,6 +233,11 @@ PPA_INIT6:
|
||||
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
|
||||
;
|
||||
PPA_DETECT:
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nDETECT:$")
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPAMODE == PPAMODE_MG014)
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+PPA_IOBASE) ; BASE PORT
|
||||
ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT
|
||||
@@ -227,35 +245,39 @@ PPA_DETECT:
|
||||
LD A,$82 ; CONFIG A OUT, B IN, C OUT
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
|
||||
#ENDIF
|
||||
;
|
||||
LD A,$AA \ CALL PPA_WRITEDATA
|
||||
PPA_WDATA($AA)
|
||||
CALL PPA_DISCONNECT
|
||||
CALL PPA_CONNECT
|
||||
LD A,$06 \ CALL PPA_WRITECTRL
|
||||
PPA_WCTL($0E)
|
||||
CALL PPA_READSTATUS
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
AND $F0
|
||||
CP $F0
|
||||
AND $08
|
||||
CP $08
|
||||
JR NZ,PPA_DETECT_FAIL
|
||||
LD A,$04 \ CALL PPA_WRITECTRL
|
||||
;
|
||||
PPA_WCTL($0C)
|
||||
CALL PPA_READSTATUS
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
AND $F0
|
||||
CP $80
|
||||
AND $08
|
||||
CP $00
|
||||
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
|
||||
;
|
||||
PPA_WDATA($AA)
|
||||
PPA_WCTL($0C)
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
@@ -263,7 +285,6 @@ PPA_DETECT:
|
||||
PPA_DETECT_FAIL:
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET NZ
|
||||
|
||||
;
|
||||
;=============================================================================
|
||||
; DRIVER FUNCTION TABLE
|
||||
@@ -303,7 +324,7 @@ PPA_READ:
|
||||
;
|
||||
;
|
||||
PPA_WRITE:
|
||||
CALL HB_DSKREAD ; HOOK DISK WRITE CONTROLLER
|
||||
CALL HB_DSKWRITE ; 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
|
||||
@@ -311,9 +332,20 @@ PPA_WRITE:
|
||||
;
|
||||
;
|
||||
PPA_IO:
|
||||
LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
PUSH HL
|
||||
CALL PPA_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
|
||||
POP HL
|
||||
JR NZ,PPA_IO3 ; BAIL OUT ON ERROR
|
||||
;
|
||||
LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
LD A,PPA_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
; SETUP LBA
|
||||
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
|
||||
@@ -330,7 +362,7 @@ PPA_IO:
|
||||
;
|
||||
; DO SCSI IO
|
||||
LD DE,(PPA_DSKBUF) ; DISK BUFFER TO DE
|
||||
LD BC,512 ; ONE SECTOR, 512 BYTES
|
||||
LD A,1 ; BLOCK I/O, ONE SECTOR
|
||||
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
|
||||
@@ -372,7 +404,7 @@ PPA_RESET:
|
||||
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 C,%01111001 ; 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
|
||||
@@ -440,32 +472,6 @@ PPA_GEOM:
|
||||
; 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:
|
||||
@@ -541,64 +547,87 @@ PPA_READSTATUS5:
|
||||
;
|
||||
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
|
||||
PPA_WCTL($0C)
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
PPA_WCTL($04)
|
||||
PPA_WCTL($0C)
|
||||
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
|
||||
PPA_WCTL($04)
|
||||
PPA_WCTL($06)
|
||||
PPA_WCTL($04)
|
||||
PPA_WCTL($0C)
|
||||
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
|
||||
PPA_CPUL($00)
|
||||
PPA_CPUL($3C)
|
||||
PPA_CPUL($20)
|
||||
PPA_CPUL($8F)
|
||||
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
|
||||
PPA_DPUL($00)
|
||||
PPA_DPUL($3C)
|
||||
PPA_DPUL($20)
|
||||
PPA_DPUL($0F)
|
||||
;
|
||||
; TURNS OFF MG014 LED
|
||||
PPA_WCTL($8C)
|
||||
;
|
||||
RET
|
||||
;
|
||||
; INITIATE A SCSI BUS RESET.
|
||||
;
|
||||
PPA_RESETPULSE:
|
||||
PPA_WDATA($40)
|
||||
PPA_WCTL($08)
|
||||
CALL DELAY ; 32 US, IDEALLY 30 US
|
||||
PPA_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
; SCSI SELECT PROCESS
|
||||
;
|
||||
;
|
||||
PPA_SELECT:
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSELECT: $")
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PPA_READSTATUS
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
LD A,1 << PPA_TGT
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$0E \ CALL PPA_WRITECTRL
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
LD A,1 << PPA_SELF
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$08 \ CALL PPA_WRITECTRL
|
||||
;
|
||||
LD HL,0 ; TIMEOUT COUNTER
|
||||
PPA_WCTL($08)
|
||||
;
|
||||
LD B,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
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
AND $40
|
||||
CP $40
|
||||
RET Z
|
||||
DJNZ PPA_SELECT1
|
||||
JP PPA_CMD_TIMEOUT
|
||||
;
|
||||
; SEND SCSI CMD BYTE STRING. AT ENTRY, HL POINTS TO START OF
|
||||
; COMMAND BYTES. THE LENGTH OF THE COMMAND STRING MUST PRECEED
|
||||
@@ -608,16 +637,448 @@ PPA_SELECT1:
|
||||
; DATA OUTPOUT IS BURSTED (NO CHECK FOR BUSY). SEEMS TO WORK FINE.
|
||||
;
|
||||
PPA_SENDCMD:
|
||||
JP PPA_ERR ; NOW DO STANDARD ERR PROCESSING
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSENDCMD:$")
|
||||
#ENDIF
|
||||
;
|
||||
DEC HL ; BACKUP TO LENGTH BYTE
|
||||
LD B,(HL) ; PUT IN B FOR LOOP COUNTER
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
LD A,B
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
INC HL ; BACK TO FIRST CMD BYTE
|
||||
;
|
||||
PPA_SENDCMD1:
|
||||
;PPA_WCTL($0C)
|
||||
LD A,(HL) ; LOAD CMD BYTE
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CALL PPA_WRITEDATA ; PUT IT ON THE BUS
|
||||
INC HL ; BUMP TO NEXT BYTE
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
DJNZ PPA_SENDCMD1 ; LOOP TILL DONE
|
||||
;
|
||||
RET
|
||||
;
|
||||
;
|
||||
; WAIT FOR SCSI BUS TO BECOME READY WITH A TIMEOUT.
|
||||
;
|
||||
PPA_WAITLOOP:
|
||||
CALL PPA_READSTATUS
|
||||
BIT 7,A
|
||||
RET NZ ; DONE, STATUS IN A
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
RET Z ; TIMEOUT
|
||||
JR PPA_WAITLOOP
|
||||
;
|
||||
PPA_WAIT:
|
||||
LD HL,500 ; GOOD VALUE???
|
||||
PPA_WCTL($0C)
|
||||
CALL PPA_WAITLOOP
|
||||
JP Z,PPA_CMD_TIMEOUT ; HANDLE TIMEOUT
|
||||
;PUSH AF
|
||||
;IMM_WCTL($04)
|
||||
;POP AF
|
||||
AND $F0
|
||||
RET ; RETURN W/ RESULT IN A
|
||||
;
|
||||
; MAX OBSERVED WAITLOOP ITERATIONS IS $0116B3 @ 7.372 MHZ ON MG014
|
||||
; MAX OBSERVED WAITLOOP ITERATIONS IS $028EFE @ 8.000 MHZ ON MBC SPP
|
||||
;
|
||||
PPA_LONGWAIT:
|
||||
LD A,(CB_CPUMHZ) ; LOAD CPU SPEED IN MHZ
|
||||
SRL A ; DIVIDE BY 2, GOOD ENOUGH
|
||||
LD B,A ; USE FOR OUTER LOOP COUNT
|
||||
PPA_WCTL($0C)
|
||||
PPA_LONGWAIT1:
|
||||
LD HL,0
|
||||
CALL PPA_WAITLOOP
|
||||
JR NZ,PPA_LONGWAIT2 ; HANDLE SUCCESS
|
||||
DJNZ PPA_LONGWAIT1 ; LOOP TILL COUNTER EXHAUSTED
|
||||
JP PPA_CMD_TIMEOUT ; HANDLE TIMEOUT
|
||||
;
|
||||
PPA_LONGWAIT2:
|
||||
;PUSH AF
|
||||
;PPA_WCTL($04)
|
||||
;
|
||||
#IF 0
|
||||
PUSH AF
|
||||
CALL PC_GT
|
||||
LD A,B
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_COLON
|
||||
CALL PRTHEXWORDHL
|
||||
POP AF
|
||||
#ENDIF
|
||||
;
|
||||
;POP AF
|
||||
AND $F0
|
||||
RET ; RETURN W/ RESULT IN A
|
||||
;
|
||||
; GET A BYTE OF DATA FROM THE SCSI DEVICE. THIS IS A NIBBLE READ.
|
||||
; BYTE RETURNED IN A.
|
||||
;
|
||||
PPA_GETBYTE:
|
||||
CALL PPA_WAIT
|
||||
PPA_WCTL($04)
|
||||
CALL PPA_READSTATUS
|
||||
AND $F0
|
||||
PUSH AF
|
||||
PPA_WCTL($06)
|
||||
CALL PPA_READSTATUS
|
||||
AND $F0
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
POP HL
|
||||
OR H
|
||||
PUSH AF
|
||||
PPA_WCTL($0C)
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; GET A CHUNK OF DATA FROM SCSI BUS. THIS IS SPECIFICALLY FOR
|
||||
; READ PHASE. IF TRANSFER MODE IS NON-ZERO, THEN A BLOCK (512 BYTES)
|
||||
; OF DATA WILL BE READ. OTHERWISE, DATA IS WRITTEN AS
|
||||
; LONG AS SCSI DEVICE WANTS TO CONTINUE RECEIVING (NO OVERRUN
|
||||
; CHECK IN THIS CASE).
|
||||
;
|
||||
; THIS IS A NIBBLE READ.
|
||||
;
|
||||
; DE=BUFFER
|
||||
; A=TRANSFER MODE (0=VARIABLE, 1=BLOCK)
|
||||
;
|
||||
PPA_GETDATA:
|
||||
; BRANCH TO CORRECT ROUTINE
|
||||
OR A
|
||||
JR NZ,PPA_GETBLOCK ; DO BLOCK READ
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nGETDATA:$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_GETDATA1:
|
||||
PUSH HL ; SAVE BYTE COUNTER
|
||||
CALL PPA_WAIT ; WAIT FOR BUS READY
|
||||
POP HL ; RESTORE BYTE COUNTER
|
||||
CP $D0 ; CHECK FOR READ PHASE
|
||||
JR NZ,PPA_GETDATA2 ; IF NOT, ASSUME WE ARE DONE
|
||||
PPA_WCTL($04)
|
||||
CALL PPA_READSTATUS ; GET FIRST NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
PUSH AF ; SAVE WORKING VALUE
|
||||
PPA_WCTL($06)
|
||||
CALL PPA_READSTATUS ; GET SECOND NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
RRCA ; AND SHIFT TO LOW NIBBLE
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
POP BC ; RECOVER LOW NIBBLE
|
||||
OR B ; COMBINE
|
||||
LD (DE),A ; AND SAVE THE FULL BYTE VALUE
|
||||
INC DE ; NEXT BUFFER POS
|
||||
INC HL ; INCREMENT BYTES COUNTER
|
||||
JR PPA_GETDATA1 ; LOOP TILL DONE
|
||||
;
|
||||
PPA_GETDATA2:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
PPA_GETBLOCK:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nGETBLK:$")
|
||||
#ENDIF
|
||||
LD B,0 ; LOOP COUNTER
|
||||
EXX ; SWITCH TO ALT
|
||||
EX AF,AF' ; SWITCH TO ALT AF
|
||||
; SAVE ALT REGS
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
; C: PORT C
|
||||
LD A,(IY+PPA_IOBASE) ; BASE PORT
|
||||
INC A ; STATUS PORT
|
||||
LD (PPA_GETBLOCK_A),A ; FILL IN
|
||||
LD (PPA_GETBLOCK_B),A ; ... DYNAMIC BITS OF CODE
|
||||
INC A ; CONTROL PORT
|
||||
LD C,A ; ... TO C
|
||||
#IF (PPAMODE == PPAMODE_MG014)
|
||||
; DE: CLOCK VALUES
|
||||
LD D,$04 ^ ($0B | $80)
|
||||
LD E,$06 ^ ($0B | $80)
|
||||
; HL: STATMAP
|
||||
LD H,MG014_STATMAPLO >> 8
|
||||
#ENDIF
|
||||
#IF (PPAMODE == PPAMODE_SPP)
|
||||
; DE: CLOCK VALUES
|
||||
LD D,$04
|
||||
LD E,$06
|
||||
#ENDIF
|
||||
EXX ; SWITCH TO PRI
|
||||
CALL PPA_GETBLOCK1 ; LOOP TWICE
|
||||
CALL PPA_GETBLOCK1 ; ... FOR 512 BYTES
|
||||
; RESTORE ALT REGS
|
||||
EXX ; SWITCH TO ALT REGS
|
||||
EX AF,AF' ; SWITCH TO ALT AF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
EXX ; SWITCH TO PRI REGS
|
||||
EX AF,AF' ; SWITCH TO PRI AF
|
||||
RET
|
||||
;
|
||||
;
|
||||
PPA_GETBLOCK1:
|
||||
EXX ; ALT REGS
|
||||
OUT (C),D ; SEND FIRST CLOCK
|
||||
PPA_GETBLOCK_A .EQU $+1
|
||||
IN A,($FF) ; GET HIGH NIBBLE
|
||||
#IF (PPAMODE == PPAMODE_MG014)
|
||||
AND $0F ; RELEVANT BITS ONLY
|
||||
ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR
|
||||
LD L,A ; PUT IN L
|
||||
LD A,(HL) ; LOOKUP HIGH NIBBLE VALUE
|
||||
EX AF,AF' ; SAVE NIBBLE
|
||||
#ENDIF
|
||||
#IF (PPAMODE == PPAMODE_SPP)
|
||||
AND $F0 ; RELEVANT BITS ONLY
|
||||
LD L,A ; SAVE NIBBLE IN L
|
||||
#ENDIF
|
||||
OUT (C),E ; SEND SECOND CLOCK
|
||||
PPA_GETBLOCK_B .EQU $+1
|
||||
IN A,($FF) ; GET LOW NIBBLE
|
||||
#IF (PPAMODE == PPAMODE_MG014)
|
||||
AND $0F ; RELEVANT BITS ONLY
|
||||
ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR
|
||||
LD L,A ; PUT IN L
|
||||
EX AF,AF' ; RECOVER HIGH NIBBLE VALUE
|
||||
OR (HL) ; COMBINE WITH LOW NIB VALUE
|
||||
#ENDIF
|
||||
#IF (PPAMODE == PPAMODE_SPP)
|
||||
AND $F0 ; RELEVANT BITS ONLY
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
RLCA ; MOVE TO LOW NIBBLE
|
||||
OR L ; COMBINE WITH HIGH NIB VALUE
|
||||
#ENDIF
|
||||
EXX ; SWITCH TO PRI
|
||||
LD (DE),A ; SAVE BYTE
|
||||
INC DE ; BUMP BUF PTR
|
||||
DJNZ PPA_GETBLOCK1 ; LOOP
|
||||
RET ; DONE
|
||||
;
|
||||
; PUT A CHUNK OF DATA TO THE SCSI BUS. THIS IS SPECIFICALLY FOR
|
||||
; WRITE PHASE. IF TRANSFER MODE IS NON-ZERO, THEN A BLOCK (512 BYTES)
|
||||
; OF DATA WILL BE WRITTEN. OTHERWISE, DATA IS WRITTEN AS
|
||||
; LONG AS SCSI DEVICE WANTS TO CONTINUE RECEIVING (NO OVERRUN
|
||||
; CHECK IN THIS CASE).
|
||||
;
|
||||
; DE=BUFFER
|
||||
; A=TRANSFER MODE (0=VARIABLE, 1=BLOCK)
|
||||
;
|
||||
PPA_PUTDATA:
|
||||
; BRANCH TO CORRECT ROUTINE
|
||||
OR A
|
||||
JR NZ,PPA_PUTBLOCK ; DO BLOCK WRITE
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nPUTDATA:$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_PUTDATA1:
|
||||
PUSH HL ; SAVE BYTE COUNTER
|
||||
CALL PPA_WAIT ; WAIT FOR BUS READY
|
||||
POP HL ; RESTORE BYTE COUNTER
|
||||
CP $C0 ; CHECK FOR WRITE PHASE
|
||||
JR NZ,PPA_PUTDATA2 ; IF NOT, ASSUME WE ARE DONE
|
||||
LD A,(DE) ; GET NEXT BYTE TO WRITE (FIRST OF PAIR)
|
||||
CALL PPA_WRITEDATA ; PUT ON BUS
|
||||
INC DE ; BUMP TO NEXT BUF POS
|
||||
INC HL ; INCREMENT COUNTER
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
LD A,(DE) ; GET NEXT BYTE TO WRITE (SECOND OF PAIR)
|
||||
JR PPA_PUTDATA1 ; LOOP TILL DONE
|
||||
;
|
||||
PPA_PUTDATA2:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
PPA_PUTBLOCK:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nPUTBLK:$")
|
||||
#ENDIF
|
||||
;
|
||||
LD B,0 ; LOOP COUNTER
|
||||
LD A,(IY+PPA_IOBASE) ; GET BASE IO ADR
|
||||
LD (PPA_PUTBLOCK_A),A ; FILL IN
|
||||
INC A ; STATUS PORT
|
||||
INC A ; CONTROL PORT
|
||||
LD C,A ; ... TO C
|
||||
; HL: CLOCK VALUES
|
||||
#IF (PPAMODE == PPAMODE_MG014)
|
||||
LD H,$0E ^ ($0B | $80)
|
||||
LD L,$0C ^ ($0B | $80)
|
||||
#ENDIF
|
||||
#IF (PPAMODE == PPAMODE_SPP)
|
||||
LD H,$0E
|
||||
LD L,$0C
|
||||
#ENDIF
|
||||
CALL PPA_PUTBLOCK1 ; DO BELOW TWICE
|
||||
CALL PPA_PUTBLOCK1 ; ... FOR 512 BYTES
|
||||
RET
|
||||
;
|
||||
PPA_PUTBLOCK1:
|
||||
LD A,(DE) ; GET NEXT BYTE
|
||||
PPA_PUTBLOCK_A .EQU $+1
|
||||
OUT ($FF),A ; PUT ON BUS
|
||||
INC DE ; INCREMENT BUF POS
|
||||
OUT (C),H ; FIRST CLOCK
|
||||
OUT (C),L ; SECOND CLOCK
|
||||
DJNZ PPA_PUTBLOCK1 ; LOOP
|
||||
RET ; DONE
|
||||
;
|
||||
; READ SCSI COMMAND STATUS
|
||||
;
|
||||
PPA_GETSTATUS:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSTATUS:$")
|
||||
#ENDIF
|
||||
;
|
||||
CALL PPA_GETBYTE ; GET ONE BYTE
|
||||
LD (PPA_CMDSTAT),A ; SAVE AS FIRST STATUS BYTE
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CALL PPA_WAIT ; CHECK FOR OPTIONAL SECOND BYTE
|
||||
CP $F0 ; STILL IN STATUS PHASE?
|
||||
RET NZ ; IF NOT, DONE
|
||||
CALL PPA_GETBYTE ; ELSE, GET THE SECOND BYTE
|
||||
LD (PPA_CMDSTAT+1),A ; AND SAVE IT
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
; 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)
|
||||
; A: TRANSFER MODE (0=VARIABLE, 1=BLOCK)
|
||||
;
|
||||
PPA_RUNCMD:
|
||||
; THERE ARE MANY PLACES NESTED WITHIN THE ROUTINES THAT
|
||||
; ARE CALLED HERE. HERE WE SAVE THE STACK SO THAT WE CAN
|
||||
; EASILY AND QUICKLY ABORT OUT OF ANY NESTED ROUTINE.
|
||||
; SEE PPA_CMD_ERR BELOW.
|
||||
LD (PPA_CMDSTK),SP ; FOR ERROR ABORTS
|
||||
LD (PPA_DSKBUF),DE ; SAVE BUF PTR
|
||||
LD (PPA_XFRMODE),A ; SAVE XFER LEN
|
||||
PUSH HL
|
||||
CALL PPA_CONNECT ; PARALLEL PORT BUS CONNECT
|
||||
CALL PPA_SELECT ; SELECT TARGET DEVICE
|
||||
CALL PPA_WAIT ; WAIT TILL READY
|
||||
POP HL
|
||||
CALL PPA_SENDCMD ; SEND THE COMMAND
|
||||
;
|
||||
PPA_RUNCMD_PHASE:
|
||||
; WAIT FOR THE BUS TO BE READY. WE USE AN EXTRA LONG WAIT
|
||||
; TIMEOUT HERE BECAUSE THIS IS WHERE WE WILL WAIT FOR LONG
|
||||
; OPERATIONS TO COMPLETE. IT CAN TAKE SOME TIME IF THE
|
||||
; DEVICE HAS GONE TO SLEEP BECAUSE IT WILL NEED TO WAKE UP
|
||||
; AND SPIN UP BEFORE PROCESSING AN I/O COMMAND.
|
||||
CALL PPA_LONGWAIT ; WAIT TILL READY
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nPHASE: $")
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CP $C0 ; DEVICE WANTS TO RCV DATA
|
||||
JR Z,PPA_RUNCMD_WRITE
|
||||
CP $D0 ; DEVICE WANTS TO SEND DATA
|
||||
JR Z,PPA_RUNCMD_READ
|
||||
CP $F0 ; DEVICE WANTS TO BE DONE
|
||||
JR Z,PPA_RUNCMD_END
|
||||
JR PPA_CMD_IOERR
|
||||
;
|
||||
PPA_RUNCMD_WRITE:
|
||||
LD DE,(PPA_DSKBUF) ; XFER BUFFER
|
||||
LD A,(PPA_XFRMODE) ; XFER MODE
|
||||
CALL PPA_PUTDATA ; SEND DATA NOW
|
||||
JR PPA_RUNCMD_PHASE ; BACK TO DISPATCH
|
||||
;
|
||||
PPA_RUNCMD_READ:
|
||||
LD DE,(PPA_DSKBUF) ; XFER BUFFER
|
||||
LD A,(PPA_XFRMODE) ; XFER MODE
|
||||
CALL PPA_GETDATA ; GET THE DATA NOW
|
||||
JR PPA_RUNCMD_PHASE ; BACK TO DISPATCH
|
||||
;
|
||||
PPA_RUNCMD_END:
|
||||
CALL PPA_GETSTATUS ; READ STATUS BYTES
|
||||
CALL PPA_DISCONNECT ; PARALLEL PORT BUS DISCONNECT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
PPA_CMD_IOERR:
|
||||
LD A,PPA_STIOERR ; ERROR VALUE TO A
|
||||
JR PPA_CMD_ERR ; CONTINUE
|
||||
;
|
||||
PPA_CMD_TIMEOUT:
|
||||
LD A,PPA_STTO ; ERROR VALUE TO A
|
||||
JR PPA_CMD_ERR ; CONTINUE
|
||||
;
|
||||
PPA_CMD_ERR:
|
||||
LD SP,(PPA_CMDSTK) ; UNWIND STACK
|
||||
PUSH AF ; SAVE STATUS
|
||||
;CALL PPA_RESETPULSE ; CLEAN UP THE MESS???
|
||||
LD DE,62 ; DELAY AFTER RESET PULSE
|
||||
CALL VDELAY
|
||||
CALL PPA_DISCONNECT ; PARALLEL PORT BUS DISCONNECT
|
||||
LD DE,62 ; DELAY AFTER DISCONNECT
|
||||
CALL VDELAY
|
||||
POP AF ; RECOVER STATUS
|
||||
JP PPA_ERR ; NOW DO STANDARD ERR PROCESSING
|
||||
;
|
||||
; ERRORS SHOULD GENERALLY NOT CAUSE SCSI PROCESSING TO FAIL. IF A
|
||||
@@ -642,14 +1103,15 @@ PPA_CHKCMD:
|
||||
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 A,0 ; VARIABLE LENGTH READ
|
||||
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
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL Z,PRTHEXBUF
|
||||
#ENDIF
|
||||
@@ -678,6 +1140,8 @@ PPA_CHKERR:
|
||||
; (RE)INITIALIZE DEVICE
|
||||
;
|
||||
PPA_INITDEV:
|
||||
;
|
||||
#IF (PPAMODE == PPAMODE_MG014)
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+PPA_IOBASE) ; BASE PORT
|
||||
ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT
|
||||
@@ -685,8 +1149,88 @@ PPA_INITDEV:
|
||||
LD A,$82 ; CONFIG A OUT, B IN, C OUT
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; SHORT DELAY FOR BUS SETTLE
|
||||
#ENDIF
|
||||
;
|
||||
JP PPA_NOTSUP
|
||||
; BUS RESET
|
||||
CALL PPA_CONNECT
|
||||
CALL PPA_RESETPULSE
|
||||
LD DE,62 ; 1000 US
|
||||
CALL VDELAY
|
||||
CALL PPA_DISCONNECT
|
||||
LD DE,62 ; 1000 US
|
||||
CALL VDELAY
|
||||
;
|
||||
; INITIALLY, THE DEVICE MAY REQUIRE MULTIPLE REQUEST SENSE
|
||||
; COMMANDS BEFORE IT WILL ACCEPT I/O COMMANDS. THIS IS DUE
|
||||
; TO THINGS LIKE BUS RESET NOTIFICATION, MEDIA CHANGE, ETC.
|
||||
; HERE, WE RUN A FEW REQUEST SENSE COMMANDS. AS SOON AS ONE
|
||||
; INDICATES NO ERRORS, WE CAN CONTINUE.
|
||||
LD B,4 ; TRY UP TO 4 TIMES
|
||||
PPA_INITDEV1:
|
||||
PUSH BC ; SAVE LOOP COUNTER
|
||||
;
|
||||
; REQUEST SENSE COMMAND
|
||||
LD DE,HB_WRKBUF ; BUFFER FOR SENSE DATA
|
||||
LD A,0 ; READ WHATEVER IS SENT
|
||||
LD HL,PPA_CMD_SENSE ; POINT TO CMD BUFFER
|
||||
CALL PPA_RUNCMD ; RUN THE SCSI ENGINE
|
||||
JR NZ,PPA_INITDEV2 ; CMD PROC ERROR
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
#ENDIF
|
||||
;
|
||||
; CHECK SENSE KEY
|
||||
LD A,(HB_WRKBUF + 2) ; GET SENSE KEY
|
||||
OR A ; SET FLAGS
|
||||
;
|
||||
PPA_INITDEV2:
|
||||
POP BC ; RESTORE LOOP COUNTER
|
||||
JR Z,PPA_INITDEV3 ; IF NO ERROR, MOVE ON
|
||||
DJNZ PPA_INITDEV1 ; TRY UNTIL COUNTER EXHAUSTED
|
||||
JP PPA_IOERR ; BAIL OUT WITH ERROR
|
||||
;
|
||||
PPA_INITDEV3:
|
||||
; READ & RECORD DEVICE CAPACITY
|
||||
LD DE,HB_WRKBUF ; BUFFER TO CAPACITY RESPONSE
|
||||
LD A,0 ; READ WHATEVER IS SENT
|
||||
LD HL,PPA_CMD_RDCAP ; POINT TO READ CAPACITY CMD
|
||||
CALL PPA_RUNCMD ; RUN THE SCSI ENGINE
|
||||
CALL Z,PPA_CHKCMD ; CHECK AND RECORD ANY ERRORS
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nRDCAP:$")
|
||||
LD A,8
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
#ENDIF
|
||||
;
|
||||
; CAPACITY IS RETURNED IN A 4 BYTE, BIG ENDIAN FIELD AND
|
||||
; INDICATES THE LAST LBA VALUE. WE NEED TO CONVERT THIS TO
|
||||
; LITTLE ENDIAN AND INCREMENT THE VALUE TO MAKE IT A CAPACITY
|
||||
; COUNT INSTEAD OF A LAST LBA VALUE.
|
||||
LD A,PPA_MEDCAP ; OFFSET IN CFG FOR CAPACITY
|
||||
CALL LDHLIYA ; POINTER TO HL
|
||||
PUSH HL ; SAVE IT
|
||||
LD HL,HB_WRKBUF ; POINT TO VALUE IN CMD RESULT
|
||||
CALL LD32 ; LOAD IT TO DE:HL
|
||||
LD A,L ; FLIP BYTES
|
||||
LD L,D ; ... BIG ENDIAN
|
||||
LD D,A ; ... TO LITTLE ENDIAN
|
||||
LD A,H
|
||||
LD H,E
|
||||
LD E,A
|
||||
CALL INC32 ; INCREMENT TO FINAL VALUE
|
||||
POP BC ; RECOVER SAVE LOCATION
|
||||
CALL ST32 ; STORE VALUE
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
LD (IY+PPA_STAT),A ; RECORD IT
|
||||
RET
|
||||
;
|
||||
;=============================================================================
|
||||
; ERROR HANDLING AND DIAGNOSTICS
|
||||
@@ -719,7 +1263,7 @@ PPA_ERR:
|
||||
LD (IY+PPA_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
PPA_ERR2:
|
||||
#IF (PPATRACE >= 1)
|
||||
#IF (PPATRACE >= 2)
|
||||
CALL PPA_PRTSTAT
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS
|
||||
@@ -772,7 +1316,7 @@ PPA_PRTPREFIX:
|
||||
PUSH AF
|
||||
CALL NEWLINE
|
||||
PRTS("PPA$")
|
||||
LD A,(IY+IMM_DEV) ; GET CURRENT DEVICE NUM
|
||||
LD A,(IY+PPA_DEV) ; GET CURRENT DEVICE NUM
|
||||
CALL PRTDECB
|
||||
CALL PC_COLON
|
||||
POP AF
|
||||
@@ -816,7 +1360,7 @@ PPA_STR_NOHW .TEXT "NOT PRESENT$"
|
||||
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_XFRMODE .DB 0 ; 0=VARIABLE, 1=BLOCK (512 BYTES)
|
||||
PPA_CMDSTAT .DB 0, 0 ; CMD RESULT STATUS
|
||||
;
|
||||
; SCSI COMMAND TEMPLATES (LENGTH PREFIXED)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,6 @@
|
||||
;==================================================================================================
|
||||
;
|
||||
; TODO:
|
||||
; 1) ADD SUPPORT FOR DSKY
|
||||
;
|
||||
PPP_IO .EQU PPPBASE + 0 ; PPP DATA I/O (PPI PORT A)
|
||||
PPP_CTL .EQU PPPBASE + 2 ; PPP CTL LINES (PPI PORT C)
|
||||
@@ -689,7 +688,7 @@ PPPSD_RESET:
|
||||
PPPSD_DEVICE:
|
||||
LD D,DIODEV_PPPSD ; D := DEVICE TYPE
|
||||
LD E,(IY+PPPSD_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
LD C,%01110010 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,PPPBASE ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -942,7 +941,9 @@ PPPSD_SENDBLK:
|
||||
LD A,PPPSD_LBA ; OFFSET OF LBA
|
||||
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
LD B,4
|
||||
PPPSD_SENDBLK1:
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
;==================================================================================================
|
||||
;
|
||||
; TODO:
|
||||
; 1) ADD SUPPORT FOR DSKY
|
||||
;
|
||||
PRP_IOBASE .EQU $A8
|
||||
;
|
||||
@@ -546,7 +545,7 @@ PRPSD_RESET:
|
||||
PRPSD_DEVICE:
|
||||
LD D,DIODEV_PRPSD ; D := DEVICE TYPE
|
||||
LD E,(IY+PRPSD_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
LD C,%01110010 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,PRP_IOBASE ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -876,7 +875,9 @@ PRPSD_SETBLK:
|
||||
LD A,PRPSD_LBA ; OFFSET OF LBA
|
||||
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
OTIR
|
||||
RET
|
||||
|
||||
@@ -178,7 +178,7 @@ RF_GEOM:
|
||||
RF_DEVICE:
|
||||
LD D,DIODEV_RF ; D := DEVICE TYPE
|
||||
LD E,(IY+RF_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVABLE RAM FLOPPY
|
||||
LD C,%00010110 ; C := ATTRIBUTES, NON-REMOVABLE RAM FLOPPY
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,(IY+RF_IOAD) ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -314,9 +314,11 @@ RF_SETIO:
|
||||
RF_SETADR:
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
LD A,RF_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
LD A,(RF_IO) ; OUTPUT THE LOGICAL BLOCK
|
||||
|
||||
@@ -47,7 +47,8 @@ cmdbuf .equ $80 ; cmd buf is in second half of page zero
|
||||
cmdmax .equ 60 ; max cmd len (arbitrary), must be < bufsiz
|
||||
bufsiz .equ $80 ; size of cmd buf
|
||||
;
|
||||
int_im1 .equ $FF00 ; IM1 vector target for RomWBW HBIOS proxy
|
||||
;;int_im1 .equ $FF00 ; IM1 vector target for RomWBW HBIOS proxy
|
||||
hbx_int .equ $FF60 ; IM1 vector target for RomWBW HBIOS proxy
|
||||
;
|
||||
bid_cur .equ -1 ; used below to indicate current bank
|
||||
;
|
||||
@@ -77,7 +78,8 @@ bid_cur .equ -1 ; used below to indicate current bank
|
||||
.fill ($38 - $)
|
||||
#if (BIOS == BIOS_WBW)
|
||||
#if (INTMODE == 1)
|
||||
jp int_im1 ; go to handler in hi mem
|
||||
call hbx_int ; handle im1 interrupts
|
||||
.db $10 << 2 ; use special vector #16
|
||||
#else
|
||||
ret ; return w/ ints left disabled
|
||||
#endif
|
||||
@@ -170,6 +172,16 @@ start1:
|
||||
#if (INTMODE == 1)
|
||||
ei
|
||||
#endif
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
; Check for DSKY and set flag
|
||||
ld b,BF_SYSGET ; HBIOS func: get
|
||||
ld c,BF_SYSGET_DSKYCNT ; get DSKY count
|
||||
rst 08 ; do it
|
||||
ld a,e ; put in A
|
||||
ld (dskyact),a ; save it
|
||||
#endif
|
||||
|
||||
;
|
||||
;=======================================================================
|
||||
; Loader prompt
|
||||
@@ -231,18 +243,11 @@ prompt:
|
||||
call clrbuf ; zero fill the cmd buffer
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
call DSKY_PREINIT ; *** TEMPORARY ***
|
||||
call DSKY_RESET ; clear DSKY
|
||||
ld hl,msg_sel ; boot select msg
|
||||
call DSKY_SHOW ; show on DSKY
|
||||
|
||||
#if (DSKYMODE == DSKYMODE_NG)
|
||||
call DSKY_PUTLED
|
||||
.db $3f,$3f,$3f,$3f,$00,$00,$00,$00
|
||||
call DSKY_BEEP
|
||||
call DSKY_L2ON
|
||||
#endif
|
||||
|
||||
call dsky_show ; show on DSKY
|
||||
call dsky_highlightallkeys
|
||||
call dsky_beep
|
||||
call dsky_l2on
|
||||
#endif
|
||||
;
|
||||
wtkey:
|
||||
@@ -251,8 +256,7 @@ wtkey:
|
||||
jr nz,concmd ; if pending, do console command
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
call DSKY_STAT ; check DSKY for keypress
|
||||
or a ; set flags
|
||||
call dsky_stat ; check DSKY for keypress
|
||||
jp nz,dskycmd ; if pending, do DSKY command
|
||||
#endif
|
||||
;
|
||||
@@ -295,11 +299,8 @@ concmd:
|
||||
call clrled ; clear LEDs
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
#if (DSKYMODE == DSKYMODE_NG)
|
||||
call DSKY_PUTLED
|
||||
.db $00,$00,$00,$00,$00,$00,$00,$00
|
||||
call DSKY_L2OFF
|
||||
#endif
|
||||
call dsky_highlightkeysoff
|
||||
call dsky_l2off
|
||||
#endif
|
||||
;
|
||||
; Get a command line from console and handle it
|
||||
@@ -450,10 +451,9 @@ fp_hdboot1:
|
||||
push bc ; save loop control
|
||||
ld b,BF_DIODEVICE ; HBIOS Disk Device func
|
||||
rst 08 ; unit in C, do it
|
||||
bit 5,C ; high capacity disk?
|
||||
pop bc ; restore loop control
|
||||
ld a,d ; device type to A
|
||||
cp DIODEV_IDE ; type IDE or greater is HD
|
||||
jr c,fp_hdboot2 ; if not, continue loop
|
||||
jr z,fp_hdboot2 ; if not, continue loop
|
||||
push bc ; save loop control
|
||||
ld b,BF_DIOMEDIA ; HBIOS Sense Media
|
||||
ld e,1 ; perform media discovery
|
||||
@@ -488,11 +488,10 @@ fp_flopboot1:
|
||||
push de ; save floppy down ctr
|
||||
ld b,BF_DIODEVICE ; HBIOS Disk Device func
|
||||
rst 08 ; unit in C, do it
|
||||
ld a,d ; device type to A
|
||||
bit 7,c ; floppy device?
|
||||
pop de ; restore loop control
|
||||
pop bc ; restore floppy down ctr
|
||||
cp DIODEV_FD ; type FD?
|
||||
jr nz,fp_flopboot3 ; if not floppy, skip
|
||||
jr z,fp_flopboot3 ; if not floppy, skip
|
||||
dec e ; decrement down ctr
|
||||
jr z,fp_flopboot2 ; if ctr expired, boot this unit
|
||||
fp_flopboot3:
|
||||
@@ -518,15 +517,15 @@ fp_flopboot2:
|
||||
dskycmd:
|
||||
call clrled ; clear LEDs
|
||||
;
|
||||
call DSKY_GETKEY ; get DSKY key
|
||||
call dsky_getkey ; get DSKY key
|
||||
ld a,e ; put in A
|
||||
cp $FF ; check for error
|
||||
ret z ; abort if so
|
||||
;
|
||||
#if (DSKYMODE == DSKYMODE_NG)
|
||||
call DSKY_PUTLED
|
||||
.db $00,$00,$00,$00,$00,$00,$00,$00
|
||||
call DSKY_L2OFF
|
||||
#endif
|
||||
push af
|
||||
call dsky_highlightkeysoff
|
||||
call dsky_l2off
|
||||
pop af
|
||||
;
|
||||
; Attempt built-in commands
|
||||
cp KY_BO ; reboot system
|
||||
@@ -863,7 +862,7 @@ reboot:
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
ld hl,msg_boot ; point to boot message
|
||||
call DSKY_SHOW ; display message
|
||||
call dsky_show ; display message
|
||||
#endif
|
||||
;
|
||||
; cold boot system
|
||||
@@ -895,7 +894,7 @@ romload:
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
ld hl,msg_load ; point to load message
|
||||
call DSKY_SHOW ; display message
|
||||
call dsky_show ; display message
|
||||
#endif
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
@@ -979,7 +978,7 @@ romload1:
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
ld hl,msg_go ; point to go message
|
||||
call DSKY_SHOW ; display message
|
||||
call dsky_show ; display message
|
||||
#endif
|
||||
;
|
||||
ld l,(ix+ra_ent) ; HL := app entry address
|
||||
@@ -1004,7 +1003,7 @@ diskboot:
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
ld hl,msg_load ; point to load message
|
||||
call DSKY_SHOW ; display message
|
||||
call dsky_show ; display message
|
||||
#endif
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
@@ -1017,6 +1016,18 @@ diskboot:
|
||||
cp e ; compare to count
|
||||
jp nc,err_nodisk ; handle no disk err
|
||||
;
|
||||
; If non-zero slice requested, confirm device can handle it
|
||||
ld a,(bootslice) ; get slice
|
||||
or a ; set flags
|
||||
jr z,diskboot0 ; slice 0, skip slice check
|
||||
ld a,(bootunit) ; get disk unit
|
||||
ld c,a ; put in C for func call
|
||||
ld b,BF_DIODEVICE ; HBIOS func: device info
|
||||
rst 08 ; do it
|
||||
bit 5,c ; high capacity device?
|
||||
jp z,err_noslice ; no such slice, handle err
|
||||
;
|
||||
diskboot0:
|
||||
; Sense media
|
||||
ld a,(bootunit) ; get boot disk unit
|
||||
ld c,a ; put in C for func call
|
||||
@@ -1026,18 +1037,6 @@ diskboot:
|
||||
jp nz,err_diskio ; handle error
|
||||
ld a,e ; media id to A
|
||||
ld (mediaid),a ; save media id
|
||||
;
|
||||
; If non-zero slice requested, confirm device can handle it
|
||||
ld a,(bootslice) ; get slice
|
||||
or a ; set flags
|
||||
jr z,diskboot1 ; slice 0, skip slice check
|
||||
ld a,(bootunit) ; get disk unit
|
||||
ld c,a ; put in C for func call
|
||||
ld b,BF_DIODEVICE ; HBIOS func: device info
|
||||
rst 08 ; do it
|
||||
ld a,d ; device type to A
|
||||
cp DIODEV_IDE ; IDE is max slice device type
|
||||
jp c,err_noslice ; no such slice, handle err
|
||||
;
|
||||
#endif
|
||||
;
|
||||
@@ -1288,7 +1287,7 @@ diskboot10:
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
ld hl,msg_go ; point to go message
|
||||
call DSKY_SHOW ; display message
|
||||
call dsky_show ; display message
|
||||
#endif
|
||||
;
|
||||
; Jump to entry vector
|
||||
@@ -1344,6 +1343,36 @@ diskread:
|
||||
;
|
||||
#endif
|
||||
;
|
||||
; Built-in mini-loader for S100 Monitor. The S100 platform build
|
||||
; imbeds the S100 Monitor in the ROM at the start of bank 3 (BID_IMG2).
|
||||
; This bit of code just launches the monitor directly from that bank.
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
#if (PLATFORM == PLT_S100)
|
||||
;
|
||||
s100mon:
|
||||
; Warn user that console is being directed to the S100 bus
|
||||
; if the IOBYTE bit 0 is 0 (%xxxxxxx0).
|
||||
in a,($75) ; get IO byte
|
||||
and %00000001 ; isolate console bit
|
||||
jr nz,s100mon1 ; if 0, bypass msg
|
||||
ld hl,str_s100con ; console msg string
|
||||
call pstr ; display it
|
||||
;
|
||||
s100mon1:
|
||||
; Launch S100 Monitor from ROM Bank 3
|
||||
call ldelay ; wait for UART buf to empty
|
||||
di ; suspend interrupts
|
||||
ld a,BID_IMG2 ; S100 monitor bank
|
||||
ld ix,0 ; execution resumes here
|
||||
jp HB_BNKCALL ; do it
|
||||
;
|
||||
str_smon .db "S100 Z180 Monitor",0
|
||||
str_s100con .db "\r\n\r\nConsole on S100 Bus",0
|
||||
;
|
||||
#endif
|
||||
#endif
|
||||
;
|
||||
;=======================================================================
|
||||
; Utility functions
|
||||
;=======================================================================
|
||||
@@ -2063,6 +2092,60 @@ devunk .db "UNK",0
|
||||
str_devlst .db "\r\n\r\nDisk Devices:",0
|
||||
;
|
||||
#endif
|
||||
|
||||
#if (DSKYENABLE)
|
||||
|
||||
;
|
||||
;=======================================================================
|
||||
; DSKY interface routines
|
||||
;=======================================================================
|
||||
;
|
||||
dsky_stat:
|
||||
ld b,BF_DSKYSTAT
|
||||
jr dsky_hbcall
|
||||
;
|
||||
dsky_getkey:
|
||||
ld b,BF_DSKYGETKEY
|
||||
jr dsky_hbcall
|
||||
;
|
||||
dsky_show:
|
||||
ld b,BF_DSKYSHOWSEG
|
||||
jr dsky_hbcall
|
||||
;
|
||||
dsky_beep:
|
||||
ld b,BF_DSKYBEEP
|
||||
jr dsky_hbcall
|
||||
;
|
||||
dsky_l2on:
|
||||
ld e,1
|
||||
jr dsky_statled
|
||||
dsky_l2off:
|
||||
ld e,0
|
||||
dsky_statled:
|
||||
ld b,BF_DSKYSTATLED
|
||||
ld d,1
|
||||
jr dsky_hbcall
|
||||
;
|
||||
dsky_putled:
|
||||
ld b,BF_DSKYKEYLEDS
|
||||
jr dsky_hbcall
|
||||
;
|
||||
dsky_highlightallkeys:
|
||||
ld hl,dsky_highlightallkeyleds
|
||||
jr dsky_putled
|
||||
;
|
||||
dsky_highlightkeysoff:
|
||||
ld hl,dsky_highlightkeyledsoff
|
||||
jr dsky_putled
|
||||
;
|
||||
dsky_hbcall:
|
||||
ld a,(dskyact)
|
||||
or a
|
||||
ret z
|
||||
rst 08
|
||||
ret
|
||||
;
|
||||
#endif
|
||||
;
|
||||
;=======================================================================
|
||||
; Error handlers
|
||||
@@ -2118,22 +2201,6 @@ str_err_sig .db "No system image on disk",0
|
||||
str_err_api .db "Unexpected hardware BIOS API failure",0
|
||||
;
|
||||
;=======================================================================
|
||||
; Includes
|
||||
;=======================================================================
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
#define DSKY_KBD
|
||||
#if (DSKYMODE == DSKYMODE_V1)
|
||||
VDELAY .equ vdelay
|
||||
DLY2 .equ dly2
|
||||
#include "dsky.asm"
|
||||
#endif
|
||||
#if (DSKYMODE == DSKYMODE_NG)
|
||||
#include "dskyng.asm"
|
||||
#endif
|
||||
#endif
|
||||
;
|
||||
;=======================================================================
|
||||
; Working data storage (initialized)
|
||||
;=======================================================================
|
||||
;
|
||||
@@ -2181,21 +2248,20 @@ str_help .db "\r\n"
|
||||
.db 0
|
||||
;
|
||||
#if (DSKYENABLE)
|
||||
#if (DSKYMODE == DSKYMODE_V1)
|
||||
msg_sel .db $7f,$1d,$1d,$0f,$6c,$00,$00,$00 ; "boot? "
|
||||
msg_boot .db $7f,$1d,$1d,$0f,$80,$80,$80,$00 ; "boot... "
|
||||
msg_load .db $0b,$1d,$7d,$3d,$80,$80,$80,$00 ; "load... "
|
||||
msg_go .db $5b,$1d,$80,$80,$80,$00,$00,$00 ; "go... "
|
||||
#endif
|
||||
#if (DSKYMODE == DSKYMODE_NG)
|
||||
msg_sel .db $7f,$5c,$5c,$78,$53,$00,$00,$00 ; "boot? "
|
||||
msg_boot .db $7f,$5c,$5c,$78,$80,$80,$80,$00 ; "boot... "
|
||||
msg_load .db $38,$5c,$5f,$5e,$80,$80,$80,$00 ; "load... "
|
||||
msg_go .db $3d,$5c,$80,$80,$80,$00,$00,$00 ; "go... "
|
||||
#endif
|
||||
#endif
|
||||
;
|
||||
;=======================================================================
|
||||
; DSKY keypad led matrix masks
|
||||
;=======================================================================
|
||||
;
|
||||
dsky_highlightallkeyleds .db $3f,$3f,$3f,$3f,$00,$00,$00,$00
|
||||
dsky_highlightkeyledsoff .db $00,$00,$00,$00,$00,$00,$00,$00
|
||||
;
|
||||
;=======================================================================
|
||||
; ROM Application Table
|
||||
;=======================================================================
|
||||
;
|
||||
@@ -2275,6 +2341,11 @@ ra_tbl:
|
||||
; --------- ------- ----- -------- ----- ------- ------- ----------
|
||||
ra_ent(str_mon, 'M', KY_CL, BID_IMG0, MON_IMGLOC, MON_LOC, MON_SIZ, MON_SERIAL)
|
||||
ra_entsiz .equ $ - ra_tbl
|
||||
#if (BIOS == BIOS_WBW)
|
||||
#if (PLATFORM == PLT_S100)
|
||||
ra_ent(str_smon, 'S', $FF, bid_cur , $8000, $8000, $0001, s100mon)
|
||||
#endif
|
||||
#endif
|
||||
ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT)
|
||||
ra_ent(str_cpm22, 'C', KY_BK, BID_IMG0, CPM_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT)
|
||||
#if (BIOS == BIOS_WBW)
|
||||
@@ -2297,7 +2368,7 @@ ra_tbl_app:
|
||||
; Name Key Dsky Bank Src Dest Size Entry
|
||||
; --------- ------- ----- -------- ----- ------- ------- ----------
|
||||
ra_ent(str_mon, 'M', KY_CL, bid_cur, MON_IMGLOC, MON_LOC, MON_SIZ, MON_SERIAL)
|
||||
ra_ent(str_zsys, 'Z', KY_FW, bid_cur, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT)
|
||||
ra_ent(str_zsys, 'Z', KY_FW, bid_cur, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT)
|
||||
#if (DSKYENABLE)
|
||||
ra_ent(str_dsky, 'Y'+$80, KY_GO, bid_cur, MON_IMGLOC, MON_LOC, MON_SIZ, MON_DSKY)
|
||||
#endif
|
||||
@@ -2344,6 +2415,7 @@ bootslice .db 0 ; boot disk slice
|
||||
loadcnt .db 0 ; num disk sectors to load
|
||||
switches .db 0 ; front panel switches
|
||||
diskcnt .db 0 ; disk unit count value
|
||||
dskyact .db 0 ; DSKY active if != 0
|
||||
;
|
||||
;=======================================================================
|
||||
; Pad remainder of ROM Loader
|
||||
|
||||
4114
Source/HBIOS/s100mon.z80
Normal file
4114
Source/HBIOS/s100mon.z80
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,14 +9,14 @@
|
||||
; - TEST XC CARD TYPE DETECTION
|
||||
; - TRY TO GET INIT TO FAIL, REMOVE DELAYS AT START OF GOIDLE?
|
||||
;
|
||||
;----------------------------------------------------------------------------------------------
|
||||
; SD Signal Active JUHA N8 CSIO PPI UART DSD MK4 SC MT
|
||||
; ------------ ------- ------- ------- ------- ------- ------- ------- ------- ------- -------
|
||||
; CS (DAT3) LO -> RTC:2 RTC:2 RTC:2 ~PC:4 ~MCR:3 OPR:2 SD:2 ~RTC:2/3OPR:4/5
|
||||
; CLK HI -> RTC:1 RTC:1 CSIO PC:1 ~MCR:2 OPR:1 CSIO CSIO SPI
|
||||
; DI (CMD) HI -> RTC:0 RTC:0 CSIO PC:0 ~MCR:0 OPR:0 CSIO CSIO SPI
|
||||
; DO (DAT0) HI -> RTC:7 RTC:6 CSIO PB:7 ~MSR:5 OPR:0 CSIO CSIO SPI
|
||||
;----------------------------------------------------------------------------------------------
|
||||
;-----------------------------------------------------------------------------------------------------
|
||||
; SD Signal Active JUHA N8 CSIO PPI UART DSD MK4 SC MT PIO
|
||||
; ------------ ------- ------- ------- ------- ------- ------- ------- ------- ------- --------------
|
||||
; CS (DAT3) LO -> RTC:2 RTC:2 RTC:2 ~PC:4 ~MCR:3 OPR:2 SD:2 ~RTC:2/3OPR:4/5~OPR:3
|
||||
; CLK HI -> RTC:1 RTC:1 CSIO PC:1 ~MCR:2 OPR:1 CSIO CSIO SPI OPR:4
|
||||
; DI (CMD) HI -> RTC:0 RTC:0 CSIO PC:0 ~MCR:0 OPR:0 CSIO CSIO SPI OPR:0
|
||||
; DO (DAT0) HI -> RTC:7 RTC:6 CSIO PB:7 ~MSR:5 OPR:0 CSIO CSIO SPI OPR:7
|
||||
;-----------------------------------------------------------------------------------------------------
|
||||
;
|
||||
; CS = CHIP SELECT (AKA DAT3 FOR NON-SPI MODE)
|
||||
; CLK = CLOCK
|
||||
@@ -167,6 +167,7 @@ RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE
|
||||
SD_DEVMAX .EQU 1 ; NUMBER OF PHYSICAL UNITS (SOCKETS)
|
||||
SD_PPIBASE .EQU SDPPIBASE ; BASE IO PORT FOR PPI
|
||||
SD_PPIB .EQU SDPPIBASE + 1 ; PPI PORT B (INPUT: DOUT)
|
||||
SD_PPIB .EQU SDPPIBASE + 1 ; PPI PORT B (INPUT: DOUT)
|
||||
SD_PPIC .EQU SDPPIBASE + 2 ; PPI PORT C (OUTPUT: CS, CLK, DIN)
|
||||
SD_PPIX .EQU SDPPIBASE + 3 ; PPI CONTROL PORT
|
||||
SD_OPRREG .EQU SD_PPIC ; PPI PORT C IS OPR REG
|
||||
@@ -298,7 +299,10 @@ SD_INVCS .EQU FALSE ; INVERT CS
|
||||
SD_DEVMAX .EQU 1 ; NUMBER OF PHYSICAL UNITS (SOCKETS)
|
||||
SD_IOBASE .EQU $69 ; IO BASE ADDRESS FOR SD INTERFACE
|
||||
SD_OPRREG .EQU SD_IOBASE ; OUTPUT PORT (OUTPUT: CS, CLK, DIN)
|
||||
SD_OPRDEF .EQU %11111111 ; OUTPUT PORT DEFAULT STATE
|
||||
;--- WBW
|
||||
;SD_OPRDEF .EQU %11111111 ; OUTPUT PORT DEFAULT STATE
|
||||
SD_OPRDEF .EQU %11101111 ; OUTPUT PORT DEFAULT STATE
|
||||
;---
|
||||
SD_INPREG .EQU SD_IOBASE ; INPUT REGISTER
|
||||
SD_CS0 .EQU %00001000 ; SELECT
|
||||
SD_CLK .EQU %00010000 ; CLOCK
|
||||
@@ -928,7 +932,7 @@ SD_RESET:
|
||||
SD_DEVICE:
|
||||
LD D,DIODEV_SD ; D := DEVICE TYPE
|
||||
LD E,(IY+SD_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
LD C,%01110010 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
LD H,SDMODE ; H := MODE
|
||||
LD L,(SD_IOBASE) ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -1382,7 +1386,9 @@ SD_SETADDR:
|
||||
LD A,SD_LBA ; OFFSET OF LBA VALUE
|
||||
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
CALL LD32 ; LOAD IT TO DE:HL, AF IS TRASHED
|
||||
POP AF ; GET CARD TYPE BACK
|
||||
@@ -1564,11 +1570,6 @@ SD_EXECCMD3:
|
||||
#IF (SDTRACE >= 3)
|
||||
CALL SD_PRTRC ; IF MAX TRACING, PRINT RC
|
||||
#ENDIF
|
||||
;;#IF (DSKYENABLE)
|
||||
;; PUSH AF
|
||||
;; CALL SD_DSKY ; IF USING DSKY, SHOW IT THERE
|
||||
;; POP AF
|
||||
;;#ENDIF
|
||||
AND ~$01 ; MASK OFF IDLE BIT AND SET FLAGS
|
||||
RET Z ; IF RC = 0, NO ERROR, RETURN
|
||||
CALL SD_DONE ; IF ERROR, COMPLETE TRANSACTION
|
||||
@@ -1804,6 +1805,7 @@ SD_SETUP:
|
||||
;
|
||||
#IF (SDMODE == SDMODE_PIO)
|
||||
LD A,SD_OPRDEF ; All output bits high
|
||||
LD (SD_OPRVAL),A ; WBW
|
||||
OUT (SD_OPRREG),A
|
||||
LD A,$CF ; Port B mode 3
|
||||
OUT (SD_DDR),A
|
||||
@@ -2342,29 +2344,6 @@ SD_PRTPREFIX:
|
||||
CALL PC_COLON
|
||||
POP AF
|
||||
RET
|
||||
;;;
|
||||
;;; DISPLAY COMMAND, LOW ORDER WORD OF PARMS, AND RC
|
||||
;;;
|
||||
;;#IF (DSKYENABLE)
|
||||
;;SD_DSKY:
|
||||
;; PUSH AF
|
||||
;; PUSH HL
|
||||
;; LD HL,DSKY_HEXBUF
|
||||
;; LD A,(SD_CMD)
|
||||
;; LD (HL),A
|
||||
;; INC HL
|
||||
;; LD A,(SD_CMDP2)
|
||||
;; LD (HL),A
|
||||
;; INC HL
|
||||
;; LD A,(SD_CMDP3)
|
||||
;; LD (HL),A
|
||||
;; INC HL
|
||||
;; LD A,(SD_RC)
|
||||
;; CALL DSKY_HEXOUT
|
||||
;; POP HL
|
||||
;; POP AF
|
||||
;; RET
|
||||
;;#ENDIF
|
||||
;
|
||||
;=============================================================================
|
||||
; STRING DATA
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
; 13. MBC Andrew Lynch's Multi Board Computer
|
||||
; 14. RPH Andrew Lynch's RHYOPHYRE Graphics Computer
|
||||
; 15. Z80RETRO Peter Wilson's Z80-Retro Computer
|
||||
; 16. S100 S100 Computers Z180-based System
|
||||
; 17. DUO Andrew Lynch's Duodyne Computer
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
@@ -260,6 +262,12 @@ IMMMODE_NONE .EQU 0 ; NONE
|
||||
IMMMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
|
||||
IMMMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; SYQ DRIVER MODE SELECTIONS
|
||||
;
|
||||
SYQMODE_NONE .EQU 0 ; NONE
|
||||
SYQMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
|
||||
SYQMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
|
||||
;
|
||||
; GDC MONITOR SELECTIONS
|
||||
;
|
||||
GDCMON_NONE .EQU 0
|
||||
@@ -274,6 +282,8 @@ DMAMODE_Z180 .EQU 2 ; Z180 INTEGRATED DMA
|
||||
DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA
|
||||
DMAMODE_RC .EQU 4 ; RCBUS Z80 DMA
|
||||
DMAMODE_MBC .EQU 5 ; MBC
|
||||
DMAMODE_DUO .EQU 6 ; DUO
|
||||
DMAMODE_VDG .EQU 7 ; VELESOFT DATAGEAR
|
||||
;
|
||||
; KEYBOARD MODE SELECTIONS
|
||||
;
|
||||
@@ -451,13 +461,15 @@ 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
|
||||
SCSI_CMD_TSTRDY .EQU $00
|
||||
SCSI_CMD_SENSE .EQU $03
|
||||
SCSI_CMD_READ .EQU $08
|
||||
SCSI_CMD_WRITE .EQU $0A
|
||||
SCSI_CMD_INQ .EQU $12
|
||||
SCSI_CMD_START .EQU $1B
|
||||
SCSI_CMD_RDCAP .EQU $25
|
||||
SCSI_CMD_READ10 .EQU $28
|
||||
SCSI_CMD_WRITE10 .EQU $2A
|
||||
;
|
||||
#INCLUDE "build.inc" ; INCLUDE USER CONFIG, ADD VARIANT, TIMESTAMP, & ROMSIZE
|
||||
;
|
||||
@@ -720,12 +732,13 @@ MON_SERIAL .EQU MON_LOC + (1 * 3) ; MONITOR ENTRY (SERIAL PORT)
|
||||
;
|
||||
; INTERRUPT MODE 2 SLOT ASSIGNMENTS
|
||||
;
|
||||
#IF ((INTMODE == 2) | (INTMODE == 3))
|
||||
#IF (((CPUFAM == CPU_Z180) | (CPUFAM == CPU_Z280)) & (INTMODE > 0))
|
||||
|
||||
#IF ((CPUFAM == CPU_Z180) | (CPUFAM == CPU_Z280))
|
||||
; NOTE THAT Z180 PROCESSES ALL INTERNAL INTERRUPTS JUST LIKE
|
||||
; IM2 EVEN WHEN CHIP IS IN IM1 MODE. SO WE INCLUDE THE IM2
|
||||
; INTERRUPT ASSIGNMENTS FOR IM1 BELOW.
|
||||
|
||||
; Z180-BASED SYSTEMS
|
||||
|
||||
INT_INT1 .EQU 0 ; Z180 INT 1
|
||||
INT_INT2 .EQU 1 ; Z180 INT 2
|
||||
INT_TIM0 .EQU 2 ; Z180 TIMER 0
|
||||
@@ -742,19 +755,18 @@ INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
|
||||
INT_SIO0 .EQU 13 ; ZILOG SIO 0, CHANNEL A & B
|
||||
INT_SIO1 .EQU 14 ; ZILOG SIO 1, CHANNEL A & B
|
||||
|
||||
#ELSE
|
||||
#ENDIF
|
||||
|
||||
; Z80-BASED SYSTEMS
|
||||
|
||||
|
||||
#IF (PLATFORM == PLT_MBC)
|
||||
#IF ((CPUFAM == CPU_Z80) & (INTMODE == 2))
|
||||
#IF (PLATFORM == PLT_MBC)
|
||||
|
||||
; MBC Z80
|
||||
;INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A
|
||||
;INT_CTC0B .EQU 1 ; ZILOG CTC 0, CHANNEL B
|
||||
;INT_CTC0C .EQU 2 ; ZILOG CTC 0, CHANNEL C
|
||||
;INT_CTC0D .EQU 3 ; ZILOG CTC 0, CHANNEL D
|
||||
INT_UART0 .EQU 4 ; MBC UART 0
|
||||
INT_UART1 .EQU 5 ; MBC UART 1
|
||||
INT_UART0 .EQU 4 ; UART 0
|
||||
INT_UART1 .EQU 5 ; UART 1
|
||||
INT_SIO0 .EQU 8 ; ZILOG SIO 0, CHANNEL A & B
|
||||
INT_SIO1 .EQU 9 ; ZILOG SIO 1, CHANNEL A & B
|
||||
INT_CTC0A .EQU 12 ; ZILOG CTC 0, CHANNEL A
|
||||
@@ -766,14 +778,15 @@ INT_CTC0D .EQU 15 ; ZILOG CTC 0, CHANNEL D
|
||||
;INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A
|
||||
;INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
|
||||
|
||||
#ELSE
|
||||
#ELSE
|
||||
|
||||
; GENERIC Z80
|
||||
INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A
|
||||
INT_CTC0B .EQU 1 ; ZILOG CTC 0, CHANNEL B
|
||||
INT_CTC0C .EQU 2 ; ZILOG CTC 0, CHANNEL C
|
||||
INT_CTC0D .EQU 3 ; ZILOG CTC 0, CHANNEL D
|
||||
INT_UART0 .EQU 4 ; MBC UART 0
|
||||
INT_UART1 .EQU 5 ; MBC UART 1
|
||||
INT_UART0 .EQU 4 ; UART 0
|
||||
INT_UART1 .EQU 5 ; UART 1
|
||||
INT_SIO0 .EQU 7 ; ZILOG SIO 0, CHANNEL A & B
|
||||
INT_SIO1 .EQU 8 ; ZILOG SIO 1, CHANNEL A & B
|
||||
INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A
|
||||
@@ -782,13 +795,11 @@ INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A
|
||||
INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
|
||||
|
||||
#ENDIF
|
||||
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
|
||||
#DEFINE IVT(INTX) HB_IVT+(INTX * 4)+1
|
||||
#DEFINE VEC(INTX) INTX*2
|
||||
|
||||
#ENDIF
|
||||
;
|
||||
; SET DEFAULT CSIO SPEED (INTERNAL CLOCK, SLOW AS POSSIBLE)
|
||||
; DIV 1280, 14KHZ @ 18MHZ CLK
|
||||
|
||||
1466
Source/HBIOS/syq.asm
Normal file
1466
Source/HBIOS/syq.asm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -59,6 +59,7 @@ UARTMBASE .EQU $18
|
||||
UART4BASE .EQU $C0
|
||||
UARTRBASE .EQU $A0
|
||||
UARTDBASE .EQU $80
|
||||
UARTYBASE .EQU $58
|
||||
;
|
||||
#IF (UARTINTS)
|
||||
;
|
||||
@@ -1087,6 +1088,16 @@ UART_CFG_MFP:
|
||||
.DW UARTCFG ; LINE CONFIGURATION
|
||||
.DW 0 ; SHOULD NEVER NEED INT HANDLER
|
||||
#ENDIF
|
||||
#IF (UARTDUO)
|
||||
UART_CFG_DUO:
|
||||
; DUODYNE ONBOARD SERIAL PORT
|
||||
.DB 0 ; DEVICE NUMBER (UPDATED DURING INIT)
|
||||
.DB 0 ; UART TYPE
|
||||
.DB UARTYBASE ; IO PORT BASE (RBR, THR)
|
||||
.DB UARTYBASE + UART_LSR ; LINE STATUS PORT (LSR)
|
||||
.DW UARTCFG ; LINE CONFIGURATION
|
||||
.DW 0 ; POINTER TO RCV BUFFER STRUCT
|
||||
#ENDIF
|
||||
;
|
||||
UART_CNT .EQU ($ - UART_CFG) / 8
|
||||
;
|
||||
|
||||
@@ -14,6 +14,13 @@ call BuildDisk.cmd cpm3 fd wbw_fd144 ..\cpm3\cpmldr.sys || exit /b
|
||||
call BuildDisk.cmd zpm3 fd wbw_fd144 ..\zpm3\zpmldr.sys || exit /b
|
||||
call BuildDisk.cmd ws4 fd wbw_fd144 || exit /b
|
||||
call BuildDisk.cmd qpm fd wbw_fd144 d_qpm\u0\qpm.sys || exit /b
|
||||
call BuildDisk.cmd z80asm hd wbw_fd144 || exit /b
|
||||
call BuildDisk.cmd aztecc hd wbw_fd144 || exit /b
|
||||
call BuildDisk.cmd hitechc hd wbw_fd144 || exit /b
|
||||
call BuildDisk.cmd tpascal hd wbw_fd144 || exit /b
|
||||
call BuildDisk.cmd bascomp hd wbw_fd144 || exit /b
|
||||
call BuildDisk.cmd fortran hd wbw_fd144 || exit /b
|
||||
call BuildDisk.cmd games hd wbw_fd144 || exit /b
|
||||
|
||||
echo.
|
||||
echo Building Hard Disk Images (512 directory entry format)...
|
||||
@@ -26,6 +33,13 @@ call BuildDisk.cmd zpm3 hd wbw_hd512 ..\zpm3\zpmldr.sys || exit /b
|
||||
call BuildDisk.cmd ws4 hd wbw_hd512 || exit /b
|
||||
call BuildDisk.cmd dos65 hd wbw_hd512 ..\zsdos\zsys_wbw.sys || exit /b
|
||||
call BuildDisk.cmd qpm hd wbw_hd512 d_qpm\u0\qpm.sys || exit /b
|
||||
call BuildDisk.cmd z80asm hd wbw_hd512 || exit /b
|
||||
call BuildDisk.cmd aztecc hd wbw_hd512 || exit /b
|
||||
call BuildDisk.cmd hitechc hd wbw_hd512 || exit /b
|
||||
call BuildDisk.cmd tpascal hd wbw_hd512 || exit /b
|
||||
call BuildDisk.cmd bascomp hd wbw_hd512 || exit /b
|
||||
call BuildDisk.cmd fortran hd wbw_hd512 || exit /b
|
||||
call BuildDisk.cmd games hd wbw_hd512 || exit /b
|
||||
|
||||
if exist ..\BPBIOS\bpbio-ww.rel call BuildDisk.cmd bp hd wbw_hd512 || exit /b
|
||||
|
||||
@@ -43,6 +57,13 @@ call BuildDisk.cmd cpm3 hd wbw_hd1k ..\cpm3\cpmldr.sys || exit /b
|
||||
call BuildDisk.cmd zpm3 hd wbw_hd1k ..\zpm3\zpmldr.sys || exit /b
|
||||
call BuildDisk.cmd ws4 hd wbw_hd1k || exit /b
|
||||
call BuildDisk.cmd qpm hd wbw_hd1k d_qpm\u0\qpm.sys || exit /b
|
||||
call BuildDisk.cmd z80asm hd wbw_hd1k || exit /b
|
||||
call BuildDisk.cmd aztecc hd wbw_hd1k || exit /b
|
||||
call BuildDisk.cmd hitechc hd wbw_hd1k || exit /b
|
||||
call BuildDisk.cmd tpascal hd wbw_hd1k || exit /b
|
||||
call BuildDisk.cmd bascomp hd wbw_hd1k || exit /b
|
||||
call BuildDisk.cmd fortran hd wbw_hd1k || exit /b
|
||||
call BuildDisk.cmd games hd wbw_hd1k || exit /b
|
||||
|
||||
if exist ..\BPBIOS\bpbio-ww.rel call BuildDisk.cmd bp hd wbw_hd1k || exit /b
|
||||
|
||||
|
||||
Binary file not shown.
BIN
Source/Images/Common/All/WDATE.COM
Normal file
BIN
Source/Images/Common/All/WDATE.COM
Normal file
Binary file not shown.
BIN
Source/Images/Common/UTILS/BBCBASIC.COM
Normal file
BIN
Source/Images/Common/UTILS/BBCBASIC.COM
Normal file
Binary file not shown.
369
Source/Images/Common/UTILS/BBCBASIC.TXT
Normal file
369
Source/Images/Common/UTILS/BBCBASIC.TXT
Normal file
@@ -0,0 +1,369 @@
|
||||
BBC BASIC (Z80)
|
||||
|
||||
Generic CP/M Version 3.00
|
||||
|
||||
(C) Copyright R.T.Russell 1982-1999
|
||||
|
||||
1. INTRODUCTION
|
||||
|
||||
BBC BASIC (Z80) has been designed to be as compatible as possible with
|
||||
Version 4 of the 6502 BBC BASIC resident in the BBC Micro Master series.
|
||||
The language syntax is not always identical to that of the 6502 version,
|
||||
but in most cases the Z80 version is more tolerant.
|
||||
|
||||
BBC BASIC (Z80) is as machine independent as possible and, as supplied,
|
||||
it will run on any CP/M 2.2 (or later) system using a Z80 processor
|
||||
(checks are carried out to ensure that the processor is a Z80 and that
|
||||
the version of CP/M is at least 2.2). It is minimally configured for an
|
||||
ADM3a-compatible VDU.
|
||||
|
||||
Few CP/M systems offer colour graphics of the quality provided as
|
||||
standard on the BBC Microcomputer, and no software can provide colour
|
||||
high-resolution graphics from a monochrome character-orientated computer.
|
||||
However, many CP/M system users are interested in the advanced program
|
||||
structures available from BBC BASIC and, within the limitations of the
|
||||
host computer, BBC BASIC (Z80) provides the programming structures and
|
||||
the non-graphic commands and functions specified for BBC BASIC.
|
||||
|
||||
In order to make full use of the facilities available in BBC BASIC (Z80)
|
||||
it is necessary to install a small patch to adapt it to the capabilities
|
||||
of the host computer. The source code of the patch present in the
|
||||
distribution version is supplied as BBCDIST.MAC.
|
||||
|
||||
This documentation should be read in conjunction with a standard BBC
|
||||
BASIC manual. Only those features which differ from the standard Acorn
|
||||
versions are documented here.
|
||||
|
||||
|
||||
2. MEMORY UTILISATION
|
||||
|
||||
BBC BASIC (Z80) requires about 16 Kbytes of code space, resulting in a
|
||||
value of PAGE of about &3E00. The remainder of the user memory is
|
||||
available for BASIC programs, variables (heap) and stack. Depending on
|
||||
the system configuration, HIMEM can have a value up to &FE00.
|
||||
|
||||
|
||||
3. COMMANDS, STATEMENTS AND FUNCTIONS
|
||||
|
||||
The syntax of BASIC commands, statements and functions is in most cases
|
||||
identical to that of the BBC Micro version (BASIC 4). The few
|
||||
differences are documented here:
|
||||
|
||||
ADVAL
|
||||
This function is not implemented.
|
||||
|
||||
CALL
|
||||
CALL sets up a table in RAM containing details of the parameters; the
|
||||
processor's IX register is set to the address of this parameter table.
|
||||
The other processor registers are initialised as follows:
|
||||
|
||||
A is initialised to the least significant byte of A%
|
||||
B is initialised to the least significant byte of B%
|
||||
C is initialised to the least significant byte of C%
|
||||
D is initialised to the least significant byte of D%
|
||||
E is initialised to the least significant byte of E%
|
||||
F is initialised to the least significant byte of F%
|
||||
H is initialised to the least significant byte of H%
|
||||
L is initialised to the least significant byte of L%
|
||||
|
||||
The parameter types are:
|
||||
|
||||
Code No. Parameter Type Example
|
||||
0 Byte (8 bits) ?A%
|
||||
4 Word (32 bits) !A% or A%
|
||||
5 Real (40 bits) A
|
||||
128 Fixed string $A%
|
||||
129 Movable string A$
|
||||
|
||||
On entry to the subroutine the parameter table contains the following
|
||||
values:
|
||||
|
||||
Number of parameters 1 byte (at IX)
|
||||
|
||||
Parameter type 1 byte (at IX+1)
|
||||
Parameter address 2 bytes (at IX+2, IX+3, LSB first)
|
||||
|
||||
Parameter type ) repeated as often as necessary
|
||||
Parameter address )
|
||||
|
||||
Except in the case of a movable string (normal string variable), the
|
||||
parameter address given is the absolute address at which the item is
|
||||
stored. In the case of movable strings (type 129) it is the address of a
|
||||
4-byte parameter block containing the current length, the maximum length
|
||||
and the start address of the string (LSB first) in that order.
|
||||
|
||||
Integer variables are stored in twos complement form with their least
|
||||
significant byte first.
|
||||
|
||||
Fixed strings are stored as the characters of the string followed by a
|
||||
carriage return (&0D).
|
||||
|
||||
Floating point variables are stored in binary floating point format with
|
||||
their least significant byte first; the fifth byte is the exponent. The
|
||||
mantissa is stored as a binary fraction in sign and magnitude format.
|
||||
Bit 7 of the most significant byte is the sign bit and, for the purposes
|
||||
of calculating the magnitude of the number, this bit is assumed to be set
|
||||
to one. The exponent is stored as an integer in excess 127 format (to
|
||||
find the exponent subtract 127 from the value in the fifth byte).
|
||||
|
||||
If the exponent byte of a floating point number is zero, the number is an
|
||||
integer stored in integer format in the mantissa bytes. Thus an integer
|
||||
can be represented in two different ways in a real variable. For example
|
||||
the value +5 can be stored as:
|
||||
|
||||
05 00 00 00 00 Integer 5
|
||||
00 00 00 20 82 (0.5 + 0.125) * 2^3
|
||||
|
||||
COLOUR (COLOR)
|
||||
This statement is not implemented.
|
||||
|
||||
DRAW
|
||||
This statement is not implemented.
|
||||
|
||||
EDIT
|
||||
A command to edit or concatenate and edit the specified program line(s).
|
||||
The specified lines (including their line numbers) are listed as a single
|
||||
line. By changing only the line number you can use EDIT to duplicate a
|
||||
line.
|
||||
|
||||
EDIT 230
|
||||
EDIT 200,230
|
||||
|
||||
The following control functions are active both in the EDIT mode and in
|
||||
the immediate entry mode (i.e. at the BASIC prompt):
|
||||
|
||||
Move the cursor one character position to the left
|
||||
Move the cursor one character position to the right
|
||||
Move the cursor to the start of the line
|
||||
Move the cursor to the end of the line
|
||||
Insert a space at the current cursor position
|
||||
Delete the character at the current cursor position
|
||||
Backspace and delete the character to the left of the cursor
|
||||
Delete all characters to the left of the cursor
|
||||
Delete all characters from the cursor to the end of the line
|
||||
|
||||
The choice of which keys activate these functions is made when BBC BASIC
|
||||
is configured for a particular system. The distribution version uses ^H,
|
||||
^I, ^K, ^J, ^A, ^E, DEL (&7F), ^L and ^X.
|
||||
|
||||
To exit EDIT mode and replace the edited line, type RETURN (ENTER).
|
||||
|
||||
To abort the edit and leave the line unchanged, type ESCape.
|
||||
|
||||
ENVELOPE
|
||||
This statement is not implemented.
|
||||
|
||||
GET
|
||||
This function waits for a character to be typed at the keyboard, and
|
||||
returns the ASCII code.
|
||||
|
||||
GET can also be used to read data from a processor I/O port; full 16-bit
|
||||
port addressing is available:
|
||||
|
||||
N% = GET(X%) : REM input from port X%
|
||||
|
||||
INKEY
|
||||
This function waits for a specified maximum number of centiseconds for a
|
||||
character to be typed at the keyboard. If no character is typed in that
|
||||
time, the value -1 is returned. In the distribution version the delay is
|
||||
determined by a simple software timing loop, and may be very inaccurate.
|
||||
The customisation patch allows this to be adjusted to suit the system in
|
||||
use.
|
||||
|
||||
INPUT#
|
||||
The format of data files is different from that used by the BBC Micro, in
|
||||
part to improve compatibility with standard CP/M files. Numeric values
|
||||
are stored as five bytes in the format documented under CALL; if the
|
||||
fifth byte is zero the value is an integer. Strings are stored as the
|
||||
characters of the string (in the correct order!) followed by a carriage
|
||||
return (&0D).
|
||||
|
||||
MODE
|
||||
This statement is not implemented.
|
||||
|
||||
MOVE
|
||||
This statement is not implemented.
|
||||
|
||||
PLOT
|
||||
This statement is not implemented.
|
||||
|
||||
POINT
|
||||
This function is not implemented.
|
||||
|
||||
PRINT#
|
||||
The format of data files is different from that used by the BBC Micro, in
|
||||
part to improve compatibility with standard CP/M files. Numeric values
|
||||
are stored as five bytes in the format documented under CALL; if the
|
||||
fifth byte is zero the value is an integer. Strings are stored as the
|
||||
characters of the string (in the correct order!) followed by a carriage
|
||||
return (&0D).
|
||||
|
||||
PUT
|
||||
A statement to output data to a processor port. Full 16-bit addressing
|
||||
is available.
|
||||
|
||||
PUT A%,N% : REM Output N% to port A%
|
||||
|
||||
SOUND
|
||||
This statement is not implemented.
|
||||
|
||||
TIME
|
||||
This pseudo-variable is not implemented in the distribution version, but
|
||||
can be supported by means of the customisation patch. See BBCDIST.MAC.
|
||||
|
||||
USR
|
||||
As with CALL, the processor's registers are initialised as follows:
|
||||
|
||||
A is initialised to the least significant byte of A%
|
||||
B is initialised to the least significant byte of B%
|
||||
C is initialised to the least significant byte of C%
|
||||
D is initialised to the least significant byte of D%
|
||||
E is initialised to the least significant byte of E%
|
||||
F is initialised to the least significant byte of F%
|
||||
H is initialised to the least significant byte of H%
|
||||
L is initialised to the least significant byte of L%
|
||||
|
||||
USR returns a 32-bit integer result composed of the processor's H, L, H'
|
||||
and L' registers, with H being the most significant.
|
||||
|
||||
|
||||
4. RESIDENT Z80 ASSEMBLER
|
||||
|
||||
The in-line assembler is accessed in exactly the same way as the 6502
|
||||
assembler in the BBC Micro version of BBC BASIC. That is, '[' enters
|
||||
assembler mode and ']' exits assembler mode.
|
||||
|
||||
All standard Zilog mnemonics are accepted: ADD, ADC and SBC must be
|
||||
followed by A or HL. For example, ADD A,C is accepted but ADD C is not.
|
||||
However, the brackets around the port number in IN and OUT are optional.
|
||||
Thus both OUT (5),A and OUT 5,A are accepted. The instruction IN F,(C)
|
||||
is not accepted, but the equivalent code is produced from IN (HL),C
|
||||
|
||||
The pseudo-ops DEFB, DEFW and DEFM are included. DEFM works like EQUS in
|
||||
the 6502 version.
|
||||
|
||||
|
||||
5. OPERATING SYSTEM INTERFACE
|
||||
|
||||
The following resident Operating System ("star") commands are
|
||||
implemented. They may be accessed directly (e.g. *BYE) or via the OSCLI
|
||||
statement (OSCLI "BYE").
|
||||
|
||||
Control characters, lower-case characters, DEL and quotation marks may be
|
||||
incorporated in filenames by using the 'escape' character '|'. However,
|
||||
there is no equivalent to the BBC Microcomputer's '|!' to set bit 7.
|
||||
|
||||
*BYE
|
||||
Returns control to the operating system (CP/M).
|
||||
|
||||
*CPM
|
||||
Same as *BYE.
|
||||
|
||||
*. [filespec]
|
||||
*DIR [filespec]
|
||||
List the files which match the (optional) ambiguous filespec. If the
|
||||
filespec is omitted, all .BBC files are listed:
|
||||
*DIR List all .BBC files on the disk
|
||||
*DIR B:*.* List all files on disk B:
|
||||
*.*.* List all files on the current disk
|
||||
|
||||
*DRIVE d:
|
||||
Select drive d as the default drive for subsequent disk operations.
|
||||
|
||||
*ERA filespec
|
||||
Erase (delete) the specified disk file or files. The extension defaults
|
||||
to .BBC if omitted.
|
||||
|
||||
*ESC [ON|OFF]
|
||||
*ESC OFF disables the abort action of the ESCape key; after *ESC OFF the
|
||||
ESCape key simply returns the ASCII code ESC (27). *ESC ON, or *ESC,
|
||||
restores the normal action of the ESCape key.
|
||||
|
||||
*EXEC filespec
|
||||
Accept console input from the specified file instead of from the
|
||||
keyboard. If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*LOAD filespec aaaa
|
||||
Loads the specified file into memory at address aaaa. The load address
|
||||
must be specified. If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*OPT [n]
|
||||
Select the destination for console output characters. The value n is in
|
||||
the range 0 to 2, as follows:
|
||||
|
||||
0 Send characters to the console output
|
||||
1 Send characters to the auxiliary output
|
||||
2 Send characters to the printer (list) output
|
||||
|
||||
*REN newfile=oldfile
|
||||
*RENAME newfile=oldfile
|
||||
Renames 'oldfile' as 'newfile'. If the extension is omitted, .BBC is
|
||||
assumed.
|
||||
|
||||
*RESET
|
||||
Rest the disk system (CP/M function 13). This command does not close any
|
||||
files nor does it perform any other housekeeping function. You should
|
||||
use *RESET after you have changed a disk.
|
||||
|
||||
*SAVE filespec aaaa bbbb
|
||||
*SAVE filespec aaaa +llll
|
||||
This command saves a specified range of memory to disk. The address range
|
||||
is specified either as start (aaaa) and end+1 (bbbb) or as start (aaaa)
|
||||
and length (llll). If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*SPOOL [filespec]
|
||||
Copy all subsequent console output to the specified file. If the filename
|
||||
is omitted, any current spool file is closed and spooling is terminated.
|
||||
If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*TYPE filespec
|
||||
Type the specified file to the screen. If the extension is omitted, .BBC
|
||||
is assumed.
|
||||
|
||||
*| comment
|
||||
This is a comment line. Anything following the | is ignored.
|
||||
|
||||
|
||||
6. ERROR MESSAGES AND CODES
|
||||
|
||||
Untrappable:
|
||||
|
||||
No room RENUMBER space
|
||||
Silly LINE space
|
||||
Sorry Bad program
|
||||
|
||||
Trappable - BASIC:
|
||||
|
||||
1 Out of range 24 Exp range
|
||||
2 25
|
||||
3 26 No such variable
|
||||
4 Mistake 27 Missing )
|
||||
5 Missing , 28 Bad HEX
|
||||
6 Type mismatch 29 No such FN/PROC
|
||||
7 No FN 30 Bad call
|
||||
8 31 Arguments
|
||||
9 Missing " 32 No FOR
|
||||
10 Bad DIM 33 Can't match FOR
|
||||
11 DIM space 34 FOR variable
|
||||
12 Not LOCAL 35
|
||||
13 No PROC 36 No TO
|
||||
14 Array 37
|
||||
15 Subscript 38 No GOSUB
|
||||
16 Syntax error 39 ON syntax
|
||||
17 Escape 40 ON range
|
||||
18 Division by zero 41 No such line
|
||||
19 String too long 42 Out of DATA
|
||||
20 Too big 43 No REPEAT
|
||||
21 -ve root 44
|
||||
22 Log range 45 Missing #
|
||||
23 Accuracy lost
|
||||
|
||||
Trappable - OS:
|
||||
|
||||
190 Directory full 214 File not found
|
||||
192 Too many open files 222 Channel
|
||||
196 File exists 253 Bad string
|
||||
198 Disk full 254 Bad command
|
||||
200 Close error 255 CP/M error
|
||||
204 Bad name
|
||||
|
||||
225
Source/Images/Common/UTILS/BBCDIST.MAC
Normal file
225
Source/Images/Common/UTILS/BBCDIST.MAC
Normal file
@@ -0,0 +1,225 @@
|
||||
TITLE BBCDIST.Z80 (C) R.T.RUSSELL 1982
|
||||
;
|
||||
;BBC BASIC (Z80) - CP/M VERSION 2.30 & 3.00
|
||||
;(C) COPYRIGHT R.T.RUSSELL, 1982.
|
||||
;ALL RIGHTS RESERVED.
|
||||
;
|
||||
;THIS PROGRAM ALLOWS THE USER TO ADAPT BBC BASIC TO THE
|
||||
;PARTICULAR CHARACTERISTICS OF HIS SYSTEM HARDWARE ETC.
|
||||
;
|
||||
;THE PROGRAM RESIDES AT 100H FOR EASE OF LOADING.
|
||||
;*** IT MUST NOT EXCEED 256 BYTES IN TOTAL LENGTH ***
|
||||
;
|
||||
;PLEASE NOTE THAT A Z80 PROCESSOR AND CP/M VERSION 2.2
|
||||
;OR LATER ARE REQUIRED.
|
||||
;
|
||||
;R.T.RUSSELL, 11-03-1984, 03-05-1989
|
||||
;ALTERNATE REGISTERS SAVED FOR BDOS CALL, 04-06-2000
|
||||
;
|
||||
CPM EQU 5
|
||||
COLD EQU 200H
|
||||
;
|
||||
GLOBAL CLRSCN
|
||||
GLOBAL PUTCSR
|
||||
GLOBAL GETCSR
|
||||
GLOBAL PUTIME
|
||||
GLOBAL GETIME
|
||||
GLOBAL GETKEY
|
||||
GLOBAL BYE
|
||||
;
|
||||
ASEG
|
||||
ORG 100H
|
||||
;
|
||||
;JUMP TABLE - BASIC makes calls to hardware-dependent
|
||||
;features via this table:
|
||||
;
|
||||
JP INIT
|
||||
CLRSCN: JP CLS ;CLEAR SCREEN
|
||||
PUTCSR: JP PCSR ;SET CURSOR POSN.
|
||||
GETCSR: JP GCSR ;READ CURSOR POSN.
|
||||
PUTIME: JP PTIME ;SET ELAPSED TIME
|
||||
GETIME: JP GTIME ;READ ELAPSED TIME
|
||||
GETKEY: JP INKEY ;READ KEY (TIME LIMIT)
|
||||
BYE: JP REBOOT ;RETURN TO CP/M
|
||||
;
|
||||
;THE CODE WHICH FOLLOWS IS A SKELETON VERSION SUITABLE
|
||||
;FOR ANY CP/M SYSTEM. IT HAS BEEN CONFIGURED FOR A VT100 TO SOME DEGREE
|
||||
;BY PETER SCHORN.
|
||||
;
|
||||
|
||||
PRSTR EQU 9
|
||||
|
||||
;INIT - Perform hardware initialisation (if any).
|
||||
;
|
||||
INIT: LD A,2
|
||||
INC A
|
||||
LD DE,NOTZ80
|
||||
JP PE,FAIL
|
||||
LD C,12
|
||||
CALL BDOS
|
||||
OR A
|
||||
LD DE,NOTV2
|
||||
JP NZ,COLD
|
||||
FAIL: LD C,PRSTR
|
||||
CALL BDOS
|
||||
RST 0
|
||||
;
|
||||
NOTZ80: DEFB 'Wrong processor$'
|
||||
NOTV2: DEFB 'Wrong CP/M version$'
|
||||
;
|
||||
;REBOOT - Switch off interrupts and return to CP/M
|
||||
;
|
||||
REBOOT: RST 0
|
||||
;
|
||||
;GTIME - Read elapsed-time clock.
|
||||
; Outputs: DEHL = elapsed time (centiseconds)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
GTIME: LD DE,0
|
||||
LD HL,0
|
||||
RET
|
||||
;
|
||||
;PTIME - Load elapsed-time clock.
|
||||
; Inputs: DEHL = time to load (centiseconds)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
PTIME: RET
|
||||
;
|
||||
;CLS - Clear screen for VT100.
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
CLS: PUSH BC ; save BC
|
||||
LD C,PRSTR ; command for output string
|
||||
LD DE,CLSSTR ; start address of string
|
||||
CALL BDOS ; output to terminal
|
||||
POP BC ; restore BC
|
||||
RET
|
||||
CLSSTR: DEFB 27,'[2J$' ; VT100 string for clear screen
|
||||
|
||||
;
|
||||
;INKEY - Sample keyboard with specified wait.
|
||||
; This version uses a simple software timing loop.
|
||||
; Modify to use hardware/interrupt timer if available.
|
||||
; Inputs: HL = Time to wait (centiseconds)
|
||||
; Outputs: Carry reset indicates time-out.
|
||||
; If carry set, A = character typed.
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
INKEY: PUSH BC
|
||||
PUSH HL
|
||||
LD C,6
|
||||
LD E,0FFH
|
||||
CALL BDOS ;CONSOLE INPUT
|
||||
POP HL
|
||||
POP BC
|
||||
OR A
|
||||
SCF
|
||||
RET NZ ;KEY PRESSED
|
||||
OR H
|
||||
OR L
|
||||
RET Z ;TIME-OUT
|
||||
PUSH BC
|
||||
LD A,-1
|
||||
LD BC,1250 ;DELAY CONSTANT
|
||||
WAIT: DEC BC
|
||||
CP B
|
||||
JP NZ,WAIT ;WAIT FOR APPROX 10ms
|
||||
POP BC
|
||||
DEC HL
|
||||
JR INKEY
|
||||
;
|
||||
;PCSR - Move cursor to specified position.
|
||||
; Inputs: DE = horizontal position (LHS=0)
|
||||
; HL = vertical position (TOP=0)
|
||||
; called by TAB(column, row)
|
||||
PCSR: LD B,L ; vertical = line (row)
|
||||
CALL CONV ; normalized and convert to decimal
|
||||
LD (LIN),HL ; and store into string
|
||||
LD B,E ; horizontal = column
|
||||
CALL CONV ; normalized and convert to decimal
|
||||
LD (COL),HL ; and store into string
|
||||
LD C,PRSTR ; output string command
|
||||
LD DE,CURS ; start of string
|
||||
JR BDOS ; output string to terminal
|
||||
|
||||
; VT100 sequence for cursor positioning
|
||||
CURS: DEFB 27, '['
|
||||
LIN: DEFW 0 ; high byte, low byte for decimal line
|
||||
DEFB ';'
|
||||
COL: DEFW 0 ; high byte, low byte for decimal column
|
||||
DEFB 'H$'
|
||||
|
||||
; convert binary B (0 <= B < 99, not checked) into B+1 in decimal.
|
||||
; L = upper byte, H = lower byte. ready for LD (...), HL
|
||||
; destroys A, B, L, H
|
||||
; optimized for space over time
|
||||
CONV: INC B ; normalize, home in VT100 is (1,1)
|
||||
LD A,'0' ; A is counter for low byte of result
|
||||
LD L,A ; L is counter for high byte of result
|
||||
CONVLP: INC A ; now B times increment AL in decimal
|
||||
CP '9'+1 ; low byte overflow?
|
||||
JR NZ,CONT ; no, continue incrementing
|
||||
LD A,'0' ; reset low byte
|
||||
INC L ; and increment high byte
|
||||
CONT: DJNZ CONVLP ; B times
|
||||
LD H,A ; put low byte into right place
|
||||
RET
|
||||
|
||||
|
||||
;BDOS - Save the IX and IY and alternate registers
|
||||
; before performing a CP/M function call.
|
||||
;
|
||||
BDOS: PUSH IX
|
||||
PUSH IY
|
||||
EXX
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
EXX
|
||||
EX AF,AF'
|
||||
PUSH AF
|
||||
EX AF,AF'
|
||||
CALL CPM
|
||||
EX AF,AF'
|
||||
POP AF
|
||||
EX AF,AF'
|
||||
EXX
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
EXX
|
||||
POP IY
|
||||
POP IX
|
||||
RET
|
||||
|
||||
|
||||
;GCSR - Return cursor coordinates.
|
||||
; Outputs: DE = X coordinate (POS)
|
||||
; HL = Y coordinate (VPOS)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
GCSR: LD DE,0
|
||||
LD HL,0
|
||||
RET
|
||||
;
|
||||
IF $ GT 1F4H
|
||||
ERROR 'INSUFFICIENT SPACE'
|
||||
ENDIF
|
||||
;
|
||||
ORG 1F4H
|
||||
;
|
||||
DEFB 80 ;WIDTH
|
||||
DEFB 'E' AND 1FH ;CURSOR UP
|
||||
DEFB 'X' AND 1FH ;CURSOR DOWN
|
||||
DEFB 'A' AND 1FH ;START OF LINE
|
||||
DEFB 'F' AND 1FH ;END OF LINE
|
||||
DEFB 'T' AND 1FH ;DELETE TO END OF LINE
|
||||
DEFB 'H' AND 1FH ;BACKSPACE
|
||||
DEFB 'U' AND 1FH ;CANCEL LINE
|
||||
DEFB 'S' AND 1FH ;CURSOR LEFT
|
||||
DEFB 'D' AND 1FH ;CURSOR RIGHT
|
||||
DEFB 'G' AND 1FH ;DELETE CHARACTER
|
||||
DEFB 'V' AND 1FH ;INSERT CHARACTER
|
||||
;
|
||||
FIN: END
|
||||
|
||||
13
Source/Images/Common/UTILS/BBCDIST.SUB
Normal file
13
Source/Images/Common/UTILS/BBCDIST.SUB
Normal file
@@ -0,0 +1,13 @@
|
||||
; patch BBCBASIC with BBCDIST
|
||||
; need M80 and L80
|
||||
xsub
|
||||
m80 =bbcdist/z
|
||||
l80 bbcdist,bbcdist/n/e
|
||||
ddt bbcbasic.org
|
||||
ibbcdist.com
|
||||
r
|
||||
g0
|
||||
save 58 bbcbasic.com
|
||||
era bbcdist.rel
|
||||
era bbcdist.com
|
||||
|
||||
BIN
Source/Images/Common/UTILS/GENHEX.COM
Normal file
BIN
Source/Images/Common/UTILS/GENHEX.COM
Normal file
Binary file not shown.
BIN
Source/Images/Common/UTILS/LS.COM
Normal file
BIN
Source/Images/Common/UTILS/LS.COM
Normal file
Binary file not shown.
BIN
Source/Images/Common/UTILS/LSWEEP.COM
Normal file
BIN
Source/Images/Common/UTILS/LSWEEP.COM
Normal file
Binary file not shown.
@@ -4,20 +4,29 @@
|
||||
SYSTEMS = ../CPM22/cpm_wbw.sys ../ZSDOS/zsys_wbw.sys ../CPM3/cpmldr.sys ../ZPM3/zpmldr.sys
|
||||
|
||||
FDIMGS = fd144_cpm22.img fd144_zsdos.img fd144_nzcom.img \
|
||||
fd144_cpm3.img fd144_zpm3.img fd144_ws4.img fd144_qpm.img
|
||||
fd144_cpm3.img fd144_zpm3.img fd144_ws4.img fd144_qpm.img \
|
||||
fd144_z80asm.img fd144_aztecc.img fd144_hitechc.img \
|
||||
fd144_bascomp.img fd144_fortran.img fd144_games.img \
|
||||
fd144_tpascal.img
|
||||
HD512IMGS = hd512_cpm22.img hd512_zsdos.img hd512_nzcom.img \
|
||||
hd512_cpm3.img hd512_zpm3.img hd512_ws4.img
|
||||
HD512XIMGS = hd512_z80asm.img hd512_aztecc.img hd512_hitechc.img \
|
||||
hd512_bascomp.img hd512_fortran.img hd512_games.img \
|
||||
hd512_tpascal.img hd512_dos65.img hd512_qpm.img
|
||||
# HDIMGS += hd512_bp.img
|
||||
HD1KIMGS = hd1k_cpm22.img hd1k_zsdos.img hd1k_nzcom.img \
|
||||
hd1k_cpm3.img hd1k_zpm3.img hd1k_ws4.img
|
||||
HD1KXIMGS = hd1k_z80asm.img hd1k_aztecc.img hd1k_hitechc.img \
|
||||
hd1k_bascomp.img hd1k_fortran.img hd1k_games.img \
|
||||
hd1k_tpascal.img hd1k_qpm.img
|
||||
# HD1KIMGS += hd1k_bp.img
|
||||
|
||||
HD512PREFIX =
|
||||
HD1KPREFIX = hd1k_prefix.dat
|
||||
|
||||
OBJECTS = $(FDIMGS)
|
||||
OBJECTS += $(HD512IMGS) hd512_combo.img hd512_dos65.img hd512_qpm.img$(HD512PREFIX)
|
||||
OBJECTS += $(HD1KIMGS) hd1k_combo.img hd1k_qpm.img $(HD1KPREFIX)
|
||||
OBJECTS += $(HD512IMGS) $(HD512XIMGS) hd512_combo.img $(HD512PREFIX)
|
||||
OBJECTS += $(HD1KIMGS) $(HD1KXIMGS) hd1k_combo.img $(HD1KPREFIX)
|
||||
|
||||
OTHERS = blank144 blankhd512 blankhd1k
|
||||
|
||||
@@ -61,7 +70,7 @@ blankhd512:
|
||||
@echo Making Blank HD512 of size $(HD512SIZE)k
|
||||
@LC_ALL=en_US.US-ASCII tr '\000' '\345' </dev/zero | dd of=$@ bs=1024 count=$(HD512SIZE)
|
||||
@hexdump $@
|
||||
|
||||
|
||||
blankhd1k:
|
||||
@echo Making Blank HD1K of size $(HD1KSIZE)k
|
||||
@LC_ALL=en_US.US-ASCII tr '\000' '\345' </dev/zero | dd of=$@ bs=1024 count=$(HD1KSIZE)
|
||||
@@ -122,7 +131,7 @@ clean::
|
||||
@rm -f *.ls
|
||||
|
||||
imgdiff:
|
||||
@for i in $(FDIMGS) $(HD512IMGS) $(HD1KIMGS) ; do \
|
||||
@for i in $(FDIMGS) $(HD512IMGS) $(HD512XIMGS) $(HD1KIMGS) $(HD1KXIMGS) ; do \
|
||||
echo $$i ; \
|
||||
if echo $$i | grep -q ^fd144_ ; then \
|
||||
fmt=wbw_fd144 ; \
|
||||
|
||||
26
Source/Images/d_aztecc/Readme.txt
Normal file
26
Source/Images/d_aztecc/Readme.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
===== Aztec C II compiler v1.06D =====
|
||||
|
||||
Aztec C is a discontinued programming language for a variety of platforms
|
||||
including MS-DOS, Apple II DOS 3.3 and PRoDOS, Commodore 64, Macintosh and
|
||||
Amiga. This disk contains the CP/M version of that compiler. A cross-compiler
|
||||
for MS-DOS or Windows XP is also available.
|
||||
|
||||
For full documentation, see https://www.aztecmuseum.ca/
|
||||
|
||||
The user manual is available in the Doc directory
|
||||
Aztec_C_1.06_User_Manual_Mar84.pdf
|
||||
|
||||
== License ==
|
||||
|
||||
I herewith grant you a non-exclusive conditional licence to use any and
|
||||
all of my work included with this compiler for whatever use you deem fit,
|
||||
provided you do not take credit for my work, and that you leave my
|
||||
copyright notices intact in all of it.
|
||||
|
||||
I believe everything I have written to be correct. Regardless, I, Bill
|
||||
Buckels, do not guarantee, or warranty, in whole or in part, any of this,
|
||||
and further do not offer support for any of this. All of this is provided
|
||||
as-is.
|
||||
|
||||
Bill Buckels
|
||||
bbuckels@mts.net
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user