Compare commits

...

67 Commits

Author SHA1 Message Date
Wayne Warthen
8b7e71049b FDC Detection Update & Enable ESP Driver on Duodyne
- Based on reports from Martin R, the FDC detection algorithm has been updated to try reading the FDC MSR register twice to try and get the desired value of 0x80.
- Dan Werner's ESP board for Duodyne is working well, so the default Duodyne config has been changed to automatically detect this board.
2023-08-25 10:25:07 -07:00
Wayne Warthen
50e190c755 Merge pull request #357 from fernandocarolo/dev
Fix references to the EPFDC driver in comments.
2023-08-23 14:44:47 -07:00
Wayne Warthen
d0eccf026b Enable INTRTC for Easy Z80 2023-08-23 14:28:20 -07:00
Fernando Carolo
39f796ce22 Fix references to the EPFDC driver in comments.
The EtchedPixels floppy disk controller is known by the identifier
'FDMODE_EPFDC', but the comments in the Config subdirectory have an
incorrect reference to 'EPWDC'. This fix updates the comments to use the
correct name.
2023-08-23 21:02:48 +01:00
Wayne Warthen
5610e79db4 Improve FD Driver Detection
Credit to Martin R for reporting that his FDC was not being detected.  The delay between FDC status register reads was increased in the detection routine to correct this.
2023-08-22 15:22:11 -07:00
Wayne Warthen
e782b78b16 Bump Version 2023-08-22 11:02:08 -07:00
Wayne Warthen
c0d3969244 Merge pull request #356 from b1ackmai1er/dev
Duo/MBC IM2 Hardware Timer support
2023-08-22 10:54:30 -07:00
b1ackmai1er
c62af3df33 MBC / DUO IM2 template
Template for setting up interrupts using the IM2 pin header on MBC and DUO platforms.
2023-08-22 13:16:42 +08:00
b1ackmai1er
6d736996fd Merge pull request #60 from wwarthen/dev
Support Serial Ports on ESP32 Board
2023-08-22 12:32:56 +08:00
Wayne Warthen
8bc801d0a4 Support Serial Ports on ESP32 Board 2023-08-21 17:40:34 -07:00
b1ackmai1er
2c6b7f7fb1 Update std.asm 2023-08-21 16:38:59 +08:00
b1ackmai1er
c3503f56d1 Update cfg_z80retro.asm 2023-08-21 16:29:27 +08:00
b1ackmai1er
d4c87996f0 Merge branch 'dev' of https://github.com/b1ackmai1er/RomWBW into dev 2023-08-21 16:25:29 +08:00
b1ackmai1er
9f5b3a8b1c Duo/MBC IM2 Hardware Timer support 2023-08-21 16:00:47 +08:00
Wayne Warthen
d06e1e2a5c Initial DUO Interrupt Handling 2023-08-20 15:03:34 -07:00
Wayne Warthen
22a0c52af3 Bump Version 2023-08-20 12:10:32 -07:00
Wayne Warthen
85aa7e89c2 Merge pull request #355 from b1ackmai1er/dev
Update DMAMON
2023-08-20 11:56:16 -07:00
b1ackmai1er
59d04f2446 Update std.asm 2023-08-20 18:18:55 +08:00
b1ackmai1er
9cc52e30d6 Update dmamon.asm 2023-08-20 18:16:19 +08:00
Wayne Warthen
e1a4e815dc Fix S100 Z180 Board LED Operation
- Status LED for S100 Z180 board was not enabled.  Credit to Jay Cotton for finding this.
2023-08-17 12:53:59 -07:00
Wayne Warthen
3c340d1ab9 Miscellaneous
- Minor documentation updates
- Improve ESP driver hardware detection
2023-08-17 11:26:19 -07:00
Wayne Warthen
138248fafc Merge pull request #354 from oholiab/xm_send_on_port
Add port option to XM's send mode
2023-08-16 19:40:40 -07:00
Matt Carroll
834eefb0bb Add port option to XM's send mode 2023-08-16 15:03:12 +01:00
Wayne Warthen
7835eb5deb Duodyne Work in Progress
- Updated DMA Driver
- Updated PCF I2C Driver
2023-08-02 13:21:52 -07:00
Wayne Warthen
d1a5c66147 Update DUO_std.asm 2023-07-28 15:43:31 -07:00
Wayne Warthen
b184ccfb78 Miscellaneous
- Updated S100 Monitor launch code to warn user if console will be directed to S100 bus vs. active on-board UART.
- Updated Duodyne early boot to add a delay to stabilize the boot process.  This is temporary and needs to be further investigated.
2023-07-28 15:19:54 -07:00
Wayne Warthen
4776b32cd3 Revise S100 Monitor Boot Option 2023-07-26 13:52:50 -07:00
Wayne Warthen
2bc5333f2b Add Boot Loader Menu Entry for S100 Z180 Monitor Invocation 2023-07-25 16:47:51 -07:00
Wayne Warthen
a5575456e2 Initial Support for Duodyne 2023-07-24 19:24:49 -07:00
Wayne Warthen
bdb8dc020b Update S100 Monitor to v0.34 2023-07-22 18:56:37 -07:00
Wayne Warthen
faaba69554 Improve sd.asm SD Card Compatibility
- PIO mode of sd.asm driver modified to setup shadow register (Issue #352).
- Relocated Z280 IVT to improve space utilization in HBIOS bank.
2023-07-17 14:52:14 -07:00
Wayne Warthen
0395bba4f5 Preliminary Support for ESP32 Nhyodyne Module
- Initial console support for Dan Werner's ESP32 Module
2023-07-10 13:16:24 -07:00
Wayne Warthen
14ac7a917b Upgrade s100mon to Latest
- Incorporated latest S100 Board Monitor code from John Monahan
2023-07-09 12:38:48 -07:00
Wayne Warthen
7a209d4053 S100 Monitor Update
The S100 Monitor will now allow launching RomWBW using the 'B' command.
2023-07-08 18:03:13 -07:00
Wayne Warthen
7e5b140c2f Update Makefile 2023-07-07 17:19:39 -07:00
Wayne Warthen
1f1952fb19 Add S100 and DUO Platforms 2023-07-07 16:18:01 -07:00
Wayne Warthen
229bdaa308 Support Z180 IM1
Added proper support for interrupt mode 1 on Z180.
2023-07-01 15:33:18 -07:00
Wayne Warthen
5c0894b8c1 Merge pull request #351 from jblang/dev
Add ColecoVision-compatible configuration
2023-07-01 11:56:15 -07:00
J.B. Langston
9cefcfb0bc Add ColecoVision-compatible configuration 2023-07-01 10:16:49 -05:00
Wayne Warthen
5d34a5c5d5 Miscellaneous
- Implement SHOWHEX functions in ICM and PKD drivers
- Improve DSKY common routines in HBIOS
- Include key CP/M 2.2 programs in NZCOM floppy image
2023-06-29 16:33:22 -07:00
Wayne Warthen
f8c800e527 Create DSKY Driver Framework
Added a new driver category for DSKY (Display/Keypad) devices.  Existing DSKY devices were converted into drivers ICM and PKD.  These devices were previously DSKY and DSKYNG.

This removes substantial code duplication and recovers significant space in romldr and dbgmon.
2023-06-28 15:06:53 -07:00
Wayne Warthen
b90e4d932a Update fd.asm
- Fix typo
2023-06-20 16:12:49 -07:00
Wayne Warthen
5457a7e7fd Improve OS Boot Drive Assignment
- Modified the Disk Device function call (DIODEVICE) to provide new attributes related to disk size and removability.
- Leveraged API change to allow handling drive assignment differently depending on ATAPI vs. ATA interface.
2023-06-20 15:52:34 -07:00
Wayne Warthen
8f5cc510ee Missing Files 2023-06-16 15:18:49 -07:00
Wayne Warthen
0475f5e853 Minor Cleanup
- Update FPLED port values for some configs
- Fix Linux/MacOS build for new disk images
2023-06-16 14:56:20 -07:00
Wayne Warthen
5b7dee0689 Merge pull request #348 from rprouse/issue/347
Adds programming and games disk images
2023-06-16 13:37:25 -07:00
Rob Prouse
6532f61747 Remove DELBR.COM 2023-06-16 10:51:20 -04:00
Rob Prouse
4bdae4eccb Remove USQ.COM 2023-06-16 10:47:55 -04:00
Rob Prouse
efb9840b86 Remove MBASIC85 2023-06-16 08:57:19 -04:00
Wayne Warthen
308a11cb32 Merge pull request #350 from wwarthen/master
Update pull_request_template.md
2023-06-15 12:51:55 -07:00
Wayne Warthen
3a7421de33 Update pull_request_template.md 2023-06-15 12:50:51 -07:00
Wayne Warthen
21a58397b6 Merge pull request #349 from wwarthen/master
Create pull_request_template.md
2023-06-15 12:16:59 -07:00
Wayne Warthen
9ae61806dc Create pull_request_template.md 2023-06-15 12:15:37 -07:00
Rob Prouse
87ac6f07f8 Fix spelling mistake, Tory -> Tony 2023-06-15 13:37:17 -04:00
Rob Prouse
1cd5313259 Remove all HLP files that I added 2023-06-15 13:28:44 -04:00
Rob Prouse
04c1ff04ac Remove CPM2.HLP 2023-06-15 13:19:55 -04:00
Rob Prouse
0e1a0afa2c Replace HI-TECH C with latest version from https://github.com/agn453/HI-TECH-Z80-C 2023-06-15 13:16:52 -04:00
Rob Prouse
5227bb68b5 Added documentation for the new disk images 2023-06-14 14:10:15 -04:00
Rob Prouse
fb68941768 Adds programming and games disk images 2023-06-14 12:45:41 -04:00
Wayne Warthen
8747ec8d02 Clean-up of ATAPI Support
- Improved media handling and error reporting.
2023-06-13 17:02:13 -07:00
Wayne Warthen
abd939625f Support ATAPI in IDE and PPIDE Drivers
- Support is limited to 512 byte sectors.  So, devices such as ATAPI Zip Drives will work.  CD-ROM devices will not because they use a larger sector size.
2023-06-12 15:56:36 -07:00
Wayne Warthen
69716abb25 Regen Doc 2023-06-08 12:34:42 -07:00
Wayne Warthen
1f526d440a Add WDATE Command, Final PPA/IMM/SYQ Driver Cleanup
- Added WDATE command courtesy Kevin Boone.  See https://github.com/kevinboone/wdate-cpm for more information.
- Final cleanup of PPA/IMM/SYQ drivers including CPU speed compensated timeouts.
2023-06-08 11:59:07 -07:00
Wayne Warthen
84374c86e6 Cleanup and Optimizations for PPA/IMM/SYQ Drivers 2023-06-06 16:21:56 -07:00
Wayne Warthen
45ea46b105 Small Bug Fix for PPA/IMM/SYQ Drivers
Credit to Mark Elkin for testing and finding this issue.
2023-06-03 14:27:33 -07:00
Wayne Warthen
1333d6a491 Functional PPA Driver 2023-06-02 15:30:10 -07:00
Wayne Warthen
b7e865dbf1 Preliminary SyQuest Driver 2023-06-01 16:13:26 -07:00
306 changed files with 94393 additions and 2688 deletions

11
.github/pull_request_template.md vendored Normal file
View 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
-->

View File

@@ -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)
-------------------------------------

Binary file not shown.

View File

@@ -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
-------------

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -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.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -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

View File

@@ -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.

View File

@@ -153,7 +153,8 @@ JP2 (/FAULT) shorted, JP3 (MINI): 2-3, JP4 (/DC/RDY): 2-3.
The RCBus Scott Baker WDC-based floppy module should be jumpered
for I/O base address 0x50 (SV1: 11-12), JP1 (/DACK): 1-2,
JP2 (TC): 2-3.
JP2 (TC): 2-3. Note that pin 1 of JPX jumpers is toward the bottom
of the board.
The RCBus FDC by Alan Cox (Etched Pixels) needs to be strapped
for base I/O address 0x48.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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



View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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).

View File

@@ -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

View File

@@ -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)

View File

@@ -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 |

View File

@@ -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.

View File

@@ -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

View File

@@ -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"
#

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,48 @@
;
;==================================================================================================
; 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
;
ESPENABLE .SET TRUE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)

View File

@@ -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]

View File

@@ -47,7 +47,7 @@ VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
;
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -58,7 +58,7 @@ AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LI
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -57,7 +57,7 @@ AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LI
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -56,7 +56,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -56,7 +56,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -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
;
@@ -62,7 +62,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -70,7 +70,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -41,6 +41,7 @@ WDOGIO .SET $6F ; WATCHDOG REGISTER ADR
;
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
;
CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT
CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER
@@ -69,7 +70,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View 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|EPFDC]
;
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)

View File

@@ -66,7 +66,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -61,7 +61,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -54,7 +54,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -75,7 +75,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS

View File

@@ -53,7 +53,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -57,7 +57,7 @@ AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LIN
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View 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

View File

@@ -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)
;

View File

@@ -45,7 +45,7 @@ VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
;
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
FDMODE .SET FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
FDMODE .SET FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -59,7 +59,7 @@ AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LI
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -60,7 +60,7 @@ AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LI
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -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)
;
@@ -52,7 +54,7 @@ AYMODE .SET AYMODE_LINC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -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)
;
@@ -52,7 +54,7 @@ AYMODE .SET AYMODE_LINC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
;
FDENABLE .SET TRUE ; 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]
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -35,7 +35,7 @@ UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
;
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
FDMODE .SET FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
FDMODE .SET FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)

View File

@@ -35,7 +35,7 @@ UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
;
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC]
;
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)

View File

@@ -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/$@ .

View File

@@ -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

View File

@@ -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
View File

@@ -0,0 +1,303 @@
;
;==================================================================================================
; ROMWBW 3.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 TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
;
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)
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)
;
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
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR DYNO
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR DYNO
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -126,7 +129,7 @@ UARTENABLE .EQU FALSE ; 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -243,6 +246,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 +261,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 +282,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION MASTER
; ROMWBW 3.X CONFIGURATION MASTER
;==================================================================================================
;
; THIS FILE IS *NOT* A REAL CONFIGURATION FILE. IT IS A MASTER TEMPLATE FILE
@@ -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
@@ -159,7 +165,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -302,6 +308,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 +329,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 +370,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR MBC
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR MBC
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -117,7 +123,7 @@ 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 TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -226,6 +232,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 +264,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,8 +294,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION FOR MARK IV
; ROMWBW 3.X CONFIGURATION FOR MARK IV
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -123,7 +129,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO ONBOARD UART
UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
UARTCAS .EQU TRUE ; UART: AUTO-DETECT ECB CASSETTE UART
UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
@@ -240,6 +246,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 +266,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 +291,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION FOR N8
; ROMWBW 3.X CONFIGURATION FOR N8
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -125,7 +131,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO ONBOARD UART
UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
UARTCAS .EQU TRUE ; UART: AUTO-DETECT ECB CASSETTE UART
UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
@@ -238,6 +244,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 +259,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 +284,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR RCBUS Z180 CPU
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z180 CPU
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -132,7 +135,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -249,6 +252,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 +265,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 +282,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 +308,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR RCBUS Z280 CPU
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z280 CPU
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -126,7 +129,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -253,6 +256,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 +269,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 +286,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 +312,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR RCBUS Z80
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z80
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -125,7 +128,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -247,6 +250,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 +280,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 +306,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION FOR RHYOPHYRE
; ROMWBW 3.X CONFIGURATION FOR RHYOPHYRE
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -123,7 +129,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -227,6 +233,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,12 +248,14 @@ 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)
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 RPH_PPI0 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI
PIOSBASE .EQU RPH_PPI0 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR
@@ -263,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_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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

308
Source/HBIOS/cfg_s100.asm Normal file
View File

@@ -0,0 +1,308 @@
;
;==================================================================================================
; ROMWBW 3.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/DUO 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
;
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
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR SBC
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR SBC
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -117,7 +123,7 @@ 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 TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO ONBOARD UART
UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
UARTCAS .EQU TRUE ; UART: AUTO-DETECT ECB CASSETTE UART
UARTMFP .EQU TRUE ; UART: AUTO-DETECT MF/PIC UART
@@ -225,6 +231,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 +247,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 +272,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR SC Z180 VARIANTS (SC126, SC130, ETC.)
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR SC Z180 VARIANTS (SC126, SC130, ETC.)
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -126,7 +129,7 @@ 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
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -243,6 +246,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 +276,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 +302,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR UNA
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR UNA
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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]
;

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR SIMPLE Z80 RETRO
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR SIMPLE Z80 RETRO
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -115,7 +121,7 @@ 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 TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -200,6 +206,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 +218,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 +233,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR ZETA V1
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR ZETA V1
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -171,6 +177,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 +189,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 +204,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)
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -1,6 +1,6 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR ZETA V2
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR ZETA V2
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
@@ -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
@@ -115,7 +121,7 @@ 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 TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO 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
@@ -182,6 +188,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 +200,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 +215,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)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC)

View File

@@ -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

View File

@@ -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
;

View File

@@ -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

View File

@@ -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

610
Source/HBIOS/esp.asm Normal file
View File

@@ -0,0 +1,610 @@
;
;==================================================================================================
; ESP32 DRIVER
;
; SUPPORTS DAN WERNER'S NHYODYNE (MBC) ESP32 MODULE
; https://github.com/danwerner21/nhyodyne/tree/main/Z80ESP
;==================================================================================================
;
; TODO:
; - CLEAR CONSOLE SCREEN AT INITIALIZATION
; - INITIALIZE BAUD/MODE OF SERIAL INTERFACES AT INITIALIZATION
;
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 X X 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_0_CMD_COUT .EQU 1 ; CHAR OUT
ESP_0_CMD_CSTR .EQU 2 ; STRING OUT
ESP_0_CMD_KIN .EQU 3 ; KEY IN
ESP_0_CMD_KST .EQU 4 ; KBD BUF STATUS
ESP_CMD_SBAUD .EQU 6 ; SET SERIAL BAUD RATE
ESP_CMD_SMODE .EQU 7 ; SET SERIAL LINE MODE
ESP_CMD_SOUT .EQU 8 ; SERIAL BYTE OUT
ESP_CMD_SIN .EQU 10 ; SERIAL BYTE IN
ESP_CMD_SST .EQU 11 ; SERIAL INPUT STATUS
ESP_CMD_DISC .EQU $FF ; DISCOVER
;
; ESP CONFIG TABLE ENTRY OFFSETS
;
ESP_CFG_DEV .EQU 0 ; DEVICE NUMBER
ESP_CFG_IO .EQU 1 ; ESP I/O PORT
ESP_CFG_ST .EQU 2 ; ESP STATUS PORT
ESP_CFG_RDYMSK .EQU 3 ; ESP READY MASK
ESP_CFG_BSYMSK .EQU 4 ; ESP BUSY MASK
;
; GLOBAL ESP INITIALIZATION
;
ESP_INIT:
;
CALL NEWLINE ; FORMATTING
PRTS("ESP: IO=0x$")
LD A,ESP_IOBASE
CALL PRTHEXBYTE
;
XOR A ; ZERO ACCUM
LD (ESP_PRES),A ; CLEAR MODULE PRESENCE BITS
;
; DETECT FIRST ESP32 MODULE
PRTS(" A=$")
LD IY,ESPSER0_CFG
CALL ESP_DETECT
JR Z,ESP_INIT1 ; FOUND
LD DE,ESP_STR_NOHW
CALL WRITESTR
JR ESP_INIT2
;
ESP_INIT1:
CALL ESP_PRTVER
LD A,(ESP_PRES)
SET 0,A
LD (ESP_PRES),A
;
ESP_INIT2:
; DETECT SECOND ESP32 MODULE
PRTS(" B=$")
LD IY,ESPSER1_CFG
CALL ESP_DETECT
JR Z,ESP_INIT3 ; FOUND
LD DE,ESP_STR_NOHW
CALL WRITESTR
JR ESP_INIT4
;
ESP_INIT3:
CALL ESP_PRTVER
LD A,(ESP_PRES)
SET 1,A
LD (ESP_PRES),A
;
ESP_INIT4:
; INITIALIZE FIRST MODULE CHILD DRIVERS
LD A,(ESP_PRES)
BIT 0,A
JR Z,ESP_INIT5
LD IY,ESPSER0_CFG
CALL ESPSER_INIT ; SERIAL INITIALIZATION
LD IY,ESPCON0_CFG
CALL ESPCON_INIT ; CONSOLE INITIALIZATION
;
ESP_INIT5:
; INITIALIZE SECOND MODULE CHILD DRIVERS
LD A,(ESP_PRES)
BIT 1,A
JR Z,ESP_INIT6
LD IY,ESPSER1_CFG
CALL ESPSER_INIT ; SERIAL INITIALIZATION
;
ESP_INIT6:
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
CP 'E'
RET NZ
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
CP 'S'
RET NZ
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
CP 'P'
RET
;
; 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 (IY+ESP_CFG_RDYMSK) ; IS THERE MORE DATA?
RET Z ; IF NOT, DONE
LD C,(IY+ESP_CFG_IO) ; ESP I/O PORT
IN A,(C) ; GET BYTE
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
AND (IY+ESP_CFG_RDYMSK) ; 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
LD C,(IY+ESP_CFG_IO) ; ESP I/O PORT
OUT (C),A ; SEND BYTE
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:
LD C,(IY+ESP_CFG_IO) ; ESP I/O PORT
IN A,(C) ; 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:
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; GET STATUS
AND (IY+ESP_CFG_BSYMSK) ; 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:
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; GET STATUS
XOR $FF ; INVERT SO 0=BUSY
AND (IY+ESP_CFG_BSYMSK) ; IS ESP BUSY?
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:
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; GET STATUS
XOR $FF ; INVERT SO 0=READY
AND (IY+ESP_CFG_RDYMSK) ; IS ESP READY TO OUTPUT
RET Z ; RETURN IF READY
DJNZ ESP_WTRDY1 ; ELSE LOOP
OR $FF ; SIGNAL TIMEOUT
RET ; AND RETURN
;
;
;
ESP_PRES .DB 0 ; MODULE PRESENCE BITS
;
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:
LD A,(ESPCON_DEVCNT) ; GET ESPCON PHYSICAL DEVICE COUNT
LD (IY+ESP_CFG_DEV),A ; SAVE PHYSICAL UNIT NUMBER
INC A ; UPDATE COUNT
LD (ESPCON_DEVCNT),A ; SAVE COUNT
;
; ADD OURSELVES TO CIO DISPATCH TABLE
;
LD BC,ESPCON_FNTBL ; BC := FUNCTION TABLE ADDRESS
PUSH IY ; COPY CONFIG ENTRY PTR
POP DE ; ... TO DE
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
;
; ANNOUNCE OURSLEVES
;
CALL NEWLINE ; FORMATTING
PRTS("ESPCON$") ; NAME
LD A,(IY+ESP_CFG_DEV) ; GET PHYSICAL UNIT NUMBER
CALL PRTDECB ; UNIT STILL IN A FROM ABOVE
CALL PC_COLON ; FORMATTING
;
; 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)$"
;
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_0_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_0_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_0_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:
XOR A ; ZERO ACCUM
INC A ; ACCUM := 1 TO SIGNAL 1 BUFFER POSITION
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,(IY+ESP_CFG_DEV) ; E := DEVICE NUM
LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+ESP_CFG_IO) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
; ESPCON CONFIGURATION
;
ESPCON_CFG:
ESPCON0_CFG:
.DB 0 ; DEVICE NUMBER (UPDATED DURING INIT)
.DB ESP_0_IO ; ESP DATA PORT
.DB ESP_STAT ; ESP STATUS PORT
.DB ESP_0_RDY ; ESP READY BIT MASK
.DB ESP_0_BUSY ; ESP BUSY BIT MASK
;
;
;
ESPCON_DEVCNT .DB 0 ; ESPCON DEVICES COUNT
;
;==================================================================================================
; ESP32 SERIAL DRIVER
;==================================================================================================
;
ESPSER_LINECFG .EQU SER_115200_8N1
;
ESPSER_CFG_LINE .EQU 5
;
;
;
ESPSER_INIT:
LD A,(ESPSER_DEVCNT) ; GET ESPSER PHYSICAL DEVICE COUNT
LD (IY+ESP_CFG_DEV),A ; SAVE PHYSICAL UNIT NUMBER
INC A ; UPDATE COUNT
LD (ESPSER_DEVCNT),A ; SAVE COUNT
;
; ADD OURSELVES TO CIO DISPATCH TABLE
;
LD BC,ESPSER_FNTBL ; BC := FUNCTION TABLE ADDRESS
PUSH IY ; COPY CONFIG ENTRY PTR
POP DE ; ... TO DE
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
;
; ANNOUNCE OURSLEVES
;
CALL NEWLINE ; FORMATTING
PRTS("ESPSER$") ; NAME
LD A,(IY+ESP_CFG_DEV) ; GET PHYSICAL UNIT NUMBER
CALL PRTDECB ; UNIT STILL IN A FROM ABOVE
CALL PC_COLON ; FORMATTING
;
PRTS(" MODE=$") ; FORMATTING
LD E,(IY+ESPSER_CFG_LINE+0) ; FIRST CONFIG BYTE TO E
LD D,(IY+ESPSER_CFG_LINE+1) ; SECOND CONFIG BYTE TO D
CALL PS_PRTSC0 ; PRINT CONFIG
;
; TODO: PRINT SERIAL CONFIG
;
XOR A ; SIGNAL SUCCESS
RET
;
; DRIVER FUNCTION TABLE
;
ESPSER_FNTBL:
.DW ESPSER_IN
.DW ESPSER_OUT
.DW ESPSER_IST
.DW ESPSER_OST
.DW ESPSER_INITDEV
.DW ESPSER_QUERY
.DW ESPSER_DEVICE
#IF (($ - ESPSER_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID ESPSER FUNCTION TABLE ***\n"
#ENDIF
;
;
;
ESPSER_IN:
CALL ESPSER_IST
JR Z,ESPSER_IN
LD A,ESP_CMD_SIN ; SERIAL 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
;
;
;
ESPSER_IST:
LD A,ESP_CMD_SST ; SERIAL STATUS
CALL ESP_OUT ; SEND CMD OPCODE
CALL ESP_INWAIT ; GET BUF SIZE
OR A ; SET FLAGS
RET Z ; AND DONE
OR A
RET
;
;
;
ESPSER_OUT:
PUSH DE
LD A,ESP_CMD_SOUT ; CHAR OUT OPCODE
CALL ESP_OUT
POP DE
LD A,E
CALL ESP_OUT ; SEND CHAR VALUE
XOR A ; SIGNAL SUCCESS
RET
;
;
;
ESPSER_OST:
XOR A ; ZERO ACCUM
INC A ; ACCUM := 1 TO SIGNAL 1 BUFFER POSITION
RET ; RETURN
;
;
;
ESPSER_INITDEV:
PUSH DE ; SAVE INCOMING CONFIG WORD
;
; XLATE NEW LINE MODE INTO C
LD A,E
AND %00111111 ; ISOLATE MODE BITS
LD C,0 ; 8N1 = 0
CP SER_DATA8 | SER_PARNONE | SER_STOP1
JR Z,ESPSER_INITDEV1 ; IF MATCH, DO IT
INC C ; 8E1 = 1
CP SER_DATA8 | SER_PAREVEN | SER_STOP1
JR Z,ESPSER_INITDEV1 ; IF MATCH, DO IT
INC C ; 8O1 = 2
CP SER_DATA8 | SER_PARODD | SER_STOP1
JR Z,ESPSER_INITDEV1 ; IF MATCH, DO IT
INC C ; 7N1 = 3
CP SER_DATA7 | SER_PARNONE | SER_STOP1
JR Z,ESPSER_INITDEV1 ; IF MATCH, DO IT
INC C ; 7E1 = 4
CP SER_DATA7 | SER_PAREVEN | SER_STOP1
JR Z,ESPSER_INITDEV1 ; IF MATCH, DO IT
INC C ; 7O1 = 5
CP SER_DATA7 | SER_PARODD | SER_STOP1
JR Z,ESPSER_INITDEV1 ; IF MATCH, DO IT
JR NZ,ESPSER_INITDEV_ERR ; ELSE FAIL
;
ESPSER_INITDEV1:
; DECODE NEW BAUD RATE INTO DE:HL
LD H,0
LD A,D
AND %00011111
LD L,A
LD DE,75
PUSH BC ; SAVE NEW LINE MODE
CALL DECODE ; DE:HL IS DECODED BAUD RATE
POP BC ; RESTORE NEW LINE MODE
JR NZ,ESPSER_INITDEV_ERR ; IF ERROR, FAIL
;
; PROGRAM NEW LINE MODE
PUSH BC
LD A,ESP_CMD_SMODE
CALL ESP_OUT
POP BC
LD A,C
;CALL PRTHEXBYTE
;CALL LDELAY
CALL ESP_OUT
;
; PROGRAM NEW BAUD RATE
LD A,ESP_CMD_SBAUD
CALL ESP_OUT
LD A,L
CALL ESP_OUT
LD A,H
CALL ESP_OUT
LD A,E
CALL ESP_OUT
LD A,D
CALL ESP_OUT
;
; SAVE NEW LINE CONFIG WORD
POP DE ; RESTORE CONFIG WORD
LD (IY+ESPSER_CFG_LINE+0),E ; FIRST CONFIG BYTE
LD (IY+ESPSER_CFG_LINE+1),D ; SECOND CONFIG BYTE
;
XOR A
RET
;
ESPSER_INITDEV_ERR:
POP DE ; THROW AWAY CONFIG WORD ON STACK
OR $FF
RET
;
;
;
ESPSER_QUERY:
LD E,(IY+ESPSER_CFG_LINE+0) ; FIRST CONFIG BYTE TO E
LD D,(IY+ESPSER_CFG_LINE+1) ; SECOND CONFIG BYTE TO D
LD HL,0
XOR A
RET
;
;
;
ESPSER_DEVICE:
LD D,CIODEV_ESPSER ; D := DEVICE TYPE
LD E,(IY+ESP_CFG_DEV) ; E := DEVICE NUM
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+ESP_CFG_IO) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
; ESPSER CONFIGURATION
;
ESPSER_CFG:
ESPSER0_CFG:
.DB 0 ; DEVICE NUMBER (UPDATED DURING INIT)
.DB ESP_0_IO ; ESP DATA PORT
.DB ESP_STAT ; ESP STATUS PORT
.DB ESP_0_RDY ; ESP READY BIT MASK
.DB ESP_0_BUSY ; ESP BUSY BIT MASK
.DW ESPSER_LINECFG ; LINE CONFIGURATION
;
ESPSER1_CFG:
.DB 0 ; DEVICE NUMBER (UPDATED DURING INIT)
.DB ESP_1_IO ; ESP DATA PORT
.DB ESP_STAT ; ESP STATUS PORT
.DB ESP_1_RDY ; ESP READY BIT MASK
.DB ESP_1_BUSY ; ESP BUSY BIT MASK
.DW ESPSER_LINECFG ; LINE CONFIGURATION
;
;
;
ESPSER_DEVCNT .DB 0 ; ESPSER DEVICES COUNT

View File

@@ -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
;
@@ -811,19 +811,27 @@ FD_DETECT:
IN A,(FDC_MSR) ; READ MSR
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
CP $80
JR Z,FD_DETECT1 ; $80 IS OK
CP $D0
JR Z,FD_DETECT1 ; $D0 IS OK
RET ; NOPE, ABORT WITH ZF=NZ
;
FD_DETECT1:
CALL DLY32 ; WAIT A BIT FOR FDC
IN A,(FDC_MSR) ; READ MSR AGAIN
CP $D0 ; SPECIAL CASE: DATA PENDING?
JR NZ,FD_DETECT1 ; NOPE, MOVE ALONG
IN A,(FDC_DATA) ; SWALLOW THE PENDING DATA
CALL DLY32 ; SETTLE
IN A,(FDC_MSR) ; ... AND REREAD THE STATUS
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
CP $80
RET ; $80 OK, ELSE NOT PRESENT
FD_DETECT1:
CP $80 ; WE EXPECT $80
RET Z ; IF SO, ALL DONE
; WE HAVE SEEN AN FDC THAT NEEDS A SECOND READ TO GET
; DESIRED VALUE, SO TRY ONE MORE TIME
CALL DLY32 ; WAIT A BIT
IN A,(FDC_MSR) ; ... AND REREAD THE STATUS
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
CP $80 ; CHECK FOR CORRECT VALUE
RET ; RETURN WITH ZF ACCORDING TO RESULT
;
; UNIT INITIALIZATION
;
@@ -1130,9 +1138,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 +1212,6 @@ FD_RUN1:
RET
FD_RUNCHK:
;;#IF (DSKYENABLE)
;; CALL FD_DSKY
;;#ENDIF
FD_RUNEXIT:
LD A,(FST_RC)
@@ -1221,23 +1228,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

View File

@@ -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,8 @@ CIODEV_UF .EQU $80
CIODEV_DUART .EQU $90
CIODEV_Z2U .EQU $A0
CIODEV_LPT .EQU $B0
CIODEV_ESPCON .EQU $C0
CIODEV_ESPSER .EQU $D0
;
; SUB TYPES OF CHAR DEVICES
;
@@ -323,6 +337,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 +348,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 +369,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!

View File

@@ -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
View 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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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

Some files were not shown because too many files have changed in this diff Show More