Compare commits

...

130 Commits

Author SHA1 Message Date
Wayne Warthen
73b0a3d941 User Defined SD Interface
Integrated code from Lanea to allow for an easy way to define a custom SD Card interface.  CSMODE_USR is not yet complete or tested!
2022-12-10 16:58:37 -08:00
Wayne Warthen
1839120e9d Update commit.yml 2022-12-06 15:03:01 -08:00
Wayne Warthen
8e110221a3 Update commit.yml 2022-12-06 13:51:45 -08:00
Wayne Warthen
8df7712633 Update commit.yml 2022-12-06 13:39:22 -08:00
Wayne Warthen
4f60cd4e57 Update commit.yml 2022-12-06 12:44:11 -08:00
Wayne Warthen
e83e26b6db Merge pull request #310 from b1ackmai1er/dev
ym2612 stub and minors
2022-12-06 11:49:29 -08:00
b1ackmai1er
4cd533117f ym2612 updates 2022-12-06 20:18:19 +08:00
b1ackmai1er
20cab617c7 Update SBC_std.asm 2022-12-06 13:40:36 +08:00
b1ackmai1er
323cfec931 Update hbios.asm 2022-12-06 13:38:11 +08:00
b1ackmai1er
ced09b2b95 Update ctc.asm 2022-12-06 13:15:29 +08:00
b1ackmai1er
93f8c67f9f Missing part 2022-12-03 07:10:51 +08:00
b1ackmai1er
999849c62b Alternate debug standardization method 2022-12-02 21:36:36 +08:00
b1ackmai1er
4babc51588 minors 2022-12-01 20:28:35 +08:00
b1ackmai1er
44ccc167ff Revert debug 2022-12-01 20:24:24 +08:00
b1ackmai1er
eae8295811 revert debug 2022-12-01 20:12:41 +08:00
b1ackmai1er
c76cb6737e revert debug_drv 2022-12-01 19:47:03 +08:00
b1ackmai1er
af723c5370 Update ym2612.asm 2022-11-26 21:40:22 +08:00
b1ackmai1er
57e4ed476c ym2612 fixups 2022-11-26 20:57:21 +08:00
b1ackmai1er
167c10fafc ctc debug updated 2022-11-26 19:43:40 +08:00
b1ackmai1er
6d1a9f5b7c Driver debug standardization 2022-11-26 16:03:09 +08:00
b1ackmai1er
bd0bb94c52 fixup incorrect commit 2022-11-26 14:34:24 +08:00
b1ackmai1er
e1a833b1a8 fixup incorrect commit 2022-11-26 14:32:33 +08:00
b1ackmai1er
7bd6df1e99 ym2612 config changes 2022-11-26 14:27:47 +08:00
b1ackmai1er
d3fcf8cea2 Update dsky.asm 2022-11-26 14:07:51 +08:00
b1ackmai1er
c7eb82e4dd Update hbios.asm 2022-11-26 14:04:45 +08:00
b1ackmai1er
20d07ded7b minor 2022-11-26 13:57:53 +08:00
b1ackmai1er
fc57ca4a68 ym2612 stub and hbios driver loading code cosmetics 2022-11-26 13:26:04 +08:00
b1ackmai1er
444c57fdfb Update ctc.asm 2022-11-12 22:13:46 +08:00
b1ackmai1er
ca61f340db Merge pull request #25 from wwarthen/dev
Dev
2022-11-09 17:32:56 +08:00
Wayne Warthen
601ac66762 Update commit.yml
Add also github-slug-action.
2022-11-08 16:29:11 -08:00
Wayne Warthen
c204110a6f Update commit.yml
Also explicit version for actions/upload-artifact.
2022-11-08 16:25:16 -08:00
Wayne Warthen
e8d0eedc2b Update commit.yml
Need to use explicit version for actions/checkout apparently.
2022-11-08 16:22:49 -08:00
Wayne Warthen
7b55b8ba86 Update commit.yml
Use "latest" version of all actions.
2022-11-08 16:16:19 -08:00
Wayne Warthen
069aa2b5be Merge pull request #306 from b1ackmai1er/dev
SYSCHK changes
2022-11-08 15:40:13 -08:00
b1ackmai1er
eeff03c7aa diag led fixups 2022-11-08 02:35:55 +08:00
b1ackmai1er
791fcea466 Different diag progress bar options 2022-11-07 20:56:09 +08:00
b1ackmai1er
f56c9007bb Update simrtc.asm 2022-11-07 17:32:04 +08:00
b1ackmai1er
360ba5ca95 Update Architecture.md 2022-11-06 20:25:49 +08:00
b1ackmai1er
7adf2038f1 Update hbios.asm 2022-11-06 20:21:53 +08:00
b1ackmai1er
a77744d8e6 Move diaglvl to config files 2022-11-06 19:57:02 +08:00
b1ackmai1er
dd47283fda minors 2022-11-06 18:24:32 +08:00
b1ackmai1er
5cc85e0444 Update Architecture.md
To reflect changes to syschk routine
2022-11-06 17:44:26 +08:00
b1ackmai1er
6e51070590 SYSCHK driver syncing 2022-11-06 11:18:05 +08:00
b1ackmai1er
a7853fe6d0 SYSCHK driver syncing 2022-11-06 11:12:14 +08:00
b1ackmai1er
590dcd0b4f SYSCHK driver syncing 2022-11-06 10:46:46 +08:00
b1ackmai1er
e25107309b SYSCHK changes
Display the error code of syschk enabled
2022-11-06 10:17:28 +08:00
b1ackmai1er
def29c7668 Merge pull request #24 from wwarthen/dev
Dev
2022-11-06 07:54:25 +08:00
Wayne Warthen
0c92c69ed8 Regenerate Documentation
Regenerated documentation to pick up Phil's updates.
2022-11-05 16:47:11 -07:00
Wayne Warthen
54ce18bb75 Merge pull request #305 from b1ackmai1er/dev
Notes about flash file system
2022-11-05 16:41:32 -07:00
b1ackmai1er
0ebde397fa Description of DIAG options 2022-11-05 21:45:33 +08:00
b1ackmai1er
8bf93619a0 Update Architecture.md
Errors and diagnostics - is this something you would be interested in including and expanding on?
2022-11-05 09:11:37 +08:00
b1ackmai1er
2727c02c56 Merge pull request #23 from wwarthen/dev
Merge pull request #304 from b1ackmai1er/dev
2022-11-05 08:08:58 +08:00
b1ackmai1er
d6ac15df40 Notes about flash file system 2022-11-05 08:04:38 +08:00
Wayne Warthen
c2a6c7fa22 Merge pull request #304 from b1ackmai1er/dev
Minors
2022-11-04 16:45:27 -07:00
b1ackmai1er
a742e5016e Attempt fix overlapping header 2022-11-05 07:42:05 +08:00
b1ackmai1er
248ef0e1b4 forth doc updates 2022-11-05 07:27:08 +08:00
b1ackmai1er
19101fda39 Minors 2022-11-05 07:17:31 +08:00
b1ackmai1er
9d1cfd4a22 Merge pull request #22 from wwarthen/dev
Sync DOS65
2022-11-02 22:19:22 +08:00
Wayne Warthen
cb20784685 Sync DOS65
- Update DOS65 disk image with latest binaries from Dan Werner
2022-09-13 19:36:45 -07:00
b1ackmai1er
66d524c096 Merge pull request #21 from wwarthen/dev
Dev
2022-07-27 17:20:26 +08:00
Wayne Warthen
aceef15481 Support DS1501 RTC
jpelletier provided a DS1501 RTC driver.  This commit integrates the driver into HBIOS.
2022-07-24 16:46:59 -07:00
Wayne Warthen
d4ca3de40f Update Makefile
When making ZCPR-D&J, also make the "demo" version.
2022-07-24 15:32:05 -07:00
Wayne Warthen
f0def03d0e ZCPR-D&J Fixes
Lars Nelson found a couple issues with ZCPR-D&J and provided an update:

- Buffer overflow
- Failure of default drive/user
2022-07-24 15:10:28 -07:00
b1ackmai1er
b2b070232d Merge pull request #20 from wwarthen/dev
Minor Tweaks to Build Process
2022-07-14 08:21:32 +08:00
Wayne Warthen
27935123cf Minor Tweaks to Build Process 2022-07-12 16:35:24 -07:00
b1ackmai1er
d40c6be60d Merge pull request #19 from wwarthen/dev
Dev
2022-07-11 20:59:47 +08:00
Wayne Warthen
aa93eb62f2 Refresh Documentation 2022-07-09 15:21:45 -07:00
Wayne Warthen
94c32c9fd0 Mostly Build Improvements
- ROMSIZE is now a configuration variable instead of a command line parameter.
- Added CP/M license information based on new email from Bryan Sparks.
2022-07-09 14:00:53 -07:00
Wayne Warthen
3b0951f6d5 MFPIC I/O Base Update
- Update MFPIC related I/O ports from $4x to $1x.  The default base address was changed to avoid conflicting with the default I/O range of $40-$7F on ECB Z180 boards.
2022-07-08 13:51:30 -07:00
Wayne Warthen
4385efb0f7 Unix Build Tweaks
Small stuff.  Mostly just gets the make diff mechanism working again.  Not sure if anyone actually uses it though.
2022-07-08 10:35:17 -07:00
Wayne Warthen
d241db5c11 Makefile Improvements
The clobber target has been removed and the clean target now does what most people would expect (actually cleans the entire build tree).
2022-07-06 16:39:03 -07:00
b1ackmai1er
d9a3a5086c Merge pull request #18 from wwarthen/dev
Dev
2022-07-04 19:39:16 +08:00
Wayne Warthen
0c61385df4 RomDsk Makefile Compatibility Improvement
Laszlo reported that the Unix make system was failing on openSuse Linux.  Turns out that it did not like the syntax in one line of the Makefile in the RomDsk directory.  This small change eliminates the incompatibility.
2022-07-03 15:21:30 -07:00
Wayne Warthen
cf142b3a91 Merge pull request #293 from b1ackmai1er/dev
vgmplay prelim ym2151 support + ym2612 mute
2022-07-02 19:27:25 -07:00
Wayne Warthen
9a503696c8 Improve CF Card Identification
Added additional CF Card signatures.  Credit to
Laszlo Szolnoki.
2022-07-02 19:25:06 -07:00
b1ackmai1er
bfdfd83f2a Update vgmplay.asm 2022-07-02 22:03:32 +08:00
b1ackmai1er
95f8c35c36 vgmplay prelim ym2151 support + ym2612 mute 2022-07-02 22:01:49 +08:00
b1ackmai1er
c065af147a Merge pull request #17 from wwarthen/dev
Dev
2022-06-28 21:39:45 +08:00
Wayne Warthen
11ea0c8c27 Add Speaker Beep
Added a generic routine in HBIOS to play a beep sound on the first available sound device.  Implemented the beep in the ANSI and TTY terminal emulators.
2022-06-27 15:35:54 -07:00
Wayne Warthen
dbea21fadd Correct Missing Config Entries for LPT Driver
Credit to Rodney Knapp for identifying this.
2022-06-27 13:11:27 -07:00
b1ackmai1er
4d5f2ab219 Merge pull request #16 from wwarthen/dev
Dev
2022-06-27 20:46:56 +08:00
Wayne Warthen
b82ff327cf CBIOS Fixes for UNA
Development in the dev branch on CBIOS had broken basic UNA functionality.  These fixes seem to correct the problems.  A full regression test of UNA has **not** yet been performed.
2022-06-26 16:54:46 -07:00
Wayne Warthen
44b17ccc3a Improve Centronics Compatibility
- Renamed Centronics driver from "CEN" to "LPT" based on input that LPT is the more recognized name for IBM compatible Centronics interfaces.
- Modified LPT hardware detection to be more generic (no longer depends on MBC-specific hardware implementation).
- Fix to CPU speed display for SBC v2 (004 and above) speed selection mechanism.
2022-06-26 14:25:32 -07:00
Wayne Warthen
b2e1294452 Correct AY38910 Off By 1 Octave Issue
I think this update corrects a long-standing issue in which the AY38910 driver played notes off by one octave.
2022-06-20 20:07:06 -07:00
b1ackmai1er
23a10343ca Merge pull request #15 from wwarthen/dev
Dev
2022-06-18 12:58:19 +08:00
Wayne Warthen
5805f13a62 Add Utilities to DOS65 Disk Image 2022-06-17 11:13:11 -07:00
Wayne Warthen
d39f0201f4 Bootable QP/M Disk
- Put a preconfigured image of QP/M on the system tracks of the QP/M disk images.
- Minor adjustment to dbgmon.asm for compatibility with UNA.
2022-06-17 10:25:48 -07:00
Wayne Warthen
94cf9a209e Merge pull request #290 from b1ackmai1er/dev
Build fixup (rtcdefval), recovery mode message, fixup for 3 sound devices
2022-06-17 10:21:29 -07:00
b1ackmai1er
691842c1bc Fix default 2022-06-17 21:49:08 +08:00
b1ackmai1er
eb255e7016 Add bank unset. Fix xmodem transfer bios call 2022-06-17 21:37:23 +08:00
b1ackmai1er
fe19472a2c Fixup restore of rtcval in ay-3-8910 driver 2022-06-17 18:39:18 +08:00
b1ackmai1er
526a1a5d33 Fixup restore of rtcval in ay-3-8910 driver 2022-06-17 18:35:46 +08:00
b1ackmai1er
719c993a60 MBC6502 support in dbgmon
Add an option in the monitor to switch to MBC6502. Excluded by default.
2022-06-17 18:30:35 +08:00
b1ackmai1er
70697a762c Merge pull request #14 from wwarthen/dev
Dev
2022-06-15 21:42:34 +08:00
Wayne Warthen
a62f5805ca Add BOOT_DELAY Configuration Variable
Some systems use terminal devices (Raspberry Pi, etc.) that take a few seconds to be ready to display console text.  The BOOT_DELAY setting can be used to introduce an arbitrary delay (in seconds) in the boot process just prior to text output.  This can be used to avoid missing some of the boot messages.
2022-06-09 15:36:36 -07:00
Wayne Warthen
87a6701464 Refresh DOS65 Disk Contents
- Updated DOS65 disk contents with latest binaries from Dan Werner.
2022-06-04 19:43:31 -07:00
Wayne Warthen
3f3a13bff6 Add QP/M Disk Image & Miscellaneous
- Minimal support for QP/M by adding a disk image.
- Disk image is not included in combo image, it must be added separately.
- Disk image boots into CP/M 2.2.  You must run QINSTALL to configure it and make the disk boot into QP/M.
- It is critical to review the ReadMe.txt file -- default QP/M configuration conflicts with RomWBW use of Page Zero.
- Added some stack space to SYSGEN.  It was failing when run with extra CBIOS debugging enabled.
- Cleanup of diskdefs file.
- Updated SIMH executable.
2022-06-04 19:21:35 -07:00
Wayne Warthen
982906757e Support QP/M TIMDAT Routine
QP/M is a CP/M 2.2 replacement for BDOS/CCP.  However, it adds it's own concept of date/time stamping.  Support for the QP/M date/time routine has been added.  You can configure QP/M to find the vector at address 0x0010.

A sidenote on QP/M.  By default, it uses 2 bytes at address 0x0008 to store the current drive/user.  This will conflict with RomWBW's use of RST 08 for API function calls.  I recommend using address 0x000E when configuring QP/M for the location of the current drive/user.
2022-06-02 13:05:42 -07:00
b1ackmai1er
c1412ee755 Fix boot failure with three sound devices 2022-06-01 19:19:56 +08:00
b1ackmai1er
e974a4a960 Recovery mode message, ay-3-8910 build fix 2022-05-31 21:06:02 +08:00
b1ackmai1er
0549cdcb36 Merge pull request #13 from wwarthen/dev
Dev
2022-05-17 21:02:36 +08:00
Wayne Warthen
0e32dd58fa Update version files
- Missed the version files in prior check-in
2022-05-14 12:54:56 -07:00
Wayne Warthen
69b54a000c Miscellaneous
- Bump version number
- Propagate config comments
2022-05-14 12:38:36 -07:00
Wayne Warthen
0d8b04ffa6 Merge pull request #289 from danwerner21/dev
Driver code for MBC VDP cards
2022-05-14 11:56:49 -07:00
danwerner21
9251f44dec Merge pull request #1 from danwerner21/dev_ddw_tms
Dev ddw tms
2022-05-14 12:09:46 -05:00
Dan Werner
fde0c285d2 MBC TMS updates 2022-05-14 12:06:49 -05:00
Dan Werner
44467f4725 MBC TMS updates 2022-05-14 11:23:55 -05:00
Dan Werner
0767a2ceff MBC TMS updates 2022-05-13 15:29:39 -05:00
Dan Werner
9b27118a3b MBC TMS updates 2022-05-13 13:25:04 -05:00
Wayne Warthen
b98ee17e14 Plumbing for uPD7220 GDC Driver 2022-04-04 11:54:34 -07:00
b1ackmai1er
c046f0365c Merge pull request #12 from wwarthen/dev
Dev
2022-04-04 20:35:39 +08:00
Wayne Warthen
16390d3159 Update ps2info.asm
- The prtchr routine was not saving and restoring the AF register.  This was fixed.
2022-04-02 16:35:21 -07:00
Wayne Warthen
1b34dc0941 Update ps2info.asm
- Updated PS2INFO to run tests individually via a menu.
2022-04-01 10:37:32 -07:00
Wayne Warthen
4a88e0bcae Improve Z180 Variant Handling
- There were several places that RomWBW was making incorrect assumptions about what the older Z180 CPUs could do.  These have been corrected.
2022-03-31 13:30:52 -07:00
Wayne Warthen
1e52a0b7f3 Add RPH Support to PS2INFO
- PS2INFO now provides a small startup menu to select either MBC or RHYOPHYRE (needs to be expanded to other platforms).
- Battery condition testing enabled by default in RHYOPHYRE.
- Z180 system timer enabled by default in RHYOPHYRE.
- Default ACR in RHYOPHYRE now turns on the status LED to indicate hardware is alive early in boot process.
2022-03-28 16:43:07 -07:00
Wayne Warthen
f6d0e7fea4 Initial RHYOPHYRE Support 2022-03-27 13:23:37 -07:00
b1ackmai1er
4af5d457eb Merge pull request #11 from wwarthen/dev
Dev
2022-03-27 17:47:27 +08:00
Wayne Warthen
e804326d54 Merge pull request #287 from danwerner21/dev
Update Centronics driver for Nhyodyne
2022-03-26 13:05:55 -07:00
Dan Werner
5b9e9ba6bf Update Centronics driver for Nhyodyne 2022-03-26 14:00:56 -05:00
Wayne Warthen
4f25cf1366 Miscellaneous
- Add hardware detect and initialization code to Centronics driver.
- Fix .gitignore to reflect subdirectory name changes under Tools/cpm/.
- Bump version number in TUNE to reflect Dan's changes.
- Detect Centronics hardware in MBC configuration by default.
2022-03-25 15:48:06 -07:00
Wayne Warthen
170ac7d9e8 Prep for Centronics Driver
- Added Centronics Driver shell
2022-03-25 11:15:36 -07:00
Wayne Warthen
eb208d735b Add License and Code of Conduct Files 2022-03-25 09:06:52 -07:00
Wayne Warthen
0efd08539e Fix Interrupt Management in CBIOS Initialization
There was a path through CBIOS initialization where interrupts were left disabled.  This only became apparent in the new "romless" configuration.
2022-03-23 14:52:49 -07:00
b1ackmai1er
291017f1a9 Merge pull request #10 from wwarthen/dev
Dev
2022-03-23 05:58:08 +08:00
Wayne Warthen
7549789248 Finalize ROM-Less Booting 2022-03-21 16:20:52 -07:00
b1ackmai1er
59c523c575 Merge pull request #9 from wwarthen/dev
Miscellaneous Cleanup
2022-01-04 18:56:11 +08:00
b1ackmai1er
4d3640caaa Merge pull request #8 from wwarthen/dev
Dev
2021-12-26 18:32:32 +08:00
b1ackmai1er
d02fe9d8df Merge pull request #7 from wwarthen/dev
Dev
2021-12-11 09:17:58 +08:00
b1ackmai1er
bc04d5ecb9 Merge pull request #6 from wwarthen/dev
ZPM3 Fixes
2021-12-09 16:45:36 +08:00
b1ackmai1er
5439a12fe8 Merge pull request #5 from wwarthen/dev
Dev
2021-12-09 00:35:01 +08:00
192 changed files with 6735 additions and 2223 deletions

View File

@@ -14,9 +14,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: rlespinasse/github-slug-action@v3.x
- uses: rlespinasse/github-slug-action@v4.4.0
- uses: actions/checkout@v2
- uses: actions/checkout@v3.1.0
- name: Build
run: |
@@ -24,7 +24,6 @@ jobs:
sudo apt-get install libncurses-dev
sudo apt-get install srecord
make dist
make clean
rm -rf .git*
- name: List Output
@@ -34,7 +33,7 @@ jobs:
find -type f -exec md5sum '{}' \;
- name: Upload Artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3.1.1
with:
name: RomWBW_Linux-${{env.GITHUB_REF_SLUG}}-${{env.GITHUB_SHA_SHORT}}
path: .
@@ -44,7 +43,7 @@ jobs:
zip -r RomWBW-SnapShot-Package.zip .
- name: Post SnapShot
uses: "marvinpinto/action-automatic-releases@latest"
uses: wwarthen/actions/packages/automatic-releases@built-packages
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "SnapShot"
@@ -54,17 +53,16 @@ jobs:
RomWBW-SnapShot-Package.zip
buildMacOS:
runs-on: macos-latest
runs-on: macOS-12
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3.1.0
- name: Build
run: |
export TZ='America/Los_Angeles'
brew install srecord
make dist
make clean
rm -rf .git*
- name: List Output
@@ -74,7 +72,7 @@ jobs:
find . -type f -exec md5 -r -- '{}' +;
- name: Upload Artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3.1.1
with:
name: RomWBW_MacOS
path: .

View File

@@ -27,7 +27,6 @@ jobs:
run: |
sudo apt-get install libncurses-dev
make dist
make clean
rm -rf .git*
- name: Upload Artifact

2
.gitignore vendored
View File

@@ -96,7 +96,7 @@ Tools/unix/zx/zx
!Source/ZRC/*.bin
!Source/ZZR/*.bin
!Source/ZZR/*.hex
!Tools/cpm/bin/*
!Tools/cpm/**
!Tools/unix/zx/*
!Tools/zx/*

View File

@@ -7,5 +7,5 @@ include $(TOOLS)/Makefile.inc
all::
mkdir -p Tunes
clobber::
clean::
@rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm

View File

@@ -3,5 +3,5 @@ MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.com)
include $(TOOLS)/Makefile.inc
clobber::
clean::
@rm -f *.com

View File

@@ -3,5 +3,5 @@ MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr)
include $(TOOLS)/Makefile.inc
clobber::
@rm -f *.spr
clean::
@rm -f *.spr *.com *.sys *.dat cpm3fix.pat readme.1st

View File

@@ -4,5 +4,5 @@ SUBDIRS = Apps CPM3 ZPM3
include $(TOOLS)/Makefile.inc
clobber::
@rm -f *.bin *.com *.img *.rom *.upd *.hex *.pdf *.log *.eeprom *.dat
clean::
@rm -f *.bin *.com *.img *.rom *.upd *.hex *.pdf *.log *.eeprom *.dat

View File

@@ -3,5 +3,5 @@ MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr)
include $(TOOLS)/Makefile.inc
clobber::
@rm -f *.spr
clean::
@rm -f *.spr *.com *.sys *.dat *.zpm

View File

@@ -3,4 +3,4 @@ setlocal
pushd Source && call Build %* || exit /b & popd
pause
if "%*" == "" pause

128
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
wwarthen@gmail.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -62,6 +62,9 @@ Version 3.1.1
- WBW: ZPMLDR and ZPM3 fixes, credit to Lars Nelson for finding ZPM3 source!
- DDW: Add support for MBC sound card
- WBW: Add support for "romless" booting
- L?N: Fixes for ZCPR-D&J (buffer overflow, default drive/user)
- J?P: Add support for DS1501 RTC
- LLS: Added a user defined mode for SD Card interfaces (not complete)
Version 3.1
-----------

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

661
LICENSE Normal file
View File

@@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.

View File

@@ -1,20 +1,19 @@
all:
$(MAKE) --directory Tools/unix
$(MAKE) --directory Tools
$(MAKE) --directory Source
clean:
$(MAKE) --directory Tools/unix clean
$(MAKE) --directory Tools clean
$(MAKE) --directory Source clean
$(MAKE) --directory Binary clean
rm -f make.log
clobber:
$(MAKE) --directory Tools/unix clobber
$(MAKE) --directory Source clobber
$(MAKE) --directory Binary clobber
rm -f typescript
clobber: clean
diff:
$(MAKE) --directory Source diff
dist:
$(MAKE) ROM_PLATFORM=dist
$(MAKE) ROM_PLATFORM=dist 2>&1 | tee make.log
$(MAKE) --directory Source clean
$(MAKE) --directory Tools clean

328
ReadMe.md
View File

@@ -3,23 +3,23 @@
## Z80/Z180 System Software
Version 3.1 Pre-release
28 Feb 2022
10 Dec 2022
Wayne Warthen <wwarthen@gmail.com>
### Download
- [RomWBW Distribution
Package](https://github.com/wwarthen/RomWBW/releases)
- [RomWBW Distribution
Package](https://github.com/wwarthen/RomWBW/releases)
### Related Pages
- [RomWBW Architecture
Document](https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=software:firmwareos:romwbw:romwbw_architecture.pdf)
- [RomWBW
Applications](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:apps)
- [RomWBW
Errata](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:errata)
- [RomWBW Architecture
Document](https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=software:firmwareos:romwbw:romwbw_architecture.pdf)
- [RomWBW
Applications](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:apps)
- [RomWBW
Errata](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:errata)
# Overview
@@ -27,28 +27,28 @@ RomWBW provides a complete software system for a wide variety of
hobbyist Z80/Z180 CPU-based systems produced by these developer
communities:
- [RetroBrew Computers](https://www.retrobrewcomputers.org)
- [RC2014](https://rc2014.co.uk)
- [retro-comp](https://groups.google.com/forum/#!forum/retro-comp)
- [RetroBrew Computers](https://www.retrobrewcomputers.org)
- [RC2014](https://rc2014.co.uk)
- [retro-comp](https://groups.google.com/forum/#!forum/retro-comp)
General features include:
- Banked memory services for several banking designs
- Disk drivers for RAM, ROM, Floppy, IDE, CF, and SD
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO
- Video drivers including TMS9918, SY6545, MOS8563, HD6445
- Real time clock drivers including DS1302, BQ4845
- Multiple OS support including CP/M 2.2, ZSDOS, CP/M 3, ZPM3
- Built-in VT-100 terminal emulation support
- Banked memory services for several banking designs
- Disk drivers for RAM, ROM, Floppy, IDE, CF, and SD
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO
- Video drivers including TMS9918, SY6545, MOS8563, HD6445
- Real time clock drivers including DS1302, BQ4845
- Multiple OS support including CP/M 2.2, ZSDOS, CP/M 3, ZPM3
- Built-in VT-100 terminal emulation support
RomWBW is distributed as both source code and pre-built ROM and disk
images. Some of the provided software can be launched directly from the
ROM firmware itself:
- System Monitor
- Operating Systems (CP/M 2.2, ZSDOS)
- ROM BASIC (Nascom BASIC and Tasty BASIC)
- ROM Forth
- System Monitor
- Operating Systems (CP/M 2.2, ZSDOS)
- ROM BASIC (Nascom BASIC and Tasty BASIC)
- ROM Forth
A dynamic disk drive letter assignment mechanism allows mapping
operating system drive letters to any available disk media.
@@ -209,10 +209,10 @@ modular approach to implementing device drivers and presenting devices
to the operating system. In general, all devices are classified as one
of the following:
- Disk (Hard Disk, CF Card, SD Card, RAM/ROM Disk, etc.)
- Character (Serial Ports, Parallel Ports, etc.)
- Video (Video Display/Keyboard Interfaces)
- RTC/NVRAM (Real Time Clock, Non-volatile RAM)
- Disk (Hard Disk, CF Card, SD Card, RAM/ROM Disk, etc.)
- Character (Serial Ports, Parallel Ports, etc.)
- Video (Video Display/Keyboard Interfaces)
- RTC/NVRAM (Real Time Clock, Non-volatile RAM)
HBIOS uses the concept of unit numbers to present a complex set of
hardware devices to the operating system. As an example, a typical
@@ -418,7 +418,7 @@ therefore, globally available.
Some custom applications do not fit on the ROM disk. They are found on
the disk image files or the individual files can be found in the
Binary\\Apps directory of the distribution.
Binary\Apps directory of the distribution.
| Application | Description |
|-------------|-------------------------------------------------------------|
@@ -452,6 +452,15 @@ well. However, you will find some files on the ROM disk that will work
with ZSDOS, but will not work on CP/M 2.2. For example, `LDDS`, which
loads the ZSDOS date/time stamper will only run on ZSDOS.
## Flash ROM Disks
The limitation of ROM disks being read only can be overcome on some
platforms with the appropriate selection of Flash ROM chip and system
configuration. In this case the flash-file system can be enabled which
will allow the ROM disk to be read and written to. Flash devices have a
limited write lifespan and continual usage will eventually wear out the
device. It is not suited for high usage applications.
## Disk Devices
While the RAM/ROM disks provide a functional system, they are not useful
@@ -738,17 +747,17 @@ most stable and you are less likely to encounter problems.
### Notes
- You can change media, but it must be done while at the OS command
prompt and you **must** warm start CP/M by pressing ctrl-c. This is
a CP/M 2.2 constraint and is well documented in the DRI manuals.
- You can change media, but it must be done while at the OS command
prompt and you **must** warm start CP/M by pressing ctrl-c. This is a
CP/M 2.2 constraint and is well documented in the DRI manuals.
- The original versions of DDT, DDTZ, and ZSID used the RST 38 vector
which conflicts with interrupt mode 1 use of this vector. The DDT,
DDTZ, and ZSID applications in RomWBW have been modified to use RST
30 to avoid this issue.
- The original versions of DDT, DDTZ, and ZSID used the RST 38 vector
which conflicts with interrupt mode 1 use of this vector. The DDT,
DDTZ, and ZSID applications in RomWBW have been modified to use RST 30
to avoid this issue.
- Z-System applications will not run under CP/M 2.2. For example, the
`LDDS` date stamper will not run.
- Z-System applications will not run under CP/M 2.2. For example, the
`LDDS` date stamper will not run.
## ZSDOS 1.1
@@ -766,14 +775,13 @@ Manual.pdf”).
### Notes
- Although most CP/M 2.2 applications will run under Z-System, some
may not work as expected. The best example is PIP which is not aware
of the ZSDOS paths and will fail in some scenarios (use `COPY`
instead).
- Although most CP/M 2.2 applications will run under Z-System, some may
not work as expected. The best example is PIP which is not aware of
the ZSDOS paths and will fail in some scenarios (use `COPY` instead).
- Although ZSDOS can recognize a media change in some cases, it will
not always work. You should only change media at a command prompt
and be sure to warm start the OS with a ctrl-c.
- Although ZSDOS can recognize a media change in some cases, it will not
always work. You should only change media at a command prompt and be
sure to warm start the OS with a ctrl-c.
## NZCOM Automatic Z-System
@@ -794,8 +802,8 @@ RomWBW Doc directory.
### Notes
- There is no `DIR` command, you must use `SDZ` instead. If you dont
like this, look into the ALIAS facility.
- There is no `DIR` command, you must use `SDZ` instead. If you dont
like this, look into the ALIAS facility.
## Digital Research CP/M 3
@@ -811,19 +819,18 @@ tracks. `CPMLDR.SYS` chain loads `CPM3.SYS`.
### Notes
- The `DATE` command cannot yet be used to **set** the RTC. The RTC is
used to read the current date/time for file stamping, etc. You can
use the `RTC` app to set the RTC clock.
- The `DATE` command cannot yet be used to **set** the RTC. The RTC is
used to read the current date/time for file stamping, etc. You can use
the `RTC` app to set the RTC clock.
- The `COPYSYS` command described in the DRI CP/M 3 documentation is
not provided with RomWBW. The RomWBW `SYSCOPY` command is used
instead.
- The `COPYSYS` command described in the DRI CP/M 3 documentation is not
provided with RomWBW. The RomWBW `SYSCOPY` command is used instead.
- Although CP/M 3 is generally able to run CP/M 2.2 programs, this is
not universally true. This is especially true of the utility
programs included with the operating system. For example, the
`SUBMIT` program of CP/M 3 is completely different from the `SUBMIT`
program of CP/M 2.2.
- Although CP/M 3 is generally able to run CP/M 2.2 programs, this is
not universally true. This is especially true of the utility programs
included with the operating system. For example, the `SUBMIT` program
of CP/M 3 is completely different from the `SUBMIT` program of CP/M
2.2.
## Simeon Crans ZPM3
@@ -835,14 +842,14 @@ tracks of the disk.
### Notes
- `ZPMLDR` is equivalent to CPMLDR. Both are included. Previously,
ZPMLDR had issues that prevented it from properly booting RomWBW
ZPM3. However, those issues have been resolved.
- `ZPMLDR` is equivalent to CPMLDR. Both are included. Previously,
ZPMLDR had issues that prevented it from properly booting RomWBW ZPM3.
However, those issues have been resolved.
- The ZPM operating system is contained in the file called CPM3.SYS
which is confusing, but this is as intended by the ZPM3
distribution. I believe it was done this way to make it easier for
users to transition from CP/M 3 to ZPM3.
- The ZPM operating system is contained in the file called CPM3.SYS
which is confusing, but this is as intended by the ZPM3 distribution.
I believe it was done this way to make it easier for users to
transition from CP/M 3 to ZPM3.
## FreeRTOS
@@ -924,7 +931,7 @@ documents.
Note that the build scripts for RomWBW create the default disk images
supplied with RomWBW. It is relatively easy to customize the contents of
the disk images that are part of RomWBW. This is described in more
detail in the Source\\Images directory of the distribution.
detail in the Source\Images directory of the distribution.
## FAT Filesystem Transfers
@@ -945,7 +952,7 @@ however. Longer filenames will show up as a truncated version.
The `FAT` application is not on your ROM disk because it is too large to
fit. You will find it on all of the pre-built disk images as well as in
the Binary\\Apps directory of the distribution.
the Binary\Apps directory of the distribution.
For advanced users, it is possible to create a hybrid disk that contains
CP/M slices at the beginning and a FAT filesystem after. Such a hybrid
@@ -953,7 +960,7 @@ disk can be used to boot an operating system and still have access to
FAT files on the FAT portion of the disk. David Reese has prepared a
document describing how to do this. It is called
“SC126_How-To_No_2\_Preparing_an_SD_Card_for_Use_with_SC126_Rev_1-5.pdf”
and can be found in the Doc\\Contrib directory of the distribution.
and can be found in the Doc\Contrib directory of the distribution.
# Startup Command Processing
@@ -1027,10 +1034,10 @@ images.
While John is likely to enhance UNA over time, there are currently a few
things that UNA does not support:
- Floppy Drives
- Terminal Emulation
- Zeta 1, N8, RC2014, Easy Z80, and Dyno Systems
- Some older support boards
- Floppy Drives
- Terminal Emulation
- Zeta 1, N8, RC2014, Easy Z80, and Dyno Systems
- Some older support boards
The UNA version embedded in RomWBW is the latest production release of
UNA. RomWBW will be updated with Johns upcoming UNA release with
@@ -1136,100 +1143,96 @@ If the disk is bootable, you need to update the system image on the disk
using the procedure described below corresponsing to the operating
system on your disk.
- **CP/M 2.2**
- **CP/M 2.2**
Boot to CP/M 2.2 from ROM, then use `SYSCOPY` to update the system
image on **all** CP/M 2.2 boot disks/slices. The CP/M 2.2 system
image is called CPM.SYS and is found on the ROM disk. For example:
Boot to CP/M 2.2 from ROM, then use `SYSCOPY` to update the system
image on **all** CP/M 2.2 boot disks/slices. The CP/M 2.2 system image
is called CPM.SYS and is found on the ROM disk. For example:
`B>SYSCOPY C:=CPM.SYS`
`B>SYSCOPY C:=CPM.SYS`
- **ZSDOS**
- **ZSDOS**
Boot to Z-System from ROM, then use `SYSCOPY` to update the system
image on **all** ZSDOS boot disks/slices. The ZSDOS system image is
called ZSYS.SYS and is found on the ROM disk. For example:
Boot to Z-System from ROM, then use `SYSCOPY` to update the system
image on **all** ZSDOS boot disks/slices. The ZSDOS system image is
called ZSYS.SYS and is found on the ROM disk. For example:
`B>SYSCOPY C:=ZSYS.SYS`
`B>SYSCOPY C:=ZSYS.SYS`
- **NZCOM**
- **NZCOM**
NZCOM runs on top of either CP/M 2.2 or ZSDOS. By default, the
RomWBW disk image for NZCOM uses ZSDOS. Follow the corresponding
procedure above to update the system image on the NZCOM boot
disks/slices.
NZCOM runs on top of either CP/M 2.2 or ZSDOS. By default, the RomWBW
disk image for NZCOM uses ZSDOS. Follow the corresponding procedure
above to update the system image on the NZCOM boot disks/slices.
- **CP/M 3**
- **CP/M 3**
CP/M 3 uses a multi-step boot process involving multiple files. The
CP/M 3 boot files are not included on the ROM disk due to space
constraints. You will need to transfer the files to your system from
the RomWBW distribution directory Binary\\CPM3.
CP/M 3 uses a multi-step boot process involving multiple files. The
CP/M 3 boot files are not included on the ROM disk due to space
constraints. You will need to transfer the files to your system from
the RomWBW distribution directory Binary\CPM3.
After this is done, you will need to use `SYSCOPY` to place the CP/M
3 loader image on the boot tracks of all CP/M 3 boot disks/slices.
The loader image is called `CPMLDR.SYS`. You must then copy (at a
minimum) `CPM3.SYS` and `CCP.COM` onto the disk/slice. Assuming you
copied the CP/M 3 boot files onto your RAM disk at A:, you would
use:
After this is done, you will need to use `SYSCOPY` to place the CP/M 3
loader image on the boot tracks of all CP/M 3 boot disks/slices. The
loader image is called `CPMLDR.SYS`. You must then copy (at a minimum)
`CPM3.SYS` and `CCP.COM` onto the disk/slice. Assuming you copied the
CP/M 3 boot files onto your RAM disk at A:, you would use:
A>B:SYSCOPY C:=CPMLDR.SYS
A>B:COPY CPM3.SYS C:
A>B:COPY CCP.COM C:
A>B:SYSCOPY C:=CPMLDR.SYS
A>B:COPY CPM3.SYS C:
A>B:COPY CCP.COM C:
- **ZPM3**
- **ZPM3**
ZPM3 uses a multi-step boot process involving multiple files. The
ZPM3 boot files are not included on the ROM disk due to space
constraints. You will need to transfer the files to your system from
the RomWBW distribution directory Binary\\ZPM3.
ZPM3 uses a multi-step boot process involving multiple files. The ZPM3
boot files are not included on the ROM disk due to space constraints.
You will need to transfer the files to your system from the RomWBW
distribution directory Binary\ZPM3.
After this is done, you will need to use `SYSCOPY` to place the ZPM3
loader image on the boot tracks of all ZPM3 boot disks/slices. The
loader image is called `ZPMLDR.SYS`. You must then copy (at a
minimum) `CPM3.SYS`, `ZCCP.COM`, `ZINSTAL.ZPM`, and `STARTZPM.COM`
onto the disk/slice. Assuming you copied the ZPM3 boot files onto
your RAM disk at A:, you would use:
After this is done, you will need to use `SYSCOPY` to place the ZPM3
loader image on the boot tracks of all ZPM3 boot disks/slices. The
loader image is called `ZPMLDR.SYS`. You must then copy (at a minimum)
`CPM3.SYS`, `ZCCP.COM`, `ZINSTAL.ZPM`, and `STARTZPM.COM` onto the
disk/slice. Assuming you copied the ZPM3 boot files onto your RAM disk
at A:, you would use:
A>B:SYSCOPY C:=ZPMLDR.SYS
A>B:COPY CPM3.SYS C:
A>B:COPY ZCCP.COM C:
A>B:COPY ZINSTAL.ZPM C:
A>B:COPY STARTZPM.COM C:
A>B:SYSCOPY C:=ZPMLDR.SYS
A>B:COPY CPM3.SYS C:
A>B:COPY ZCCP.COM C:
A>B:COPY ZINSTAL.ZPM C:
A>B:COPY STARTZPM.COM C:
You may be wondering if the reference to `CPM3.SYS` is a typo. It is
not. The ZPM3 main system code file is called `CPM3.SYS` which is
the same name as CP/M 3 uses, but the file contents are not the
same.
You may be wondering if the reference to `CPM3.SYS` is a typo. It is
not. The ZPM3 main system code file is called `CPM3.SYS` which is the
same name as CP/M 3 uses, but the file contents are not the same.
Finally, if you have copies of any of the RomWBW custom applications on
your hard disk, you need to update them with the latest copies. The
following applications are found on your ROM disk. Use COPY to copy them
over any older versions of the app on your disk:
- ASSIGN.COM
- SYSCOPY.COM
- MODE.COM
- FDU.COM (was FDTST.COM)
- FORMAT.COM
- XM.COM
- FLASH.COM
- FDISK80.COM
- TALK.COM
- RTC.COM
- TIMER.COM
- INTTEST.COM
- ASSIGN.COM
- SYSCOPY.COM
- MODE.COM
- FDU.COM (was FDTST.COM)
- FORMAT.COM
- XM.COM
- FLASH.COM
- FDISK80.COM
- TALK.COM
- RTC.COM
- TIMER.COM
- INTTEST.COM
For example: `B>COPY ASSIGN.COM C:`
Some RomWBW custom applications are too large to fit on the ROM disk. If
you are using any of these you will need to transfer them to your system
and then update all copies. These applications are found in the
Binary\\Apps directory of the distribution and in all of the disk
images.
Binary\Apps directory of the distribution and in all of the disk images.
- FAT.COM
- TUNE.COM
- FAT.COM
- TUNE.COM
## System Update
@@ -1243,11 +1246,11 @@ and CP/M system.
A System Update may be more favorable than a System Upgrade in cases
such as:
- Overwriting of the ROM drive is not desired.
- Space is unavailable to hold a full ROMWBW ROM.
- To mimimize time taken to transfer and flash a full ROM.
- Configuration changes are only minor and do not impact disk
applications.
- Overwriting of the ROM drive is not desired.
- Space is unavailable to hold a full ROMWBW ROM.
- To mimimize time taken to transfer and flash a full ROM.
- Configuration changes are only minor and do not impact disk
applications.
The ROMWBW build process generates a system upgrade file along with the
normal ROM image and can be identified by the extension “.upd”. It will
@@ -1298,22 +1301,22 @@ continue the maintenance of these applications and they have become
unusable due to changes within RomWBW. As of RomWBW 2.6, these
applications are no longer provided.
- David Giles contributed support for the CSIO support in the SD Card
driver.
- Ed Brindley contributed some of the code that supports the RC2014
platform.
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the
AY-3-8910 sound driver as well as a long list of general code
enhancements.
- Phillip Stevens contributed support for FreeRTOS.
- Curt Mayer contributed the original Linux / MacOS build process.
- UNA BIOS and FDISK80 are the products of John Coffman.
- FLASH4 is a product of Will Sowerbutts.
- CLRDIR is a product of Max Scane.
- Tasty Basic is a product of Dimitri Theulings.
- Dean Netherton contributed the sound driver interface and the
SN76489 sound driver.
- The RomWBW Disk Catalog document was produced by Mykl Orders.
- David Giles contributed support for the CSIO support in the SD Card
driver.
- Ed Brindley contributed some of the code that supports the RC2014
platform.
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the
AY-3-8910 sound driver as well as a long list of general code
enhancements.
- Phillip Stevens contributed support for FreeRTOS.
- Curt Mayer contributed the original Linux / MacOS build process.
- UNA BIOS and FDISK80 are the products of John Coffman.
- FLASH4 is a product of Will Sowerbutts.
- CLRDIR is a product of Max Scane.
- Tasty Basic is a product of Dimitri Theulings.
- Dean Netherton contributed the sound driver interface and the SN76489
sound driver.
- The RomWBW Disk Catalog document was produced by Mykl Orders.
Contributions of all kinds to RomWBW are very welcome.
@@ -1364,12 +1367,11 @@ All contributions to RomWBW are subject to this license.
The best way to get assistance with RomWBW or any aspect of the
RetroBrew Computers projects is via the community forums:
- [RetroBrew Computers
Forum](https://www.retrobrewcomputers.org/forum/)
- [RC2014 Google
Group](https://groups.google.com/forum/#!forum/rc2014-z80)
- [retro-comp Google
Group](https://groups.google.com/forum/#!forum/retro-comp)
- [RetroBrew Computers Forum](https://www.retrobrewcomputers.org/forum/)
- [RC2014 Google
Group](https://groups.google.com/forum/#!forum/rc2014-z80)
- [retro-comp Google
Group](https://groups.google.com/forum/#!forum/retro-comp)
Submission of issues and bugs are welcome at the [RomWBW GitHub
Repository](https://github.com/wwarthen/RomWBW).

View File

@@ -1,6 +1,6 @@
RomWBW Getting Started
Wayne Warthen (mailto:wwarthen@gmail.com)
28 Feb 2022
10 Dec 2022
@@ -17,7 +17,7 @@ RomWBW
Z80/Z180 System Software
Version 3.1 Pre-release
28 Feb 2022
10 Dec 2022
Wayne Warthen wwarthen@gmail.com
@@ -213,15 +213,23 @@ disk devices.
The following ROM applications are available at the boot loader prompt:
Application
-------------- --------------------------------------------------------
Monitor Z80 system debug monitor w/ Intel Hex loader
Forth Brad Rodriguezs ANSI compatible Forth language
Basic Nascom 8K BASIC language
Tasty BASIC Dimitri Theulings Tiny BASIC implementation
Play A simple video game (requires ANSI terminal emulation)
Network Boot Boot through Wiznet MT011 device
Flash Update Upload and flash a new ROMWBW image using xmodem
--------------------------------------------------------------------------
Application
------------- ------------------------------------------------------------
Monitor Z80 system debug monitor w/ Intel Hex loader
Forth Brad Rodriguezs ANSI compatible Forth language
Basic Nascom 8K BASIC language
Tasty BASIC Dimitri Theulings Tiny BASIC implementation
Play A simple video game (requires ANSI terminal emulation)
Network Boot Boot through Wiznet MT011 device
Flash Update Upload and flash a new ROMWBW image using xmodem
--------------------------------------------------------------------------
In general, the command to exit these applications and restart the
system is BYE. The exceptions are the Monitor which uses B and Play
@@ -430,11 +438,11 @@ the OS variants included with RomWBW.
The following custom applications are found on the ROM disk and are,
therefore, globally available.
-----------------------------------------------------------------------------
----------------------------------------------------------------------------
Application Description
------------- ---------------------------------------------------------------
ASSIGN Add, change, and delete drive letter assignments. Use ASSIGN /?
for usage instructions.
------------- --------------------------------------------------------------
ASSIGN Add, change, and delete drive letter assignments. Use ASSIGN
/? for usage instructions.
SYSCOPY Copy system image to a device to make it bootable. Use SYSCOPY
with no parms for usage instructions.
@@ -446,8 +454,8 @@ therefore, globally available.
FORMAT Will someday be a command line tool to format floppy disks.
Currently does nothing!
XM XModem file transfer program adapted to hardware. Automatically
uses primary serial port on system.
XM XModem file transfer program adapted to hardware.
Automatically uses primary serial port on system.
FLASH Will Sowerbutts in-situ ROM programming utility.
@@ -461,17 +469,21 @@ therefore, globally available.
TIMER Display value of running periodic system timer.
CPUSPD Change the running CPU speed and wait states of the system.
-----------------------------------------------------------------------------
----------------------------------------------------------------------------
Some custom applications do not fit on the ROM disk. They are found on
the disk image files or the individual files can be found in the
Binary\Apps directory of the distribution.
--------------------------------------------------------------------------
Application Description
------------- -------------------------------------------------------------
------------- ------------------------------------------------------------
TUNE Play .PT2, .PT3, .MYM audio files.
FAT Access MS-DOS FAT filesystems from RomWBW (based on FatFs).
INTTEST Test interrupt vector hooking.
--------------------------------------------------------------------------
Additional documentation on all of these applications can be found in
“RomWBW Applications.pdf” in the Doc directory of the distribution.
@@ -499,6 +511,15 @@ well. However, you will find some files on the ROM disk that will work
with ZSDOS, but will not work on CP/M 2.2. For example, LDDS, which
loads the ZSDOS date/time stamper will only run on ZSDOS.
Flash ROM Disks
The limitation of ROM disks being read only can be overcome on some
platforms with the appropriate selection of Flash ROM chip and system
configuration. In this case the flash-file system can be enabled which
will allow the ROM disk to be read and written to. Flash devices have a
limited write lifespan and continual usage will eventually wear out the
device. It is not suited for high usage applications.
Disk Devices
While the RAM/ROM disks provide a functional system, they are not useful
@@ -667,14 +688,21 @@ The following table shows the disk image files available. Note that the
images in the “Hard” column are fine for use on CF Cards, SD Cards, as
well as real spinning hard disks.
Floppy Hard Description
-------------- -------------- ------------------------------
fd_cpm22.img hd_cpm22.img DRI CP/M 2.2 boot disk
fd_zsdos.img hd_zsdos.img ZSDOS 1.1 boot disk
fd_nzcom.img hd_nzcom.img NZCOM boot disk
fd_cpm3.img hd_cpm3.img DRI CP/M 3 boot disk
fd_zpm3.img hd_zpm3.img ZPM3 boot disk
fd_ws4.img hd_ws4.img WordStar v4 application disk
-----------------------------------------------------------------------
Floppy Hard Description
--------------- --------------- ---------------------------------------
fd_cpm22.img hd_cpm22.img DRI CP/M 2.2 boot disk
fd_zsdos.img hd_zsdos.img ZSDOS 1.1 boot disk
fd_nzcom.img hd_nzcom.img NZCOM boot disk
fd_cpm3.img hd_cpm3.img DRI CP/M 3 boot disk
fd_zpm3.img hd_zpm3.img ZPM3 boot disk
fd_ws4.img hd_ws4.img WordStar v4 application disk
-----------------------------------------------------------------------
In addition to the disk images above, there is also a special hard disk
image called hd_combo.img. This image contains all of the images above,
@@ -685,14 +713,21 @@ system options.
This is the layout of the hd_combo disk image:
Slice Description
--------- ------------------------------
Slice 0 DRI CP/M 2.2 boot disk
Slice 1 ZSDOS 1.1 boot disk
Slice 2 NZCOM boot disk
Slice 3 DRI CP/M 3 boot disk
Slice 4 ZPM3 boot disk
Slice 5 WordStar v4 application disk
------------------------------------------------------------------------
Slice Description
------- ----------------------------------------------------------------
Slice 0 DRI CP/M 2.2 boot disk
Slice 1 ZSDOS 1.1 boot disk
Slice 2 NZCOM boot disk
Slice 3 DRI CP/M 3 boot disk
Slice 4 ZPM3 boot disk
Slice 5 WordStar v4 application disk
------------------------------------------------------------------------
Note that unlike the ROM firmware, you do not need to choose a disk
image specific to your hardware. Because the RomWBW firmware provides a

View File

@@ -34,22 +34,19 @@ By default, this will generate all of the standard configurations of
RomWBW for all platforms. If you just want to build the ROM for a
specific platform and configuration you can use
make ROM_PLATFORM=<platform> ROM_CONFIG=<config> [ROMSIZE=<size>]
make ROM_PLATFORM=<platform> ROM_CONFIG=<config>
where <platform> is one of the supported platforms such as SBC, RCZ80,
etc. and <config> is a configuration of that platform. A ROM size may
optionally be specified and must be one of 128, 256, 512, or 1024. It
defaults to 512. For example, to build the "126" configuration of
the "SCZ180" platform:
etc. and <config> is a configuration of that platform. For example,
to build the "126" configuration of the "SCZ180" platform:
make ROM_PLATFORM=SCZ180 ROM_CONFIG=126
Please be aware that the make-based build does have a few deficiencies.
First and most important, the Makefiles do not handle reruns very well.
To ensure a full buld, use "make clobber" from the top level directory
before running the actual build. For those used to using "make clean",
you can do that but it is not as thorough as "make clobber".
To ensure a full buld, use "make clean" from the top level directory
before running the actual build.
Second, there are some build failures that will not stop the make
process. Most of this is because real CP/M 2.2 tools are used in
@@ -57,7 +54,7 @@ places and CP/M 2.2 does not allow programs to return a result code.
Third, not all dependencies are properly handled. So, changes to some
files will not cause things to rebuild as appropriate. In general, I
recommend doing a "make clobber" before running "make" to ensure that
recommend doing a "make clean" before running "make" to ensure that
everything is fully rebuilt.
For macOS users, you may encounter a failure reading or writing files.
@@ -78,7 +75,7 @@ running. To disable this feature:
DISCLAIMER: You do this at your own risk. I highly recommend that you
return the settings back to normal immediately after doing a build.
Heavy use is made of make's include facility and pattern rules. the
Heavy use is made of make's include facility and pattern rules. The
master rule set is in Tools/Makefile.inc. Changes here will affect
almost every Makefile, and where exceptions are needed, the overrides
are applied in the lower Makefiles.
@@ -102,10 +99,10 @@ Credit:
hacked to do case-insensitivity. These are not marked, and are
not extensive.
zx is from the distributed version, and also has local hacks
zxcc is from the distributed version, and also has local hacks
for case insensitivity.
Both zx and cpmtools ship with an overly complicated makefile
Both zxcc and cpmtools ship with an overly complicated makefile
generation system and this is ignored.
This whole Linux build framework is the work of Curt Mayer,

View File

@@ -6,12 +6,21 @@
; Simple utility that performs simple tests of an 8242 PS/2 controller,
; keyboard, and mouse.
;
; WBW 2022-03-28: Add menu driven port selection
; Add support for RHYOPHYRE
; WBW 2022-04-01: Add menu for test functions
; WBW 2022-04-02: Fix prtchr register saving/recovery
;
;=======================================================================
;
; PS/2 Keyboard/Mouse controller port addresses (adjust as needed)
;
iocmd .equ $E3 ; PS/2 controller command port address
iodat .equ $E2 ; PS/2 controller data port address
; MBC:
iocmd_mbc .equ $E3 ; PS/2 controller command port address
iodat_mbc .equ $E2 ; PS/2 controller data port address
; RPH:
iocmd_rph .equ $8D ; PS/2 controller command port address
iodat_rph .equ $8C ; PS/2 controller data port address
;
cpumhz .equ 8 ; for time delay calculations (not critical)
;
@@ -37,6 +46,8 @@ bdos .equ $0005 ; BDOS invocation vector
call crlf
ld de,str_banner ; banner
call prtstr
;
call setup
;
call main ; do the real work
;
@@ -50,52 +61,95 @@ exit:
ld sp,(stksav) ; restore stack
jp restart ; return to CP/M via restart
;
;=======================================================================
; Select and setup for hardware
;=======================================================================
;
setup:
call crlf2
ld de,str_hwmenu
call prtstr
setup1:
ld c,$06 ; BDOS direct console I/O
ld e,$FF ; Subfunction = read
call bdos
cp 0
jr z,setup1
call upcase
call prtchr
cp '1' ; MBC
jr z,setup_mbc
cp '2' ; RHYOPHYRE
jr z,setup_rph
cp 'X'
jr z,exit
jr setup
;
setup_mbc:
ld a,iocmd_mbc
ld (iocmd),a
ld a,iodat_mbc
ld (iodat),a
ld de,str_mbc
jr setup2
;
setup_rph:
ld a,iocmd_rph
ld (iocmd),a
ld a,iodat_rph
ld (iodat),a
ld de,str_rph
jr setup2
;
setup2:
call prtstr
call crlf2
ld de,str_cmdport
call prtstr
;ld a,iocmd
ld a,(iocmd)
call prthex
call crlf
ld de,str_dataport
call prtstr
;ld a,iodat
ld a,(iodat)
call prthex
;
xor a
ret
;
;=======================================================================
; Main Program
;=======================================================================
;
main:
;
; Display active controller port addresses
;
call crlf2
ld de,str_cmdport
ld de,str_menu
call prtstr
ld a,iocmd
call prthex
call crlf
ld de,str_dataport
call prtstr
ld a,iodat
call prthex
;
call test_ctlr
jr z,main0 ; continue if ctlr OK
ld de,str_kbd_failed
call crlf2
call prtstr
jr mainz ; bail out if ctlr fails
;
main0:
call test_kbd
jr z,main1 ; completed all tests, continue
ld de,str_kbd_failed
call crlf2
call prtstr
;
main1:
call test_mse
jr z,main2 ; completed all tests, continue
ld de,str_mse_failed
call crlf2
call prtstr
ld c,$06 ; BDOS direct console I/O
ld e,$FF ; Subfunction = read
call bdos
cp 0
jr z,main1
call upcase
call prtchr
cp 'X'
jp z,exit
call main2
jr main
;
main2:
call test_kbdmse
;
mainz:
xor a
; Dispatch to test functions
cp 'C' ; Test Controller
jp z,test_ctlr
cp 'K' ; Test Keyboard
jp z,test_kbd
cp 'M' ; Test Mouse
jp z,test_mse
cp 'B' ; Test Both
jp z,test_kbdmse
ret
;
; Test 8242 PS/2 Controller
@@ -109,10 +163,8 @@ test_ctlr:
ret nz
;
call ctlr_test_p1
;ret nz
;
call ctlr_test_p2
;ret nz
;
ret
;
@@ -123,13 +175,15 @@ test_kbd:
; First, we attempt to contact the controller and keyboard, then
; print the keyboard identity and scan codes supported
;
; Run test series with translation off
call crlf2
ld de,str_basic
call prtstr
;
call ctlr_test
jr nz,test_kbd_fail
;
call test_kbd_basic
ret nz
jr nz,test_kbd_fail
;
; We make two passes through the test series with different controller
; setup values. The first time is with scan code translation off and
@@ -155,59 +209,83 @@ test_kbd:
;
ret
;
test_kbd_fail:
ld de,str_kbd_failed
call crlf2
call prtstr
ret
;
; Test Mouse
;
test_mse:
call crlf2
ld de,str_basic_mse
call prtstr
;
call ctlr_test
jr nz,test_mse_fail
;
ld a,$10 ; kbd disabled, mse enabled, no ints
call ctlr_setup
ret nz
jr nz,test_mse_fail
;
call mse_reset
ret nz
jr nz,test_mse_fail
;
call mse_ident
ret nz
jr nz,test_mse_fail
;
call mse_stream
ret nz
jr nz,test_mse_fail
;
call mse_echo
;
xor a ; signal success
ret
;
test_mse_fail:
ld de,str_mse_failed
call crlf2
call prtstr
ret
;
; Test Everything
;
test_kbdmse:
call crlf2
ld de,str_kbdmse
call prtstr
;
call ctlr_test
jr nz,test_kbdmse_fail
;
ld a,$00 ; kbd enabled, mse enabled, no ints
call ctlr_setup
ret nz
jr nz,test_kbdmse_fail
;
call kbd_reset
ret nz
jr nz,test_kbdmse_fail
;
ld a,2
call kbd_setsc
;
call mse_reset
ret nz
jr nz,test_kbdmse_fail
;
call mse_stream
ret nz
jr nz,test_kbdmse_fail
;
call kbdmse_echo
;
xor a ; signal success
ret
;
test_kbdmse_fail:
ld de,str_kbdmse_failed
call crlf2
call prtstr
ret
;
; Perform basic keyboard tests, display keyboard identity, and
; inventory the supported scan code sets.
;
@@ -782,7 +860,9 @@ wait_write:
ld a,(timeout) ; setup timeout constant
ld b,a
wait_write1:
in a,(iocmd) ; get status
ld a,(iocmd) ; cmd port
ld c,a ; ... to C
in a,(c) ; get status
ld c,a ; save status
and $02 ; isolate input buf status bit
ret z ; 0 means ready, all done
@@ -804,7 +884,9 @@ wait_read:
ld a,(timeout) ; setup timeout constant
ld b,a
wait_read1:
in a,(iocmd) ; get status
ld a,(iocmd) ; cmd port
ld c,a ; ... to C
in a,(c) ; get status
ld c,a ; save status
and $01 ; isolate input buf status bit
xor $01 ; invert so 0 means ready
@@ -824,7 +906,9 @@ check_read:
; Check for data ready to read
; A=0 indicates data available (ZF set)
;
in a,(iocmd) ; get status
ld a,(iocmd) ; cmd port
ld c,a ; ... to C
in a,(c) ; get status
and $01 ; isolate input buf status bit
xor $01 ; invert so 0 means ready
ret
@@ -834,7 +918,9 @@ check_read_kbd:
; Check for keyboard data ready to read
; A=0 indicates data available (ZF set)
;
in a,(iocmd) ; get status
ld a,(iocmd) ; cmd port
ld c,a ; ... to C
in a,(c) ; get status
and %00100001 ; isolate input buf status bit
cp %00000001 ; data ready, not mouse
ret
@@ -844,7 +930,9 @@ check_read_mse:
; Check for mouse data ready to read
; A=0 indicates data available (ZF set)
;
in a,(iocmd) ; get status
ld a,(iocmd) ; cmd port
ld c,a ; ... to C
in a,(c) ; get status
and %00100001 ; isolate input buf status bit
cp %00100001 ; data ready, is mouse
ret
@@ -860,8 +948,10 @@ put_cmd:
scf ; else, signal timeout error
ret ; and bail out
put_cmd1:
ld a,(iocmd) ; cmd port
ld c,a ; ... to C
ld a,e ; recover value to write
out (iocmd),a ; write it
out (c),a ; write it
or a ; clear CF for success
ret
;
@@ -889,8 +979,10 @@ put_data:
scf ; else, signal timeout error
ret ; and bail out
put_data1:
ld a,(iodat) ; data port
ld c,a ; ... to C
ld a,e ; recover value to write
out (iodat),a ; write it
out (c),a ; write it
or a ; clear CF for success
ret
;
@@ -947,7 +1039,9 @@ get_data:
scf ; else signal timeout error
ret ; and bail out
get_data1:
in a,(iodat) ; get data byte
ld a,(iodat) ; data port
ld c,a ; ... to C
in a,(c) ; get data byte
or a ; clear CF for success
ret
;
@@ -1020,11 +1114,11 @@ err_ret:
; Utility Routines
;=======================================================================
;
;
; Print character in A without destroying any registers
;
prtchr:
push bc ; save registers
push af ; save registers
push bc
push de
push hl
ld e,a ; character to print in E
@@ -1033,6 +1127,7 @@ prtchr:
pop hl ; restore registers
pop de
pop bc
pop af
ret
;
prtdot:
@@ -1044,6 +1139,16 @@ prtdot:
pop af ; restore af
ret ; done
;
; Uppercase character in A
;
upcase:
cp 'a' ; below 'a'?
ret c ; if so, nothing to do
cp 'z'+1 ; above 'z'?
ret nc ; if so, nothing to do
and ~$20 ; convert character to lower
ret ; done
;
; Print a zero terminated string at (de) without destroying any registers
;
prtstr:
@@ -1239,7 +1344,21 @@ delay1:
; Constants
;=======================================================================
;
str_banner .db "PS/2 Keyboard/Mouse Information v0.4, 7-Jan-2022",0
str_banner .db "PS/2 Keyboard/Mouse Information v0.6a, 2-Apr-2022",0
str_hwmenu .db "PS/2 Controller Port Options:\r\n\r\n"
.db " 1 - MBC\r\n"
.db " 2 - RHYOPHYRE\r\n"
.db " X - Exit Application\r\n"
.db "\r\nSelection? ",0
str_mbc .db "MBC",0
str_rph .db "RHYOPHYRE",0
str_menu .db "PS/2 Testing Options:\r\n\r\n"
.db " C - Test PS/2 Controller\r\n"
.db " K - Test PS/2 Keyboard\r\n"
.db " M - Test PS/2 Mouse\r\n"
.db " B - Test Both PS/2 Keyboard and Mouse Together\r\n"
.db " X - Exit Application\r\n"
.db "\r\nSelection? ",0
str_exit .db "Done, Thank you for using PS/2 Keyboard/Mouse Information!",0
str_cmdport .db "Controller Command Port: ",0
str_dataport .db "Controller Data Port: ",0
@@ -1312,6 +1431,11 @@ str_mse_failed .db "***** MOUSE HARDWARE ERROR *****",13,10,13,10
.db "the completion of the full set of mouse tests.",13,10
.db "Check your hardware and verify the port",13,10
.db "addresses being used for the controller",0
str_kbdmse_failed .db "***** KEYBOARD/MOUSE HARDWARE ERROR *****",13,10,13,10
.db "A basic hardware or configuration issue prevented",13,10
.db "the completion of the full set of keyboard/mouse tests.",13,10
.db "Check your hardware and verify the port",13,10
.db "addresses being used for the controller",0
;
;=======================================================================
; Working data
@@ -1321,6 +1445,9 @@ stksav .dw 0 ; stack pointer saved at start
.fill stksiz,0 ; stack
stack .equ $ ; stack top
;
iocmd .db 0
iodat .db 0
;
workbuf .fill 8
workbuf_len .db 0
;

View File

@@ -327,9 +327,9 @@ bdos_s: call bdos
ret
;----------------------------------------------------------------------------
; S u b r o u t i n e
; Search for 0 terminated string starting at HL
sub_476: push af
Search0: push af
loc_477: push bc
xor a
ld b,a
@@ -361,7 +361,7 @@ text495h: .db 0,0,0
sub_4A4: ld de,file_fcb
ld hl,byte_4F8
ld (hl),3Ah
ld (hl),':'
inc hl
xor a
ld b,0Dh
@@ -370,14 +370,14 @@ sub_4A4: ld de,file_fcb
call sub_16C4
dec de
ld a,(de)
add a,40h
add a,'A'-1
ld (byte_4F4),a
dec de
ld a,(de)
ld de,byte_4F5
call sub_16E7
ld a,24h
ld (byte_507),a
ld a,'$'
ld (term_fn),a
ld de,text4F2h
ld c,C_WRITESTR
call bdos ; Output string
@@ -386,13 +386,13 @@ sub_4A4: ld de,file_fcb
or l
ret z
ld b,1
call sub_476
call Search0
dec hl
ld (hl),24h
ld (hl),'$'
ld de,(byte_2CD4)
ld c,C_WRITESTR
call bdos ; Output string
ld de,text508h
ld de,newline
ld c,C_WRITESTR
jp bdos ; Output string
@@ -418,8 +418,8 @@ byte_4F8: .db 0 ;
.db 0 ;
.db 0 ;
.db 20h ;
byte_507: .db 0
text508h: .text "\r\n$"
term_fn: .db 0
newline: .text "\r\n$"
;----------------------------------------------------------------------------
; S u b r o u t i n e
@@ -1278,7 +1278,7 @@ loc_9AE: ld a,(byte_8AF)
ret z
push hl
ld b,1
call sub_476
call Search0
dec hl
ld (hl),20h
pop hl

View File

@@ -44,6 +44,7 @@
; 2020-09-03 [E?B] Add support for Ed Brindley YM/AY Sound Card v6
; 2021-08-13 [WBW] Add support for LiNC Z50 Sound Card
; 2021-08-17 [WBW] When playing via HBIOS, call BF_SNDRESET at end
; 2022-03-20 [DDW] Add support for MBC PSG module
;_______________________________________________________________________________
;
; ToDo:
@@ -653,7 +654,7 @@ TMP .DB 0 ; work around use of undocumented Z80
HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE
OCTAVEADJ .DB 0 ; AMOUNT TO ADJUST OCTAVE UP OR DOWN
MSGBAN .DB "Tune Player for RomWBW v3.4, 17-Aug-2021",0
MSGBAN .DB "Tune Player for RomWBW v3.5, 20-Mar-2022",0
MSGUSE .DB "Copyright (C) 2021, Wayne Warthen, GNU GPL v3",13,10
.DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10
.DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10

View File

@@ -1,16 +1,17 @@
;------------------------------------------------------------------------------
; SN76489 + AY-3-8910 + YM2162 VGM player for CP/M
; SN76489 + AY-3-8910 + YM2162 + YM2151 VGM player for CP/M
;------------------------------------------------------------------------------
;
; Based on VGM player by J.B. Langston
; https://github.com/jblang/SN76489
;
; Enhanced with multi-chip support by Marco Maccaferri
; YM2151 support from Ed Brindley
;
; YM2162/YM3484, GD3 support, VGM Chip identification,
; default file type, basic file size checking added by Phil Summers
;
; Bugs: YM2612 Mute not working.
; Bugs: YM2151 playback untested & no mute.
;
; Assemble with:
;
@@ -20,84 +21,145 @@
; Device and system specific definitions
;------------------------------------------------------------------------------
;
P8X180 .EQU 0 ; System configuration
P8X180 .EQU 0 ; System configuration
RC2014 .EQU 0
SBCECB .EQU 1
MBC .EQU 0
;
.IF P8X180
RSEL .EQU 82H ; Primary AY-3-8910 Register selection
RDAT .EQU 83H ; Primary AY-3-8910 Register data
RSEL2 .EQU 88H ; Secondary AY-3-8910 Register selection
RDAT2 .EQU 89H ; Secondary AY-3-8910 Register data
PSGREG .EQU 84H ; Primary SN76489
PSG2REG .EQU 8AH ; Secondary SN76489
FRAME_DLY .EQU 48 ; Frame delay (~ 1/44100)
RSEL .EQU 82H ; Primary AY-3-8910 Register selection
RDAT .EQU 83H ; Primary AY-3-8910 Register data
RSEL2 .EQU 88H ; Secondary AY-3-8910 Register selection
RDAT2 .EQU 89H ; Secondary AY-3-8910 Register data
PSG1REG .EQU 84H ; Primary SN76489
PSG2REG .EQU 8AH ; Secondary SN76489
YM2151_SEL1 .EQU 0B0H ; Primary YM2151 register selection
YM2151_DAT1 .EQU 0B1H ; Primary YM2151 register data
YM2151_SEL2 .EQU 0B2H ; Secondary YM2151 register selection
YM2151_DAT2 .EQU 0B3H ; Secondary YM2151 register data
FRAME_DLY .EQU 48 ; Frame delay (~ 1/44100)
.ENDIF
;
.IF RC2014
RSEL .EQU 0D8H ; Primary AY-3-8910 Register selection
RDAT .EQU 0D0H ; Primary AY-3-8910 Register data
RSEL2 .EQU 0A0H ; Secondary AY-3-8910 Register selection
RDAT2 .EQU 0A1H ; Secondary AY-3-8910 Register data
PSGREG .EQU 0FFH ; Primary SN76489
PSG2REG .EQU 0FBH ; Secondary SN76489
FRAME_DLY .EQU 15 ; Frame delay (~ 1/44100)
RSEL .EQU 0D8H ; Primary AY-3-8910 Register selection
RDAT .EQU 0D0H ; Primary AY-3-8910 Register data
RSEL2 .EQU 0A0H ; Secondary AY-3-8910 Register selection
RDAT2 .EQU 0A1H ; Secondary AY-3-8910 Register data
PSG1REG .EQU 0FFH ; Primary SN76489
PSG2REG .EQU 0FBH ; Secondary SN76489
YM2151_SEL1 .EQU 0FEH ; Primary YM2151 register selection
YM2151_DAT1 .EQU 0FFH ; Primary YM2151 register data
YM2151_SEL2 .EQU 0D0H ; Secondary YM2151 register selection
YM2151_DAT2 .EQU 0D1H ; Secondary YM2151 register data
FRAME_DLY .EQU 15 ; Frame delay (~ 1/44100)
.ENDIF
;
.IF SBCECB
RSEL .EQU 0D8H ; Primary AY-3-8910 Register selection
RDAT .EQU 0D0H ; Primary AY-3-8910 Register data
RSEL2 .EQU 0A0H ; Secondary AY-3-8910 Register selection
RDAT2 .EQU 0A1H ; Secondary AY-3-8910 Register data
YMSEL .EQU 0C0H ; Primary YM2162 11000000 a1=0 a0=0
YMDAT .EQU 0C1H ; Primary YM2162 11000001 a1=0 a0=1
YM2SEL .EQU 0C2H ; Secondary YM2162 11000010 a1=1 a0=0
YM2DAT .EQU 0C3H ; Secondary YM2162 11000011 a1=1 a0=1
PSG1REG .EQU 0C6H ; Primary SN76489
PSG2REG .EQU 0C7H ; Secondary SN76489
YM2151_SEL1 .EQU 0FEH ; Primary YM2151 register selection
YM2151_DAT1 .EQU 0FFH ; Primary YM2151 register data
YM2151_SEL2 .EQU 0FEH ; Secondary YM2151 register selection
YM2151_DAT2 .EQU 0FFH ; Secondary YM2151 register data
FRAME_DLY .EQU 8 ; Frame delay (~ 1/44100)
.ENDIF
;
.IF MBC
RSEL .EQU 0A0H ; Primary AY-3-8910 Register selection
RDAT .EQU 0A1H ; Primary AY-3-8910 Register data
RSEL .EQU 0D8H ; Secondary AY-3-8910 Register selection
RDAT .EQU 0D0H ; Secondary AY-3-8910 Register data
YMSEL .EQU 0C0H ; 11000000 a1=0 a0=0
YMDAT .EQU 0C1H ; 11000001 a1=0 a0=1
YM2SEL .EQU 0C2H ; 11000010 a1=1 a0=0
YM2DAT .EQU 0C3H ; 11000011 a1=1 a0=1
PSGREG .EQU 0C6H ; Primary SN76489
PSG2REG .EQU 0C7H ; Secondary SN76489
YM2151_SEL1 .EQU 0FEH ; Primary YM2151 register selection
YM2151_DAT1 .EQU 0FFH ; Primary YM2151 register data
YM2151_SEL2 .EQU 0FEH ; Secondary YM2151 register selection
YM2151_DAT2 .EQU 0FFH ; Secondary YM2151 register data
FRAME_DLY .EQU 10 ; Frame delay (~ 1/44100)
#DEFINE SBCV2004
HB_RTCVAL .EQU 0FFEEH
RTCIO .EQU 070H
.ENDIF
;
;------------------------------------------------------------------------------
; Your customer overrides can go in here i.e. ports
;------------------------------------------------------------------------------
;
;RSEL .SET 09AH ; Primary AY-3-8910 Register selection
;RDAT .SET 09BH ; Primary AY-3-8910 Register data
;
;------------------------------------------------------------------------------
; Frame delay overide values for different processor speeds.
;------------------------------------------------------------------------------
;
;FRAME_DLY .SET 10 ; 1Mhz ; not
;FRAME_DLY .SET 10 ; 2Mhz ; implemented
;FRAME_DLY .SET 10 ; 4Mhz ; yet
;FRAME_DLY .SET 15 ; 8Mhz
;FRAME_DLY .SET 10 ; 10Mhz
;FRAME_DLY .SET 20 ; 12Mhz
;
;------------------------------------------------------------------------------
; Frame delay values for pal/ntsc
;------------------------------------------------------------------------------
;
D60 .EQU 735
D50 .EQU 882
;
;------------------------------------------------------------------------------
; Processor speed control for SBCV2004+
;------------------------------------------------------------------------------
;
;#DEFINE SBCV2004 ; My SBC board at 12Mhz needs this to switch to
HB_RTCVAL .EQU 0FFEEH ; 6MHz for it to work with the ECB-VGM reliably.
RTCIO .EQU 070H
;------------------------------------------------------------------------------
; YM2162 Register write macros
;------------------------------------------------------------------------------
;
#DEFINE setreg(reg,val) \
#DEFCONT \ ld a,reg
#DEFCONT \ out (YMSEL),a
#DEFCONT \ nop
#DEFCONT \ nop
#DEFCONT \ ld a,val
#DEFCONT \ out (YMDAT),a
#DEFCONT \ nop
#DEFCONT \ nop
#DEFCONT \ in a,(YMSEL)
#DEFCONT \ rlca
#DEFCONT \ jp c,$-3
;
#DEFINE setreg2(reg,val) \
#DEFCONT \ ld a,reg
#DEFCONT \ out (YM2SEL),a
#DEFCONT \ nop
#DEFCONT \ nop
#DEFCONT \ ld a,val
#DEFCONT \ out (YM2DAT),a
#DEFCONT \ nop
#DEFCONT \ nop
D50 .EQU 500 ; 900 ;735
D60 .EQU 600 ; 1000 ;882
#DEFCONT \ out (YM2DAT),a
#DEFCONT \ in a,(YMSEL)
#DEFCONT \ rlca
#DEFCONT \ jp c,$-3
;------------------------------------------------------------------------------
; VGM Codes
;------------------------------------------------------------------------------
VGM_GG_W .EQU 04FH ; GAME GEAR PSG STEREO. WRITE DD TO PORT 0X06
VGM_PSG_W .EQU 050H ; PSG (SN76489/SN76496) WRITE VALUE DD
VGM_YM2612_W .EQU 052H ; YM2612 WRITE VALUE DD
VGM_PSG1_W .EQU 050H ; PSG (SN76489/SN76496) #1 WRITE VALUE DD
VGM_PSG2_W .EQU 030H ; PSG (SN76489/SN76496) #2 WRITE VALUE DD
VGM_YM26121_W .EQU 052H ; YM2612 #1 WRITE VALUE DD
VGM_YM26122_W .EQU 053H ; YM2612 #2 WRITE VALUE DD
VGM_WNS .EQU 061H ; WAIT N SAMPLES
VGM_W735 .EQU 062H ; WAIT 735 SAMPLES (1/60TH SECOND)
VGM_W882 .EQU 063H ; WAIT 882 SAMPLES (1/50TH SECOND)
VGM_ESD .EQU 066H ; END OF SOUND DATA
VGM_YM21511_W .EQU 054H ; YM2612 #1 WRITE VALUE DD
VGM_YM21512_W .EQU 0A4H ; YM2612 #2WRITE VALUE DD
;------------------------------------------------------------------------------
; Generic CP/M definitions
@@ -168,13 +230,12 @@ L1 LD B,FRAME_DLY
; Program Exit
;------------------------------------------------------------------------------
;
EXIT
EXIT: CALL VGMDEVICES ; Display devices used
CALL VGMMUTE ; Mute Devices
#IFDEF SBCV2004
CALL FASTIO
#ENDIF
CALL VGMDEVICES ; Display devices used
CALL VGMMUTE ; Mute Devices
LD DE,MSG_EXIT
EXIT_ERR: CALL PRTSTR ; Generic message or error
LD SP, (OLDSTACK) ; Exit to CP/M
@@ -266,7 +327,7 @@ VGMINFO: LD DE,MSG_BADF ; Check valid file
EX DE,HL
PUSH BC
POP DE
; CALL PRTHEX32
; CALL PRTHEX32 ; Debug
LD HL,(VGMDATA+16H) ; Is GD3 in range?
LD A,H
@@ -296,6 +357,9 @@ VGMINFO: LD DE,MSG_BADF ; Check valid file
ADD HL,DE
CALL CRLF
LD DE,MSG_TRACK
CALL PRTSTR
GD3_NXT: LD A,(HL) ; Print English Track
OR A
INC HL
@@ -311,7 +375,9 @@ GD3_NXT1: LD A,(HL) ; Skip Japanese Track
JR NZ,GD3_NXT1
; JR GD3_NXT1
CALL CRLF
LD DE,MSG_TITLE
CALL PRTSTR
GD3_NXT2: LD A,(HL) ; Print English Title
OR A
INC HL
@@ -349,20 +415,22 @@ NEXT LD A, (HL)
NEXT1 CP VGM_GG_W ; Game Gear SN76489 stereo. Ignored
JR NZ, PSG
LD IX,VGM_DEV
SET 6,(IX+0)
INC HL
JR NEXT
SET 0,(IX+1)
INC HL
JR NEXT
PSG CP VGM_PSG_W ; Write byte to SN76489.
; SN76489 SECTION
PSG CP VGM_PSG1_W ; Write byte to SN76489.
JR NZ, PSG2
LD A, (HL)
INC HL
OUT (PSGREG), A
OUT (PSG1REG), A
LD IX,VGM_DEV
SET 0,(IX+0)
JR NEXT
PSG2 CP 30H ; Write byte to second SN76489.
PSG2 CP VGM_PSG2_W ; Write byte to second SN76489.
JR NZ, AY
LD A, (HL)
INC HL
@@ -371,10 +439,10 @@ PSG2 CP 30H ; Write byte to second SN76489.
SET 1,(IX+0)
JR NEXT
; AY SECTION
; AY-3-8910 SECTION
AY CP 0A0H
JR NZ,YM
JR NZ,YM2162_1
LD A, (HL)
INC HL
BIT 7, A ; Bit 7=1 for second AY-3-8910
@@ -395,10 +463,10 @@ AY1 OUT (RSEL), A
SET 3,(IX+0)
JR NEXT
; YM SECTION
; YM2612 SECTION
YM: CP 052H
JR NZ, YM2
YM2162_1 CP VGM_YM26121_W
JR NZ, YM2162_2
LD A,(HL)
OUT (YMSEL),A
INC HL
@@ -409,9 +477,8 @@ YM: CP 052H
SET 4,(IX+0)
JP NEXT
;
YM2: CP 053H
JR NZ,WAITNN
YM2162_2 CP VGM_YM26122_W
JR NZ,YM2151_1
LD A,(HL)
OUT (YM2SEL),A
INC HL
@@ -419,10 +486,36 @@ YM2: CP 053H
OUT (YM2DAT),A
INC HL
LD IX,VGM_DEV
SET 4,(IX+0)
SET 4,(IX+0) ; 2nd channel
JP NEXT
; YM2151 SECTION
YM2151_1 CP VGM_YM21511_W
JR NZ,YM2151_2
LD A,(HL)
OUT (YM2151_SEL1),A
INC HL
LD A,(HL)
OUT (YM2151_DAT1),A
INC HL
LD IX,VGM_DEV
SET 6,(IX+0)
JP NEXT
;
YM2151_2 CP VGM_YM21512_W
JR NZ,WAITNN
LD A,(HL)
OUT (YM2151_SEL2),A
INC HL
LD A,(HL)
OUT (YM2151_DAT2),A
INC HL
LD IX,VGM_DEV
SET 7,(IX+0)
JP NEXT
;
WAITNN: CP 61H ; Wait nn samples
WAITNN CP VGM_WNS ; Wait nn samples
JR NZ, WAIT60
LD A, (HL)
INC HL
@@ -437,14 +530,14 @@ WAITNN: CP 61H ; Wait nn samples
WAIT60 CP VGM_W735 ; Wait 735 samples (60Hz)
JR NZ, WAIT50
LD (VGMPOS), HL
LD HL, D50
LD HL, D60
LD (VGMDLY), HL
RET
;
WAIT50 CP VGM_W882 ; Wait 882 samples (50Hz)
JR NZ, WAIT1
LD (VGMPOS), HL
LD HL, D60
LD HL, D50
LD (VGMDLY), HL
RET
;
@@ -458,8 +551,8 @@ WAIT1 CP 70H ; WAIT 0-15 SAMPLES
LD (VGMDLY), HL
RET
;
UNK: LD IX,VGM_DEV ; Set flag for
SET 6,(IX+0) ; unknown device
UNK LD IX,VGM_DEV ; Set flag for
SET 0,(IX+1) ; unknown device
INC HL ; Try and skip
JP NEXT
;
@@ -489,24 +582,38 @@ VGMDEVICES: LD DE,MSG_PO ; Played on ...
SRL A
PUSH AF
;
LD DE,MSG_YM ; YM-2612 Devices
LD DE,MSG_YM2612 ; YM-2612 Devices
CALL CHKDEV
;
POP AF
SRL A
SRL A
PUSH AF
;
LD DE,MSG_YM2151 ; YM-2151 Devices
CALL CHKDEV
;
POP AF
; SRL A
; SRL A
; PUSH AF
;
LD A,(IX+1)
LD DE,MSG_UNK ; Unknown Device Code detected
; CALL CHKDEV
;
CHKDEV: AND %00000011 ; Display
SRL A ; number of
ADC A,'0' ; devices
CP '0'
RET Z ; Skip if not
CALL PRTCHR ; used.
CALL PRTSTR
RET Z ; number of
SRL A ; devices
ADC A,'0'
CALL PRTCHR ; Skip if not
CALL PRTSTR ; used.
RET
DEBUG: PUSH AF
LD A,'*'
CALL PRTCHR
POP AF
RET
;
;------------------------------------------------------------------------------
@@ -518,16 +625,16 @@ VGMMUTE: LD A,(IX+0) ; Only mute devices used.
JR Z,SKIP1
LD A, 9FH ; Mute all channels on psg
OUT (PSGREG), A
OUT (PSG1REG), A
OUT (PSG2REG), A
LD A, 0BFH
OUT (PSGREG), A
OUT (PSG1REG), A
OUT (PSG2REG), A
LD A, 0DFH
OUT (PSGREG), A
OUT (PSG1REG), A
OUT (PSG2REG), A
LD A, 0FFH
OUT (PSGREG), A
OUT (PSG1REG), A
OUT (PSG2REG), A
SKIP1: LD A,(IX+0)
@@ -554,11 +661,12 @@ SKIP1: LD A,(IX+0)
OUT (RDAT2), A
CALL FASTIO
SKIP2: LD A,(IX+0)
SKIP2: LD A,(IX+0) ; mute all channels on ym2612
AND %00110000
JP Z,SKIP3
setreg($22,$00) ; lfo off
setreg($27,$00) ; Disable independant Channel 3
setreg($28,$00) ; note off ch 1
setreg($28,$01) ; note off ch 2
@@ -573,9 +681,240 @@ SKIP2: LD A,(IX+0)
setreg($b6,$00)
setreg2($b4,$00) ; sound off ch 4-6
setreg2($b5,$00)
setreg2($b6,$00)
setreg2($b6,$00)
setreg($40,$7f) ; ch 1-3 total level minimum
setreg($41,$7f)
setreg($42,$7f)
setreg($44,$7f)
setreg($45,$7f)
setreg($46,$7f)
setreg($48,$7f)
setreg($49,$7f)
setreg($4a,$7f)
setreg($4c,$7f)
setreg($4d,$7f)
setreg($4e,$7f)
setreg2($40,$7f) ; ch 4-6 total level minimum
setreg2($41,$7f)
setreg2($42,$7f)
setreg2($44,$7f)
setreg2($45,$7f)
setreg2($46,$7f)
setreg2($48,$7f)
setreg2($49,$7f)
setreg2($4a,$7f)
setreg2($4c,$7f)
setreg2($4d,$7f)
setreg2($4e,$7f)
#if (0)
setreg($2a,$00) ; dac value
setreg($24,$00) ; timer A frequency
setreg($25,$00) ; timer A frequency
setreg($26,$00) ; time B frequency
setreg($30,$00) ; ch 1-3 multiply & detune
setreg($31,$00)
setreg($32,$00)
setreg($34,$00)
setreg($35,$00)
setreg($36,$00)
setreg($38,$00)
setreg($39,$00)
setreg($3a,$00)
setreg($3c,$00)
setreg($3d,$00)
setreg($3e,$00)
setreg2($30,$00) ; ch 4-6 multiply & detune
setreg2($31,$00)
setreg2($32,$00)
setreg2($34,$00)
setreg2($35,$00)
setreg2($36,$00)
setreg2($38,$00)
setreg2($39,$00)
setreg2($3a,$00)
setreg2($3c,$00)
setreg2($3d,$00)
setreg2($3e,$00)
setreg($50,$00) ; ch 1-3 attack rate and scaling
setreg($51,$00)
setreg($52,$00)
setreg($54,$00)
setreg($55,$00)
setreg($56,$00)
setreg($58,$00)
setreg($59,$00)
setreg($5a,$00)
setreg($5c,$00)
setreg($5d,$00)
setreg($5e,$00)
setreg2($50,$00) ; ch 4-6 attack rate and scaling
setreg2($51,$00)
setreg2($52,$00)
setreg2($54,$00)
setreg2($55,$00)
setreg2($56,$00)
setreg2($58,$00)
setreg2($59,$00)
setreg2($5a,$00)
setreg2($5c,$00)
setreg2($5d,$00)
setreg2($5e,$00)
setreg($60,$00) ; ch 1-3 decay rate and am enable
setreg($61,$00)
setreg($62,$00)
setreg($64,$00)
setreg($65,$00)
setreg($66,$00)
setreg($68,$00)
setreg($69,$00)
setreg($6a,$00)
setreg($6c,$00)
setreg($6d,$00)
setreg($6e,$00)
setreg2($60,$00) ; ch 4-6 decay rate and am enable
setreg2($61,$00)
setreg2($62,$00)
setreg2($64,$00)
setreg2($65,$00)
setreg2($66,$00)
setreg2($68,$00)
setreg2($69,$00)
setreg2($6a,$00)
setreg2($6c,$00)
setreg2($6d,$00)
setreg2($6e,$00)
setreg($70,$00) ; ch 1-3 sustain rate
setreg($71,$00)
setreg($72,$00)
setreg($74,$00)
setreg($75,$00)
setreg($76,$00)
setreg($78,$00)
setreg($79,$00)
setreg($7a,$00)
setreg($7c,$00)
setreg($7d,$00)
setreg($7e,$00)
setreg2($70,$00) ; ch 4-6 sustain rate
setreg2($71,$00)
setreg2($72,$00)
setreg2($74,$00)
setreg2($75,$00)
setreg2($76,$00)
setreg2($78,$00)
setreg2($79,$00)
setreg2($7a,$00)
setreg2($7c,$00)
setreg2($7d,$00)
setreg2($7e,$00)
setreg($80,$00) ; ch 1-3 release rate and sustain level
setreg($81,$00)
setreg($82,$00)
setreg($84,$00)
setreg($85,$00)
setreg($86,$00)
setreg($88,$00)
setreg($89,$00)
setreg($8a,$00)
setreg($8c,$00)
setreg($8d,$00)
setreg($8e,$00)
setreg2($80,$00) ; ch 4-6 release rate and sustain level
setreg2($81,$00)
setreg2($82,$00)
setreg2($84,$00)
setreg2($85,$00)
setreg2($86,$00)
setreg2($88,$00)
setreg2($89,$00)
setreg2($8a,$00)
setreg2($8c,$00)
setreg2($8d,$00)
setreg2($8e,$00)
setreg($90,$00) ; ch 1-3 ssg-eg
setreg($91,$00)
setreg($92,$00)
setreg($94,$00)
setreg($95,$00)
setreg($96,$00)
setreg($98,$00)
setreg($99,$00)
setreg($9a,$00)
setreg($9c,$00)
setreg($9d,$00)
setreg($9e,$00)
setreg2($90,$00) ; ch 4-6 ssg-eg
setreg2($91,$00)
setreg2($92,$00)
setreg2($94,$00)
setreg2($95,$00)
setreg2($96,$00)
setreg2($98,$00)
setreg2($99,$00)
setreg2($9a,$00)
setreg2($9c,$00)
setreg2($9d,$00)
setreg2($9e,$00)
setreg($a0,$00) ; ch 1-3 frequency
setreg($a1,$00)
setreg($a2,$00)
setreg($a4,$00)
setreg($a5,$00)
setreg($a6,$00)
; setreg($a8,$00) ; ch 3 special mode
; setreg($a9,$00)
; setreg($aa,$00)
; setreg($ac,$00)
; setreg($ad,$00)
; setreg($ae,$00)
setreg2($a0,$00) ; ch 4-6 frequency
setreg2($a1,$00)
setreg2($a2,$00)
setreg2($a4,$00)
setreg2($a5,$00)
setreg2($a6,$00)
; setreg2($a8,$00) ; ch 3 special mode
; setreg2($a9,$00)
; setreg2($aa,$00)
; setreg2($ac,$00)
; setreg2($ad,$00)
; setreg2($ae,$00)
setreg($b0,$00) ; ch 1-3 algorith + feedback
setreg($b1,$00)
setreg($b2,$00)
setreg2($b0,$00) ; ch 4-6 algorith + feedback
setreg2($b1,$00)
setreg2($b2,$00)
#endif
SKIP3: RET
SKIP3: LD A,(IX+0) ; For YM2151 ... Unimplemented
AND %11000000
JP Z,SKIP4
; MUTE YM2151
SKIP4 RET
;
;------------------------------------------------------------------------------
; Hardware specific routines.
@@ -609,18 +948,21 @@ FASTIO:
; Strings and constants.
;------------------------------------------------------------------------------
;
MSG_WELC: .DB "VGM Player for RomWBW v0.2, 27-Nov-2021",CR,LF
MSG_WELC: .DB "VGM Player for RomWBW v0.3, 2-Jul-2022",CR,LF
; .DB "J.B. Langston/Marco Maccaferri/Phil Summers",CR,LF
.DB 0
MSG_BADF: .DB "Not a VGM file",CR,LF,0
MSG_PO .DB "Played on : ",0
MSG_YM: .DB "xYM-2612 ",0
MSG_YM2612: .DB "xYM-2612 ",0
MSG_SN: .DB "xSN76489 ",0
MSG_AY: .DB "xAY-3-8910 ",0
MSG_UNK .DB "xUnsupported device encountered", CR, LF, 0
MSG_YM2151: .DB "xYM-2151 ",0
MSG_UNK: .DB "xUnsupported device encountered", CR, LF, 0
MSG_EXIT: .DB "FINISHED.",CR,LF,0
MSG_NOFILE: .DB "File not found", CR, LF, 0
MSG_MEM: .DB "File to big", CR, LF, 0
MSG_TITLE: .DB " from: ",0
MSG_TRACK .DB "Playing: ",0
;
;------------------------------------------------------------------------------
; Variables
@@ -629,7 +971,8 @@ MSG_MEM: .DB "File to big", CR, LF, 0
VGMPOS .DW 0
VGMDLY .DW 0
VGMUNK_F .DB 0 ; Flag for unknown device
VGM_DEV .DB %00000000 ; UUYYAASS
VGM_DEV .DB %00000000 ; yyYYAASS
.DB %00000000 ; Unimplemented device flags
OLDSTACK .DW 0 ; original stack pointer
.DS 40H ; space for stack

View File

@@ -244,7 +244,7 @@ initcpm3:
; The CP/M 3 drvtbl is in common memory, but the XDPHs are not.
; So, here we temporarily swap the bank to the CP/M 3 system
; bank. We cannot use the CP/M Direct BIOS call because it
; explicitly blocks use of SELMEM, so we are foreced to use
; explicitly blocks use of SELMEM, so we are forced to use
; HBIOS call. The CP/M 3 system bank is always the HBIOS
; user bank.
;

View File

@@ -29,6 +29,8 @@
;
;[2021/07/10] v1.7 Support MBC (AJL)
;
;[2022/03/27] v1.8 Support RHYOPHYRE
;
; Constants
;
mask_data .EQU %10000000 ; RTC data line
@@ -46,6 +48,7 @@ PORT_SCZ180 .EQU $0C ; RTC port for SCZ180
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
BDOS .EQU 5 ; BDOS invocation vector
@@ -1126,6 +1129,11 @@ HINIT:
LD DE,PLT_MBC
CP 13 ; MBC
JR Z,RTC_INIT2
;
LD C,PORT_RPH
LD DE,PLT_RPH
CP 14 ; RHYOPHYRE
JR Z,RTC_INIT2
;
; Unknown platform
LD DE,PLTERR ; BIOS error message
@@ -1622,7 +1630,7 @@ TESTING_BIT_DELAY_OVER:
RTC_HELP_MSG:
.DB 0Ah, 0Dh ; line feed and carriage return
.TEXT "RTC: Version 1.7"
.TEXT "RTC: Version 1.8"
.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
@@ -1751,6 +1759,7 @@ PLT_SCZ180 .TEXT ", SC Z180 RTC Module Latch Port 0x0C\r\n$"
PLT_DYNO .TEXT ", DYNO RTC Module Latch Port 0x0C\r\n$"
PLT_RCZ280 .TEXT ", RC2014 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$"
;
; Generic FOR-NEXT loop algorithm

View File

@@ -22,7 +22,7 @@ DREADF EQU 20 ; DISK READ FUNCTION
;
CR EQU 0DH ; CARRIAGE RETURN
LF EQU 0AH ; LINE FEED
STKSIZE EQU 16 ; SIZE OF LOCAL STACK
STKSIZE EQU 32 ; SIZE OF LOCAL STACK
;
WBOOT EQU 1 ; ADDRESS OF WARM BOOT (OTHER PATCH ENTRY
;

View File

@@ -30,7 +30,7 @@ zcpr33n.rel zcpr33t.rel:
all:: $(HD0IMG)
clobber::
clean::
@rm -f $(HD0IMG)
%.img: zcpr33n.rel zcpr33t.rel

View File

@@ -311,6 +311,7 @@ diskdef wbw_rom1024
end
# RomWBW 720K floppy media
diskdef wbw_fd720
seclen 512
tracks 160
@@ -323,6 +324,7 @@ diskdef wbw_fd720
end
# RomWBW 1.44M floppy media
diskdef wbw_fd144
seclen 512
tracks 160
@@ -335,6 +337,7 @@ diskdef wbw_fd144
end
# RomWBW 360K floppy media
diskdef wbw_fd360
seclen 512
tracks 80
@@ -347,6 +350,7 @@ diskdef wbw_fd360
end
# RomWBW 1.20M floppy media
diskdef wbw_fd120
seclen 512
tracks 160
@@ -359,7 +363,8 @@ diskdef wbw_fd120
end
# RomWBW 8320KB Hard Disk Slice (512 directory entry format)
# Legacy format, 512 dir entries, 16,630 sectors / slice
# Legacy format: 512 dir entries, 16,630 sectors / slice
diskdef wbw_hd512
seclen 512
tracks 1040
@@ -372,6 +377,9 @@ diskdef wbw_hd512
end
# First 4 slices of wbw_hd512
# Assumes first slice (slice 0) starts at sector 0
# Offset of any slice (in tracks) = (1040 * <slice_num>)
diskdef wbw_hd512_0
seclen 512
tracks 1040
@@ -380,45 +388,50 @@ diskdef wbw_hd512_0
maxdir 512
skew 0
boottrk 16
offset 0T
os 2.2
end
diskdef wbw_hd512_1
seclen 512
tracks 2080
tracks 1040
sectrk 16
blocksize 4096
maxdir 512
skew 0
boottrk 1056
boottrk 16
offset 1040T
os 2.2
end
diskdef wbw_hd512_2
seclen 512
tracks 3120
tracks 1040
sectrk 16
blocksize 4096
maxdir 512
skew 0
boottrk 2096
boottrk 16
offset 2080T
os 2.2
end
diskdef wbw_hd512_3
seclen 512
tracks 4160
tracks 1040
sectrk 16
blocksize 4096
maxdir 512
skew 0
boottrk 3136
boottrk 16
offset 3120T
os 2.2
end
# RomWBW 8MB Hard Disk (1024 directory entry format)
# New format, 1024 dir entries, 16,384 sectors / slice
# New format: 1024 dir entries, 16,384 sectors / slice
# Pure filesystem image, no MBR prefix
diskdef wbw_hd1024
seclen 512
tracks 1024
@@ -431,110 +444,124 @@ diskdef wbw_hd1024
end
# First 4 slices of wbw_hd1024
# Assumes 1MB prefix (2048 sectors)
# Assumes standard 1MB prefix
# Offset of any slice (in tracks) = 128 + (1024 * <slice_num)
diskdef wbw_hd1024_0
seclen 512
tracks 1040
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 130
boottrk 2
offset 128T
os 2.2
end
diskdef wbw_hd1024_1
seclen 512
tracks 2064
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 1154
boottrk 2
offset 1152T
os 2.2
end
diskdef wbw_hd1024_2
seclen 512
tracks 3112
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 2178
boottrk 2
offset 2176T
os 2.2
end
diskdef wbw_hd1024_3
seclen 512
tracks 4136
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 3202
boottrk 2
offset 3200T
os 2.2
end
# SmallZ80 Hard Disk Image
# 5 slices
diskdef smz80_hd0
seclen 512
tracks 1034
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 10
boottrk 0
offset 10T
os 2.2
end
diskdef smz80_hd1
seclen 512
tracks 2058
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 1034
boottrk 0
offset 1034T
os 2.2
end
diskdef smz80_hd2
seclen 512
tracks 1034
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 2058
boottrk 0
offset 2058T
os 2.2
end
diskdef smz80_hd3
seclen 512
tracks 4106
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 3082
boottrk 0
offset 3082T
os 2.2
end
diskdef smz80_hd4
seclen 512
tracks 5130
tracks 1024
sectrk 16
blocksize 4096
maxdir 1024
skew 0
boottrk 4106
boottrk 0
offset 4106T
os 2.2
end
# RC2014 standard hard disk image
# RC2014 standard (Grant Searle) hard disk image
# Slices A-P
# Offset of slice (in tracks) = (512 * <slice_num>)
diskdef rc2014a
seclen 512
tracks 512
@@ -542,155 +569,171 @@ diskdef rc2014a
blocksize 4096
maxdir 512
boottrk 1
offset 0T
os 2.2
end
diskdef rc2014b
seclen 512
tracks 1024
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 512
boottrk 0
offset 512T
os 2.2
end
diskdef rc2014c
seclen 512
tracks 1536
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 1024
boottrk 0
offset 1024T
os 2.2
end
diskdef rc2014d
seclen 512
tracks 2048
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 1536
boottrk 0
offset 1536T
os 2.2
end
diskdef rc2014e
seclen 512
tracks 2560
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 2048
boottrk 0
offset 2048T
os 2.2
end
diskdef rc2014f
seclen 512
tracks 3072
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 2560
boottrk 0
offset 2560T
os 2.2
end
diskdef rc2014g
seclen 512
tracks 3584
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 3072
boottrk 0
offset 3072T
os 2.2
end
diskdef rc2014h
seclen 512
tracks 4096
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 3584
boottrk 0
offset 3584T
os 2.2
end
diskdef rc2014i
seclen 512
tracks 4608
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 4096
boottrk 0
offset 4096T
os 2.2
end
diskdef rc2014j
seclen 512
tracks 5120
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 4608
boottrk 0
offset 4608T
os 2.2
end
diskdef rc2014k
seclen 512
tracks 5632
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 5120
boottrk 0
offset 5120T
os 2.2
end
diskdef rc2014l
seclen 512
tracks 6144
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 5632
boottrk 0
offset 5632T
os 2.2
end
diskdef rc2014m
seclen 512
tracks 6656
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 6144
boottrk 0
offset 6144T
os 2.2
end
diskdef rc2014n
seclen 512
tracks 7168
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 6656
boottrk 0
offset 6656T
os 2.2
end
diskdef rc2014o
seclen 512
tracks 7680
tracks 512
sectrk 32
blocksize 4096
maxdir 512
boottrk 7168
boottrk 0
offset 7168T
os 2.2
end
diskdef rc2014p
seclen 512
tracks 7808
tracks 128
sectrk 32
blocksize 4096
maxdir 512
boottrk 7680
boottrk 0
offset 7680T
os 2.2
end

View File

@@ -144,6 +144,43 @@ CBXSIZ .EQU $ - CBX
.ECHO " bytes.\n"
;
;==================================================================================================
; TIMDAT ROUTINE FOR QP/M
;==================================================================================================
;
#IFDEF PLTWBW
#IF QPMTIMDAT
;
TIMDAT:
; GET CURRENT DATE/TIME FROM RTC INTO BUFFER
LD B,BF_RTCGETTIM ; HBIOS GET TIME FUNCTION
LD HL,CLKDAT ; POINTER TO BUFFER
RST 08 ; DO IT
;
; CONVERT ALL BYTES FROM BCD TO BINARY
LD HL,CLKDAT ; BUFFER
LD B,7 ; DO 7 BYTES
TIMDAT1:
LD A,(HL)
CALL BCD2BYTE
LD (HL),A
INC HL
DJNZ TIMDAT1
;
; SWAP BYTES 0 & 2 TO MAKE BUFFER INTO QP/M ORDER
LD A,(CLKDAT+0)
PUSH AF
LD A,(CLKDAT+2)
LD (CLKDAT+0),A
POP AF
LD (CLKDAT+2),A
;
LD HL,CLKDAT ; RETURN BUFFER ADDRESS
RET
;
#ENDIF
#ENDIF
;
;==================================================================================================
; CHARACTER DEVICE MAPPING
;==================================================================================================
;
@@ -302,6 +339,13 @@ BOOT:
; STANDARD BOOT INVOCATION
;LD SP,STACK ; STACK FOR INITIALIZATION
LD SP,CCP_LOC ; PUT STACK JUST BELOW CCP
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nCBIOS Starting...$"
CALL PRTSTRD
.DB "\r\nCopying INIT code to 0x8000...$"
#ENDIF
;
; COPY INITIALIZATION CODE TO RUNNING LOCATION $8000
LD HL,BUFPOOL
@@ -311,6 +355,11 @@ BOOT:
PUSH HL ; SAVE START ADR AGAIN FOR BELOW
PUSH BC ; SAVE LENGTH FOR BELOW
LDIR ; COPY THE CODE
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nClearing disk buffer...$"
#ENDIF
;
; CLEAR BUFFER
POP BC ; RECOVER LENGTH
@@ -320,10 +369,32 @@ BOOT:
INC DE ; OFFSET DEST
DEC BC ; REDUCE LEN BY ONE
LDIR ; USE LDIR TO FILL
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nStarting INIT routine at 0x8000$"
#ENDIF
;
CALL INIT ; PERFORM COLD BOOD ROUTINE
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nResetting CP/M...$"
#ENDIF
CALL RESCPM ; RESET CPM
;
#IF AUTOSUBMIT
#IF DEBUG
CALL PRTSTRD
.DB "\r\nPerforming Auto Submit...$"
#ENDIF
CALL AUTOSUB ; PREP AUTO SUBMIT, IF APPROPRIATE
#ENDIF
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nLaunching CP/M...$"
#ENDIF
;
JR GOCPM ; THEN OFF TO CP/M WE GO...
;
@@ -361,6 +432,8 @@ WBOOT:
#ENDIF
;
#IFDEF PLTUNA
LD SP,STACK ; STACK FOR INITIALIZATION
; RESTORE COMMAND PROCESSOR FROM UNA BIOS CACHE
LD BC,$01FB ; UNA FUNC = SET BANK
LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC)
@@ -444,6 +517,12 @@ GOCPM:
CURDSK:
LD A,(CDISK) ; GET CURRENT USER/DISK
GOCCP:
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nTransfer to CCP...$"
#ENDIF
;
LD C,A ; SETUP C WITH CURRENT USER/DISK, ASSUME IT IS OK
JP CCP_LOC ; JUMP TO COMMAND PROCESSOR
;
@@ -1549,6 +1628,7 @@ LBA_IO:
;
DSK_IO2:
PUSH BC ; SAVE INCOMING FUNCTION, UNIT
RES 7,D ; CLEAR LBA BIT FOR UNA
LD B,C ; UNIT TO B
LD C,$41 ; UNA SET LBA
RST 08 ; CALL UNA
@@ -1680,6 +1760,12 @@ SLICE .DB 0 ; CURRENT SLICE
SPS .DW 0 ; SECTORS PER SLICE
STKSAV .DW 0 ; TEMP SAVED STACK POINTER
;
#IFDEF PLTWBW
#IF QPMTIMDAT
CLKDAT .FILL 7,0 ; RTC CLOCK DATA BUFFER
#ENDIF
#ENDIF
;
#IFDEF PLTWBW
BNKBIOS .DB 0 ; BIOS BANK ID
BNKUSER .DB 0 ; USER BANK ID
@@ -2011,7 +2097,13 @@ BUFPOOL .EQU $ ; START OF BUFFER POOL
HEAPEND .EQU CBIOS_END - 64 ; TOP OF HEAP MEM, END OF CBIOS LESS 32 ENTRY STACK
;
INIT:
DI ; NO INTERRUPTS FOR NOW
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nStarting INIT....$"
#ENDIF
;
;DI ; NO INTERRUPTS FOR NOW
; ADJUST BOOT VECTOR TO REBOOT ROUTINE
LD HL,REBOOT ; GET REBOOT ADDRESS
@@ -2068,12 +2160,21 @@ INIT:
LD (BNKBIOS),A ; ... AND SAVE IT
LD A,E ; GET USER BANK RETURNED IN E
LD (BNKUSER),A ; ... AND SAVE IT
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nReseting HBIOS....$"
#ENDIF
;
; SOFT RESET HBIOS
LD B,BF_SYSRESET ; HB FUNC: RESET
LD C,BF_SYSRES_INT ; WARM START
RST 08 ; DO IT
;
#IF DEBUG
CALL PRTSTRD
.DB "\r\nCopying HCB....$"
#ENDIF
; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB)
; FOR REFERENCE USE DURING INIT
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
@@ -2264,6 +2365,17 @@ INIT3:
LD DE,STR_TPA2 ; AND TPA SUFFIX
CALL WRITESTR
CALL NEWLINE ; FORMATTING
;
; SETUP QP/M TIMDAT ROUTINE VECTOR IN ZERO PAGE AT 0x0010
;
#IFDEF PLTWBW
#IF QPMTIMDAT
LD A,$C3 ; JP INSTRUCTION
LD ($0010),A ; STORE AT 0x0008
LD HL,TIMDAT ; ROUTINE ADDRESS
LD ($0011),HL ; SET VECTOR
#ENDIF
#ENDIF
;
RET ; DONE
;
@@ -2275,6 +2387,9 @@ ERR_BIOMEM:
;
;
;__________________________________________________________________________________________________
;
#IF AUTOSUBMIT
;
AUTOSUB:
;
; SETUP AUTO SUBMIT COMMAND (IF REQUIRED FILES EXIST)
@@ -2306,6 +2421,8 @@ AUTOSUB:
LDIR ; PATCH COMMAND LINE INTO CCP
RET ; DONE
;
#ENDIF
;
;
;__________________________________________________________________________________________________
DEV_INIT:

View File

@@ -2,8 +2,11 @@
; CBIOS BUILD CONFIGURATION OPTIONS
;
CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA)
AUTOSUBMIT .EQU TRUE ; PROCESS PROFILE.SUB AT STARTUP
QPMTIMDAT .EQU TRUE ; SUPPORT QP/M TIMDAT ROUTINE
WRTCACHE .EQU TRUE ; ENABLE WRITE CACHING IN CBIOS (DE)BLOCKING ALGORITHM
DSKTRACE .EQU FALSE ; ENABLE TRACING OF CBIOS DISK FUNCTION CALLS
DEBUG .EQU FALSE ; MISCELLANEOUS DEBUG TRACING
;
CPM_LOC .EQU $D000 ; LOCATION OF START OF CCP
;

View File

@@ -105,14 +105,61 @@ WRITESTR2:
POP AF
RET
;
#IF DEBUG
;
; PRINT A STRING AT ADDRESS SPECIFIED IN HL
; STRING MUST BE TERMINATED BY '$'
; USAGE:
; LD HL,MYSTR
; CALL PRTSTR
; ...
; MYSTR: .DB "HELLO$"
;
TSTPT:
PUSH DE
LD DE,STR_TSTPT
CALL WRITESTR
POP DE
JR REGDMP ; DUMP REGISTERS AND RETURN
PRTSTR:
LD A,(HL)
INC HL
CP '$'
RET Z
CALL COUT
JR PRTSTR
;
; PRINT A STRING DIRECT: REFERENCED BY POINTER AT TOP OF STACK
; STRING MUST BE TERMINATED BY '$'
; USAGE:
; CALL PRTSTRD
; .DB "HELLO$"
; ...
;
PRTSTRD:
EX (SP),HL
PUSH AF
CALL PRTSTR
POP AF
EX (SP),HL
RET
;
; PRINT A STRING INDIRECT: REFERENCED BY INDIRECT POINTER AT TOP OF STACK
; STRING MUST BE TERMINATED BY '$'
; USAGE:
; CALL PRTSTRI(MYSTRING)
; MYSTRING .DB "HELLO$"
;
PRTSTRI:
EX (SP),HL
PUSH AF
LD A,(HL)
INC HL
PUSH HL
LD H,(HL)
LD L,A
CALL PRTSTR
POP HL
INC HL
POP AF
EX (SP),HL
RET
;
#ENDIF
;
; PANIC: TRY TO DUMP MACHINE STATE
;
@@ -413,7 +460,52 @@ HEXCONV:
DAA
ADC A,40H
DAA
RET
RET
;
;****************************
; A(BCD) => A(BIN)
; [00H..99H] -> [0..99]
;****************************
;
BCD2BYTE:
PUSH BC
LD C,A
AND 0F0H
SRL A
LD B,A
SRL A
SRL A
ADD A,B
LD B,A
LD A,C
AND 0FH
ADD A,B
POP BC
RET
;
;*****************************
; A(BIN) => A(BCD)
; [0..99] => [00H..99H]
;*****************************
;
BYTE2BCD:
PUSH BC
LD B,10
LD C,-1
BYTE2BCD1:
INC C
SUB B
JR NC,BYTE2BCD1
ADD A,B
LD B,A
LD A,C
ADD A,A
ADD A,A
ADD A,A
ADD A,A
OR B
POP BC
RET
;
; PRINT A BYTE BUFFER IN HEX POINTED TO BY DE
; REGISTER A HAS SIZE OF BUFFER

BIN
Source/CPM22/License.pdf Normal file

Binary file not shown.

BIN
Source/CPM3/License.pdf Normal file

Binary file not shown.

View File

@@ -13,6 +13,7 @@ OTHERS = cpmldr.rel biosldr.rel cpm3res.sys cpm3bnk.sys loader.bin cpmldr.bin
OTHERS += biosldrc.rel biosldrd.rel
NODELETE = ccp.com gencpm.com genres.dat genbnk.dat bdos3.spr bnkbdos3.spr resbdos3.spr
NODELETE += readme.1st cpm3fix.pat
NODIFF = zpmbios3
DEST = ../../Binary/CPM3
TOOLS = ../../Tools

View File

@@ -30,6 +30,8 @@ RomWBW firmware includes:
* HBIOS (Hardware BIOS) providing support for the vast majority of
RetroBrew Computers I/O components
* Diagnostics and customizable debugging information.
* A complete operating system (either CP/M 2.2 or ZSDOS 1.1)
* A built-in CP/M filesystem containing the basic applications and
@@ -223,6 +225,18 @@ initialization routine. At this point, the prior HBIOS code has been
discarded and overwritten. Finally, the Boot Loader is invoked just like
a ROM Boot.
ROM-less Boot
-------------
Some hardware supported by RomWBW has a special mechanism for loading
the initial code. These systems have no ROM chips. However, they
have a small hardware bootstrap that loads a chunk of code from a
disk device directlly into RAM at system startup.
The startup then proceeds very much like the Application Boot
process described above. HBIOS is installed in it's operating bank
and control is passed to the loader.
Notes
-----
@@ -907,7 +921,7 @@ device number assigned by the driver.
Each RTC device is handled by an appropriate driver (DSRTC, BQRTC,
etc.) which is identified by a device type id from the table below.
**Type ID** | **Disk Device Type**
**Type ID** | **RTC Device Type**
----------- | --------------------
0x00 | DS1302
0x10 | BQ4845P
@@ -1387,7 +1401,7 @@ If the driver is able to generate the requested note, a success (0) is
returned, otherwise a non-zero error state will be returned.
The sound chip resolution and its oscillator limit the range and
accuracy of the notes played. The typically range of the AY-3-8910
accuracy of the notes played. The typical range of the AY-3-8910
is six octaves, Bb2/A#2-A7, where each value is a unique tone. Values
above and below can still be played but each quarter tone step may not
result in a note change.
@@ -1397,18 +1411,18 @@ to the corresponding octave and note.
| Note | Oct 0 | Oct 1 | Oct 2 | Oct 3 | Oct 4 | Oct 5 | Oct 6 | Oct 7 |
|:----- | -----:| -----:| -----:| -----:| -----:| -----:| -----:| -----:|
| Bb/A# | 0 | 48 | 96 | 144 | 192 | 240 | 288 | 336 |
| C | X | 8 | 56 | 104 | 152 | 200 | 248 | 296 |
| C#/Db | X | 12 | 60 | 108 | 156 | 204 | 252 | 300 |
| D | X | 16 | 64 | 112 | 160 | 208 | 256 | 304 |
| D#/Eb | X | 20 | 68 | 116 | 164 | 212 | 260 | 308 |
| E | X | 24 | 72 | 120 | 168 | 216 | 264 | 312 |
| F | X | 28 | 76 | 124 | 172 | 220 | 268 | 316 |
| F#/Gb | X | 32 | 80 | 128 | 176 | 224 | 272 | 320 |
| G | X | 36 | 84 | 132 | 180 | 228 | 276 | 324 |
| G#/Ab | X | 40 | 88 | 136 | 184 | 232 | 280 | 328 |
| A | X | 44 | 92 | 140 | 188 | 236 | 284 | 332 |
| A#/Bb | 0 | 48 | 96 | 144 | 192 | 240 | 288 | 336 |
| B | 4 | 52 | 100 | 148 | 196 | 244 | 292 | 340 |
| C | 8 | 56 | 104 | 152 | 200 | 248 | 296 | 344 |
| C#/Db | 12 | 60 | 108 | 156 | 204 | 252 | 300 | 348 |
| D | 16 | 64 | 112 | 160 | 208 | 256 | 304 | 352 |
| Eb/D# | 20 | 68 | 116 | 164 | 212 | 260 | 308 | 356 |
| E | 24 | 72 | 120 | 168 | 216 | 264 | 312 | 360 |
| F | 28 | 76 | 124 | 172 | 220 | 268 | 316 | 364 |
| F#/Gb | 32 | 80 | 128 | 176 | 224 | 272 | 320 | 368 |
| G | 36 | 84 | 132 | 180 | 228 | 276 | 324 | 372 |
| Ab/G# | 40 | 88 | 136 | 184 | 232 | 280 | 328 | 376 |
| A | 44 | 92 | 140 | 188 | 236 | 284 | 332 | 380 |
### Function 0x54 -- Sound Play (SNDPLAY)
@@ -2154,7 +2168,7 @@ IM1, the size of the table is the number of vectors chained together.
For IM2, the size of the table is the number of slots in the vector
table.
#### SYSINT Subfunction 0x10) -- Get Interrupt (INTGET)
#### SYSINT Subfunction 0x10 -- Get Interrupt (INTGET)
| _Entry Parameters_
| BC: 0xFC10
@@ -2168,7 +2182,7 @@ On entry, register E must contain an index into the interrupt vector
table. On return, HL will contain the address of the current interrupt
vector at the specified index.
#### SYSINT Subfunction 0x20) -- Set Interrupt (INTSET)
#### SYSINT Subfunction 0x20 -- Set Interrupt (INTSET)
| _Entry Parameters_
| BC: 0xFC20
@@ -2186,6 +2200,173 @@ be inserted in the table at the index. On return, HL will contain the
previous address in the table at the index.
`\clearpage`{=latex}
Errors and diagnostics
========
ROMWBW tries to provide useful information when a run time or build time
error occurs. Many sections of the code also have code blocks that can be
enable to aid in debugging and in some cases the level of reporting detail
can be customized.
Run time errors
--------
### PANIC
A panic error indicates a non-recoverable error. The processor status is displayed on the console
and interrupts are disabled and execution is halted. A cold boot or reset is required to restart.
Example error message:
\>>> PANIC: @06C4[DFA3:DFC3:0100:F103:04FC:0000:2B5E]
\*** System Halted ***
The format of the information provided is
@XXXX [-AF-:-BC-:-DE-:-HL-:-SP-:-IX-:-IY-]
Where @XXXX is the address the panic was called from. The other information
is the CPU register contents.
Possible reasons a PANIC may occur are:
- RAM Bank range error when attempting a read or write to a RAM disk.
- Sector read function has not been setup but a read was attempted.
- An interrupt vector has not been set up when an interrupt was received.
- There was an attempt to add more devices than the device table had room for.
- An illegal SD card command was encountered.
The @XXXX memory address can be cross referenced with the build source code to identify
which section of the software or hardware caused the fault.
### SYSCHK
A syschk error is identified when an internal error is detected. When this
occurs an error code is returned to the calling program in the A register.
A non-zero result indicates an error.
Syschk errors may be reported to the console. Whether this occurs depends on
the value of the diagnosis level equate DIAGLVL. By default syschk errors
are not reported to the console.
If the diagnosis level is set to display the diagnosis information, then
memory address, register dump and error code is displayed.
A key differance with the PANIC error is that execution may be continued.
Example error message:
\>>> SYSCHK: @06C4[DFA3:DFC3:0100:F103:04FC:0000:2B5E] FD
Continue (Y/N)
The format of the information provided is similar the PANIC report.
@XXXX [-AF-:-BC-:-DE-:-HL-:-SP-:-IX-:-IY-] YY
The syschk error codes YY is returned in the A register.
| Error | Code YY |
| ----------------------------------- | -------- |
| Success | 0x00 |
| Undefined Error | 0xFF |
| Function Not Implemented | 0xFE |
| Invalid Function | 0xFD |
| Invalid Unit Number | 0xFC |
| Out Of Memory | 0xFB |
| Parameter Out Of Range | 0xFA |
| Media Not Present | 0xF9 |
| Hardware Not Present | 0xF8 |
| I/O Error | 0xF7 |
| Write Request To Read-Only Media | 0xF6 |
| Device Timeout | 0xF5 |
| Invalid Configuration | 0xF4 |
| Internal Error | 0xF3 |
### Error Level reporting
placeholder
Build time errors
--------
### Build chain tool errors
place holder
### Assembly time check errors
placeholder
Diagnostics
--------
### DIAG
Progress through the boot and initialization process can be difficult to monitor
due to the lack of console or video output. Access to these output devices does
not become available until late the in the boot process. If these output devices
are also involved with the issue trying to be resolved then trouble shooting is
even more difficult.
ROMWBW can be configured to display boot progress with the assistance of additional
hardware. This take the form of an LED breakout debugging board connected to an
8-bit output port. As the boot code executes, the LED output display is updated.
To use a LED breakout board, it must be connected the computers data, reset and port
select lines.
To enable the DIAG option the following settings must be made in the systems .ini
configuration file, where 0xnn is the port address.
DIAGENABLE .SET TRUE
DIAGPORT .SET 0xnn
The following table shows the ROMWBW process steps in relation to the LED display.
| LED | ROMWBW Processes |
| -------- |:---------------------------------------------- |
| `........` | Initial boot |
| | Jump to start address |
| | Disable interrupts |
| | Set interrupt mode 1 |
| | Initialize critical ports and initial speed |
| `.......O` | Setup initial stack |
| | Memory manager and CPU configuration |
| | Set top bank to be RAM |
| `......OO` | Get and save battery condition |
| | Install HBIOS proxy in upper memory |
| | If platform is MBC reconfigure memory manager |
| | Setup "ROMLESS" HBIOS image or ... |
| | Copy HBIOS from ROM to RAM if RAM flag not set |
| | Jump to HBIOS in RAM |
| | Set running in RAM flag |
| `.....OOO` | Finalize configuration for running in RAM |
| | Check battery condition |
| | Check for recovery mode boot |
| `....OOOO` | Identify CPU type |
| `...OOOOO` | Set cpu oscillator speed |
| | Setup counter-timers |
| | Setup heap |
| `..OOOOOO` | Preconsole initialization |
| `.OOOOOOO` | Boot delay |
| | Set boot console device |
| | Bios announcement |
| `OOOOOOOO` | Display platform information |
| | Display memory configuration |
| | Display CPU family |
| | Verify ROM checksum |
| | Report battery condition |
| | Perform device driver initialization |
| | Report watchdog status |
| | Mark HBIOS heap so it is preserved |
| | Switch from boot console to CRT if active |
| | Display device summary |
| | Execute boot loader |
`\clearpage`{=latex}
### Appendix A Driver Instance Data fields
@@ -2217,3 +2398,5 @@ The following section outlines the read only data referenced by the
| DCNTL* | 14 | 1 | Z180 DMA/WAIT CONTROL |
* ONLY PRESENT FOR Z180 BUILDS

View File

@@ -411,20 +411,20 @@ functional on all of the OS variants included with RomWBW.
The following custom applications are found on the ROM disk and are,
therefore, globally available.
| Application | Description |
| ----------- | ---------------------------------------------------------------------------------------------------- |
| ASSIGN | Add, change, and delete drive letter assignments. Use ASSIGN /? for usage instructions. |
| SYSCOPY | Copy system image to a device to make it bootable. Use SYSCOPY with no parms for usage instructions. |
| MODE | Reconfigures serial ports dynamically. |
| FDU | Format and test floppy disks. Menu driven interface. |
| FORMAT | Will someday be a command line tool to format floppy disks. Currently does nothing! |
| XM | XModem file transfer program adapted to hardware. Automatically uses primary serial port on system. |
| FLASH | Will Sowerbutts' in-situ ROM programming utility. |
| FDISK80 | John Coffman's Z80 hard disk partitioning tool. See documentation in Doc directory. |
| TALK | Direct console I/O to a specified character device. |
| RTC | Manage and test the Real Time Clock hardware. |
| TIMER | Display value of running periodic system timer. |
| CPUSPD | Change the running CPU speed and wait states of the system. |
| Application | Description |
| ------------- | ---------------------------------------------------------------------------------------------------- |
| ASSIGN | Add, change, and delete drive letter assignments. Use ASSIGN /? for usage instructions. |
| SYSCOPY | Copy system image to a device to make it bootable. Use SYSCOPY with no parms for usage instructions. |
| MODE | Reconfigures serial ports dynamically. |
| FDU | Format and test floppy disks. Menu driven interface. |
| FORMAT | Will someday be a command line tool to format floppy disks. Currently does nothing! |
| XM | XModem file transfer program adapted to hardware. Automatically uses primary serial port on system. |
| FLASH | Will Sowerbutts' in-situ ROM programming utility. |
| FDISK80 | John Coffman's Z80 hard disk partitioning tool. See documentation in Doc directory. |
| TALK | Direct console I/O to a specified character device. |
| RTC | Manage and test the Real Time Clock hardware. |
| TIMER | Display value of running periodic system timer. |
| CPUSPD | Change the running CPU speed and wait states of the system. |
Some custom applications do not fit on the ROM disk. They are found on the
disk image files or the individual files can be found in the Binary\\Apps
@@ -434,7 +434,7 @@ directory of the distribution.
| ----------- | -------------------------------------------------------------- |
| TUNE | Play .PT2, .PT3, .MYM audio files. |
| FAT | Access MS-DOS FAT filesystems from RomWBW (based on FatFs). |
| INTTEST | Test interrupt vector hooking. |
| INTTEST | Test interrupt vector hooking. |
Additional documentation on all of these applications can be found in
"RomWBW Applications.pdf" in the Doc directory of the distribution.
@@ -463,6 +463,16 @@ will find some files on the ROM disk that will work with ZSDOS, but
will not work on CP/M 2.2. For example, `LDDS`, which loads the
ZSDOS date/time stamper will only run on ZSDOS.
## Flash ROM Disks
The limitation of ROM disks being read only can be overcome on some
platforms with the appropriate selection of Flash ROM chip and
system configuration. In this case the flash-file system can be
enabled which will allow the ROM disk to be read and written to.
Flash devices have a limited write lifespan and continual usage will
eventually wear out the device. It is not suited for high usage
applications.
## Disk Devices
While the RAM/ROM disks provide a functional system, they are not

View File

@@ -316,7 +316,9 @@ D+ | d1 d2 -- d1+d2 | Add double numbers
2>R | d -- | 2 to R
2R> | d -- | fetch 2 from R
M*/ | d1 n2 u3 -- d=(d1*n2)/u3 | double precision mult. div
SVC | hl de bc n -- hl de bc af | Execute a ROMWBW function
P! | n p -- | Write a byte to a I/O port
P@ | p -- n | Read a byte from and I/O port
# BASIC

View File

@@ -1,15 +1,36 @@
Font files for ROMWBW.
There are three fonts associated with ROMWBW supported hardware - ECB-SCG, ECB-CVDU and the ECB-VGA3.
8x8: 8x8 cell, mostly IBM CGA, first 16 differ, thin font
8x11: 8x11 cell, possibly VT-100?
8x16: 8x16 cell, IBM MDA
CGA: 8x16 cell, IBM CGA, normal (thick) CGA font, rows 8-15 are unused padding
Name Format Size Board & Display Mode
------------------------------------------------------------------------------------
font8x8u.bin 8x8 2048 ECB-SCG, ECB-VGA3 (80x60)
font8x11u.bin 8x11 2816 ECB-VGA3 (80x43)
font8x16u.bin 8x16 4096 ECB-CVDU (80x25), ECB-VGA3 (80x24, 80x25, 80x30), MBC-VDC
fontcgau.bin 8x8 4096 ECB-CVDU (80x25), MBC-VDC
There are multiple fonts associated with ROMWBW supported hardware:
For inclusion in HBIOS the .bin format files must be convert to assembler .asm format.
Board Driver Chip
-------- -------- --------
ECB-SCG tms.asm 9918
ECB-VDU vdu.asm 6545
ECB-CVDU cvdu.asm 8563
ECB-VGA3 vga.asm 6445
MBC-VDC cvdu.asm 8568
MBC-VDP tms.asm 9938/9958
Name Font Storage Size Board & Display Mode
--------------------------------------------------------------------------------------------
font8x8u.bin 6x8 8x8 2048 ECB-SCG, ECB-VGA3 (80x60), MBC-VDP
font8x11u.bin 8x11 8x11 2816 ECB-VGA3 (80x43)
font8x16u.bin 8x14 8x16 4096 ECB-CVDU (80x25), ECB-VGA3 (80x24, 80x25, 80x30), MBC-VDC
fontcgau.bin 8x8 8x16 4096 ECB-CVDU (80x25), MBC-VDC
Notes:
- The CGA font is roughly equivalent to the 8x8 font, but padded out to 8x16. Scan lines
8-15 are unused. The CVDU driver (8563 chip) always uses fonts defined in an 8x16 cell.
When the CVDU is configured for use with a CGA monitor, an 8x8 character cell is used,
but the font definition must still be 8x16. The CGA font is used for this.
For inclusion in HBIOS the .bin format files must be converted to assembler .asm format.
This is acheived using the fonttool utility and is completed automatically as part of the build process.
i.e. fonts files are converted to .asm format and then copied to the HBIOS directory.

View File

@@ -4,7 +4,7 @@ setlocal
if "%1" == "dist" goto :dist
::
:: Build [<platform> [<config> [<romsize> [<romname>]]]]
:: Build [<platform> [<config> [<romname>]]]
::
set TOOLS=../../Tools
@@ -28,11 +28,21 @@ PowerShell -ExecutionPolicy Unrestricted .\Build.ps1 %* || exit /b
::
:: Below, we process the command file created by the PowerShell script.
:: This sets the environment variables: Platform, Config, ROMName,
:: ROMSize, & CPUType.
:: & CPUType.
::
call build_env.cmd
::
:: Create a small app that is used to export key build variables of the build.
:: Then run the app to output a file with the variables. Finally, read the
:: file into variables usable in this batch file.
::
tasm -t80 -g3 -dCMD hbios_env.asm hbios_env.com hbios_env.lst || exit /b
zxcc hbios_env >hbios_env.cmd
call hbios_env.cmd
::
:: Start of the actual build process for a given ROM.
::
@@ -183,33 +193,34 @@ goto :eof
:dist
call Build SBC std 512 || exit /b
call Build SBC simh 512 || exit /b
call Build MBC std 512 || exit /b
call Build ZETA std 512 || exit /b
call Build ZETA2 std 512 || exit /b
call Build N8 std 512 || exit /b
call Build MK4 std 512 || exit /b
call Build RCZ80 std 512 || exit /b
call Build RCZ80 skz 512 || exit /b
call Build RCZ80 kio 512 || exit /b
call Build RCZ80 mt 512 || exit /b
call Build RCZ80 duart 512 || exit /b
call Build RCZ80 zrc 512 || exit /b
call Build RCZ80 zrc_ram 0 || exit /b
call Build RCZ180 ext 512 || exit /b
call Build RCZ180 nat 512 || exit /b
call Build RCZ280 ext 512 || exit /b
call Build RCZ280 nat 512 || exit /b
call Build RCZ280 nat_zz 512 || exit /b
call Build RCZ280 nat_zzr 256 || exit /b
call Build SCZ180 126 512 || exit /b
call Build SCZ180 130 512 || exit /b
call Build SCZ180 131 512 || exit /b
call Build SCZ180 140 512 || exit /b
call Build EZZ80 std 512 || exit /b
call Build EZZ80 tz80 512 || exit /b
call Build DYNO std 512 || exit /b
call Build UNA std 512 || exit /b
call Build SBC std || exit /b
call Build SBC simh || exit /b
call Build MBC std || exit /b
call Build ZETA std || exit /b
call Build ZETA2 std || exit /b
call Build N8 std || exit /b
call Build MK4 std || exit /b
call Build RCZ80 std || exit /b
call Build RCZ80 skz || exit /b
call Build RCZ80 kio || exit /b
call Build RCZ80 mt || exit /b
call Build RCZ80 duart || exit /b
call Build RCZ80 zrc || exit /b
call Build RCZ80 zrc_ram || exit /b
call Build RCZ180 ext || exit /b
call Build RCZ180 nat || exit /b
call Build RCZ280 ext || exit /b
call Build RCZ280 nat || exit /b
call Build RCZ280 nat_zz || exit /b
call Build RCZ280 nat_zzr || exit /b
call Build SCZ180 126 || exit /b
call Build SCZ180 130 || exit /b
call Build SCZ180 131 || exit /b
call Build SCZ180 140 || exit /b
call Build EZZ80 std || exit /b
call Build EZZ80 tz80 || exit /b
call Build DYNO std || exit /b
call Build UNA std || exit /b
call Build RPH std || exit /b
goto :eof

View File

@@ -1,4 +1,4 @@
param([string]$Platform = "", [string]$Config = "", [int]$RomSize = 512, [string]$ROMName = "")
param([string]$Platform = "", [string]$Config = "", [string]$ROMName = "")
# If a PowerShell exception occurs, just stop the script immediately.
$ErrorAction = 'Stop'
@@ -28,7 +28,7 @@ $ErrorAction = 'Stop'
#
$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "EZZ80", "UNA"
$PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO"
$PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO", "RPH"
$PlatformListZ280 = "RCZ280"
#
@@ -67,19 +67,6 @@ while ($true)
$Config = (Read-Host -prompt "Configuration").Trim()
}
#
# Establish the ROM size (in KB). It may have been passed in on the command line. Validate
# $RomSize and loop requesting a new value as long as it is not valid. The valid ROM sizes
# are just hard-coded for now. The ROM size does nothing more than determine the size of the
# ROM disk portion of the ROM image.
#
while ($true)
{
if (($RomSize -eq 0) -or ($RomSize -eq 128) -or ($RomSize -eq 256) -or ($RomSize -eq 512) -or ($RomSize -eq 1024)) {break}
$RomSize = (Read-Host -prompt "ROM Size [0|128|256|512|1024]").Trim()
}
#
# TASM should be invoked with the proper CPU type. Below, the CPU type is inferred
# from the platform.
@@ -103,7 +90,7 @@ while ($ROMName -eq "")
}
# Current date/time is queried here to be subsequently imbedded in image
$TimeStamp = '"' + (Get-Date -Format 'yyyy-MM-dd') + '"'
$TimeStamp = (Get-Date -Format 'yyyy-MM-dd')
#
# Since TASM has no mechanism to include files dynamically based on variables, a file
@@ -115,9 +102,8 @@ $TimeStamp = '"' + (Get-Date -Format 'yyyy-MM-dd') + '"'
@"
; RomWBW Configured for ${Platform} ${Config}, $(Get-Date -Format "s")
;
#DEFINE TIMESTAMP ${TimeStamp}
;
ROMSIZE .EQU ${ROMSize}
#DEFINE TIMESTAMP "${TimeStamp}"
#DEFINE CONFIG "${Platform}_${Config}"
;
#INCLUDE "${ConfigFile}"
;
@@ -134,6 +120,5 @@ ROMSIZE .EQU ${ROMSize}
set Platform=${Platform}
set Config=${Config}
set ROMName=${ROMName}
set ROMSize=${ROMSize}
set CPUType=${CPUType}
"@ | Out-File "build_env.cmd" -Encoding ASCII

View File

@@ -6,50 +6,42 @@ set -e
export ROM_PLATFORM
export ROM_CONFIG
export ROMSIZE
export CPUFAM
if [ "${ROM_PLATFORM}" == "dist" ] ; then
echo "!!!DISTRIBUTION BUILD!!!"
ROM_PLATFORM="DYNO"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="EZZ80"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="EZZ80"; ROM_CONFIG="tz80"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="MK4"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="N8"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ180"; ROM_CONFIG="ext"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ180"; ROM_CONFIG="nat"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="ext"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zz"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zzr"; ROMSIZE="256"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="kio"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="mt"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="duart"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="skz"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_ram"; ROMSIZE="0"; bash Build.sh
ROM_PLATFORM="SBC"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="SBC"; ROM_CONFIG="simh"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="MBC"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="SCZ180"; ROM_CONFIG="126"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="SCZ180"; ROM_CONFIG="130"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="SCZ180"; ROM_CONFIG="131"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="SCZ180"; ROM_CONFIG="140"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="UNA"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="ZETA"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="ZETA2"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh
ROM_PLATFORM="DYNO"; ROM_CONFIG="std"; bash Build.sh
ROM_PLATFORM="EZZ80"; ROM_CONFIG="std"; bash Build.sh
ROM_PLATFORM="EZZ80"; ROM_CONFIG="tz80"; bash Build.sh
ROM_PLATFORM="MK4"; ROM_CONFIG="std"; bash Build.sh
ROM_PLATFORM="N8"; ROM_CONFIG="std"; bash Build.sh
ROM_PLATFORM="RCZ180"; ROM_CONFIG="ext"; bash Build.sh
ROM_PLATFORM="RCZ180"; ROM_CONFIG="nat"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="ext"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zz"; bash Build.sh
ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zzr"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="kio"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="mt"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="duart"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="std"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="skz"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc"; bash Build.sh
ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_ram"; bash Build.sh
ROM_PLATFORM="RPH"; ROM_CONFIG="std"; bash Build.sh
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="SCZ180"; ROM_CONFIG="126"; bash Build.sh
ROM_PLATFORM="SCZ180"; ROM_CONFIG="130"; bash Build.sh
ROM_PLATFORM="SCZ180"; ROM_CONFIG="131"; bash Build.sh
ROM_PLATFORM="SCZ180"; ROM_CONFIG="140"; bash Build.sh
ROM_PLATFORM="UNA"; ROM_CONFIG="std"; bash Build.sh
ROM_PLATFORM="ZETA"; ROM_CONFIG="std"; bash Build.sh
ROM_PLATFORM="ZETA2"; ROM_CONFIG="std"; bash Build.sh
exit
fi
###if [ $1 == '-d' ] ; then
### shift
### diffdir=$1
### shift
### if [ -f $diffdir/build.inc ] ; then
### timestamp=$(grep TIMESTAMP $diffdir/build.inc | awk '{print $3}' | tr -d '\015"')
### echo diff build using $timestamp
### fi
###fi
# prompt if no match
platforms=($(find Config -name \*.asm -print | \
sed -e 's,Config/,,' -e 's/_.*$//' | sort -u))
@@ -68,36 +60,41 @@ done
CONFIGFILE=Config/${ROM_PLATFORM}_${ROM_CONFIG}.asm
if [ -z "${ROMSIZE}" ] ; then
ROMSIZE="512"
fi
while [ ! '(' "${ROMSIZE}" = 1024 -o "${ROMSIZE}" = 512 -o "${ROMSIZE}" = 256 -o "${ROMSIZE}" = 128 -o "${ROMSIZE}" = 0 ')' ] ; do
echo -n "Romsize :"
read ROMSIZE
done
if [ -z "${ROMNAME}" ] ; then
ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG}
fi
echo -e "\n\nBuilding $ROM_PLATFORM $ROM_CONFIG\n\n"
TIMESTAMP=$(date +%Y-%m-%d)
CONFIGFILE=Config/${ROM_PLATFORM}_${ROM_CONFIG}.asm
if [ "$1" = "-d" ] ; then
shift
diffdir=$1
shift
if [ -f $diffdir/build.inc ] ; then
timestamp=$(grep TIMESTAMP $diffdir/build.inc | awk '{print $3}' | tr -d '\015"')
echo diff build using $timestamp
fi
fi
echo Building $ROMNAME for $ROM_PLATFORM $ROM_CONFIG $ROMSIZE
CONFIGFILE=Config/${ROM_PLATFORM}_${ROM_CONFIG}.asm
cat <<- EOF > build.inc
; RomWBW Configured for ${ROM_PLATFORM} ${ROM_CONFIG} ${TIMESTAMP}
;
#DEFINE TIMESTAMP "${TIMESTAMP}"
;
ROMSIZE .EQU ${ROMSIZE}
#DEFINE CONFIG "${ROM_PLATFORM}_${ROM_CONFIG}"
;
#INCLUDE "${CONFIGFILE}"
;
EOF
make hbios_env.sh
source hbios_env.sh
echo Creating ${ROMSIZE}K ROM named ${ROMNAME}.rom
export OBJECTS
OBJECTS="${ROMNAME}.rom"
if [ "${ROM_PLATFORM}" != "UNA" ] ; then

View File

@@ -14,3 +14,4 @@ if exist *.sys del *.sys
if exist build.inc del build.inc
if exist font*.asm del font*.asm
if exist build_env.cmd del build_env.cmd
if exist hbios_env.cmd del hbios_env.cmd

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "TINYZ80"
;
#include "cfg_ezz80.asm"
;
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -22,7 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "Multi Board Computer"
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_mbc.asm"

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "ZZ80MB"
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "Config/RCZ280_nat.asm"

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "ZZRCC"
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "Config/RCZ280_nat.asm"
@@ -31,6 +29,7 @@
CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ
;
RAMSIZE .SET 256 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE .SET 256 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .SET 256 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
;
RAMLOC .SET 18 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE

View File

@@ -24,8 +24,6 @@
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#DEFINE PLATFORM_NAME "RC2014 (DUART)"
;
#include "Config/RCZ80_std.asm"
;
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "RC2014 (KIO)"
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "Config/RCZ80_std.asm"

View File

@@ -24,8 +24,6 @@
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#DEFINE PLATFORM_NAME "RC2014 (MT)"
;
#include "Config/RCZ80_std.asm"
;
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "RC2014 (SKZ)"
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "Config/RCZ80_std.asm"

View File

@@ -31,6 +31,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
;
RAMSIZE .SET 2048 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
;
MDROM .SET FALSE ; MD: ENABLE ROM DISK

View File

@@ -0,0 +1,41 @@
;
;==================================================================================================
; RHYOPHYRE 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_rph.asm"
;
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
;
INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
;
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)
;
RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
;
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
;
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

View File

@@ -62,6 +62,8 @@ SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
;
PRPENABLE .SET TRUE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
;
AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER (AY38910.ASM)
;
SN7ENABLE .SET TRUE ; SN : SN76489 DRIVER
SN76489ENABLE .SET TRUE ; SN: ENABLE SN76489 SOUND DRIVER (SN76489.ASM)
;
YM2612ENABLE .SET TRUE ; YM2612: ENABLE ECB VGM YM2612 SOUND DRIVER (YM2612.ASM)

View File

@@ -24,8 +24,6 @@
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#DEFINE PLATFORM_NAME "SBC (simh)"
;
#include "cfg_sbc.asm"
;
INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "SC126"
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_scz180.asm"

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "SC130"
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_scz180.asm"

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "SC131"
;
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_scz180.asm"

View File

@@ -22,8 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "SC140"
;
#include "cfg_scz180.asm"
;
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ

View File

@@ -1,30 +1,36 @@
MOREDIFF = camel80.bin game.bin hbios_rom.bin nascom.bin prefix.bin usrrom.bin \
MOREDIFF = game.bin hbios_rom.bin nascom.bin usrrom.bin \
dbgmon.bin hbios_app.bin imgpad2.bin osimg1.bin osimg2.bin romldr.bin \
eastaegg.bin hbios_img.bin osimg.bin tastybasic.bin \
game.bin updater.bin usrrom.bin
eastaegg.bin hbios_img.bin osimg.bin game.bin updater.bin usrrom.bin
SUBDIRS =
DEST = ../../Binary
TOOLS =../../Tools
OTHERS = *.img *.rom *.com *.upd *.bin *.z80 cpm.sys zsys.sys Build.inc font*.asm *.dat
include $(TOOLS)/Makefile.inc
OTHERS = *.img *.rom *.com *.upd *.bin *.z80 cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh
FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm fontcgac.asm fontcgau.asm
# DIFFMAKE = 1
ifneq ($(findstring $(ROM_PLATFORM), N8 MK4 RCZ180 SCZ180 DYNO),)
TASM=$(BINDIR)/uz80as -t hd64180
endif
ifneq ($(findstring $(ROM_PLATFORM), RCZ280),)
TASM=$(BINDIR)/uz80as -t z280
endif
# DIFFPATH = $(DIFFTO)/Binary
ifeq ($(DIFFMAKE),1)
DIFFBUILD := -d $(DIFFTO)/Source/HBIOS
endif
DIFFPATH = $(DIFFTO)/Binary
ifeq ($(OBJECTS),)
start:
chmod +x Build.sh
bash Build.sh $(DIFFBUILD)
endif
include $(TOOLS)/Makefile.inc
FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm fontcgac.asm fontcgau.asm
ifeq ($(CPUFAM),2)
TASM=$(BINDIR)/uz80as -t hd64180
else ifeq ($(CPUFAM),3)
TASM=$(BINDIR)/uz80as -t z280
endif
DEPS=prereq dbgmon.bin romldr.bin nascom.bin tastybasic.bin game.bin eastaegg.bin updater.bin usrrom.bin imgpad2.bin
@@ -38,19 +44,15 @@ endif
ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG}
#$(info DEPS=$(DEPS))
#$(info ROM_PLATFORM=$(ROM_PLATFORM))
#$(info ROM_CONFIG=$(ROM_CONFIG))
#$(info ROMSIZE=$(ROMSIZE))
#$(info ROMNAME=$(ROMNAME))
# $(info DEPS=$(DEPS))
# $(info ROM_PLATFORM=$(ROM_PLATFORM))
# $(info ROM_CONFIG=$(ROM_CONFIG))
# $(info ROMSIZE=$(ROMSIZE))
# $(info ROMNAME=$(ROMNAME))
# $(info CPUFAM=$(CPUFAM))
# $(info TASM=$(TASM))
all::
if [ -z "$(OBJECTS)" ] ; then \
chmod +x Build.sh ; \
bash Build.sh ; \
fi
$(ROMNAME).rom $(ROMNAME).com $(ROMNAME).img &: $(ROMDEPS)
$(OBJECTS) : $(ROMDEPS)
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin ../CPM22/cpm_$(BIOS).bin >osimg.bin
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >osimg_small.bin
if [ $(ROM_PLATFORM) != UNA ] ; then \
@@ -98,6 +100,12 @@ hbios_app.bin: hbios.asm build.inc $(DEPS)
hbios_img.bin: hbios.asm build.inc $(DEPS)
$(TASM) -dIMGBOOT hbios.asm hbios_img.bin hbios_img.lst
hbios_env.com: hbios_env.asm build.inc
$(TASM) -dBASH hbios_env.asm hbios_env.com hbios_env.lst
hbios_env.sh: hbios_env.com
$(ZXCC) hbios_env.com >hbios_env.sh
romldr.bin: build.inc
dbgmon.bin: build.inc
nascom.bin: build.inc

View File

@@ -280,6 +280,8 @@ ANSI_STSTR: ; STATE == STRING DATA
;==================================================================================================
;
ANSI_C0DISP:
CP $07 ; BEL
JP Z,ANSI_BEL
CP $08 ; BS: BACKSPACE
JP Z,ANSI_BS
CP $09 ; HT: TAB
@@ -615,6 +617,9 @@ ANSI_FF:
CALL ANSI_VDADISP ; PERFORM FILL
JP ANSI_XY ; HOME CURSOR AND RETURN
;
ANSI_BEL:
JP SND_BEEP ; BEEP THE SPEAKER
;
ANSI_BS:
LD A,(ANSI_COL) ; GET CURRENT COLUMN
DEC A ; BACK IT UP BY ONE

View File

@@ -75,10 +75,14 @@ ASCI1_BASE .EQU Z180_BASE + 1 ; RELATIVE TO Z180 INTERNAL IO PORTS
;
ASCI_RTS .EQU %00010000 ; ~RTS BIT OF CNTLA REG
;
#IF (INTMODE == 2)
#IF (ASCIINTS)
;
#IF (INTMODE == 2)
;
ASCI0_IVT .EQU IVT(INT_SER0)
ASCI1_IVT .EQU IVT(INT_SER1)
;
#ENDIF
;
#ENDIF
;
@@ -115,25 +119,29 @@ ASCI_PREINIT2:
ADD IY,DE ; BUMP IY TO NEXT ENTRY
DJNZ ASCI_PREINIT0 ; LOOP UNTIL DONE
;
#IF (INTMODE >= 1)
#IF (ASCIINTS)
;
#IF (INTMODE >= 1)
; 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)
#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
#ENDIF
;
#IF (INTMODE == 2)
#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
;
#ENDIF
;
#ENDIF
;
@@ -188,7 +196,9 @@ ASCI_INIT1:
;
; RECEIVE INTERRUPT HANDLER
;
#IF (INTMODE > 0)
#IF (ASCIINTS)
;
#IF (INTMODE > 0)
;
; IM1 ENTRY POINT
;
@@ -232,10 +242,10 @@ ASCI_INTRCV1:
ADD A,8 ; BUMP TO RDR PORT
LD C,A ; PUT IN C, B IS STILL ZERO
IN A,(C) ; READ PORT
#IF (ASCIBOOT != 0)
#IF (ASCIBOOT != 0)
CP ASCIBOOT ; REBOOT REQUEST?
JP Z,SYS_RESCOLD ; IF SO, DO IT, NO RETURN
#ENDIF
#ENDIF
LD B,A ; SAVE BYTE READ
LD L,(IY+6) ; SET HL TO
LD H,(IY+7) ; ... START OF BUFFER STRUCT
@@ -292,6 +302,8 @@ ASCI_INTRCV3:
ASCI_INTRCV4:
OR $FF ; NZ SET TO INDICATE INT HANDLED
RET ; AND RETURN
;
#ENDIF
;
#ENDIF
;
@@ -309,7 +321,7 @@ ASCI_FNTBL:
.ECHO "*** INVALID ASCI FUNCTION TABLE ***\n"
#ENDIF
;
#IF (INTMODE == 0)
#IF ((!ASCIINTS) | (INTMODE == 0))
;
ASCI_IN:
CALL ASCI_IST ; CHECK FOR CHAR READY
@@ -395,7 +407,7 @@ ASCI_OUT:
;
;
;
#IF (INTMODE == 0)
#IF ((!ASCIINTS) | (INTMODE == 0))
;
ASCI_IST:
CALL ASCI_ICHK ; ASCI INPUT CHECK
@@ -522,7 +534,7 @@ ASCI_INITGO:
OUT (C),L ; WRITE CNTLB VALUE
INC C ; BUMP TO
INC C ; ... STAT REG, B IS STILL 0
#IF (INTMODE > 0)
#IF ((ASCIINTS) & (INTMODE > 0))
LD A,$08 ; SET RIE BIT ON
#ELSE
XOR A ; CLEAR RIE/TIE
@@ -534,7 +546,7 @@ ASCI_INITGO:
LD A,$66 ; STATIC VALUE FOR ASEXT
OUT (C),A ; WRITE ASEXT REG
;
#IF (INTMODE > 0)
#IF ((ASCIINTS) & (INTMODE > 0))
;
; RESET THE RECEIVE BUFFER
LD E,(IY+6)
@@ -609,6 +621,24 @@ ASCI_DETECT:
; DUE TO ENCODING BAUD IS ALWAYS DIVISIBLE BY 75
; Z180 DIVISOR IS ALWAYS A FACTOR OF 160
;
; CNTLB= XXPXDSSS
; FAILSAVE = 00100000
;
; PS (PRESCALE): 0=/10, 1=/30
; DR (DIVIDE RATIO): 0=/16, 1=/64
; SS2 SS1 SS0
; --- --- ---
; 0 0 0 /1
; 0 0 1 /2
; 0 1 0 /4
; 0 1 1 /8
; 1 0 0 /16
; 1 0 1 /32
; 1 1 0 /64
;
; FAILSAFE: CLOCK / 30 / 16 / 1 = CLOCK / 480
; IF CLOCK=18432000, BAUD=38400
;
; X := CPU_HZ / 160 / 75 ==> SIMPLIFIED ==> X := CPU_KHZ / 12
; X := X / (BAUD / 75)
; IF X % 3 == 0, THEN (PS := 1, X := X / 3) ELSE PS=0
@@ -769,7 +799,7 @@ ASCI_STR_ASCIB .DB "ASCI W/BRG$"
;
ASCI_DEV .DB 0 ; DEVICE NUM USED DURING INIT
;
#IF (INTMODE == 0)
#IF ((!ASCIINTS) | (INTMODE == 0))
;
ASCI0_RCVBUF .EQU 0
ASCI1_RCVBUF .EQU 0

View File

@@ -46,7 +46,7 @@ AUD_NOTE:
LD DE, 48
CALL DIV16
; BC IS OCTAVE COUNT
; HL is NOTE WITIN OCTAVE
; HL is NOTE WITHIN OCTAVE
ADD HL, HL
pop de
ADD HL, DE

View File

@@ -327,7 +327,8 @@ AY_NOTE:
LD H, (HL) ; SO WE CAN UPDATE IT FOR THE REQUIRED OCTAVE
LD L, A
;
LD A,AY_SCALE-1 ; THE NOTE TABLE PERIOD DATA HAS BEEN
;LD A,AY_SCALE - 1 ; THE NOTE TABLE PERIOD DATA HAS BEEN
LD A,AY_SCALE ; THE NOTE TABLE PERIOD DATA HAS BEEN
ADD A,C ; PRESCALED TO MAINTAIN RANGE SO ALLOW
LD B,A ; FOR THIS WHEN CHANGING OCTAVE
AY_NOTE1:
@@ -534,7 +535,7 @@ AY_EI:
AY_WRTPSG:
CALL AY_DI
#IFDEF SBCV2004
LD A,(RTCVAL) ; GET CURRENT RTC LATCH VALUE
LD A,(HB_RTCVAL) ; GET CURRENT RTC LATCH VALUE
OR %00001000 ; SBC-V2-004 CHANGE
OUT (RTCIO),A ; TO HALF CLOCK SPEED
#ENDIF
@@ -553,7 +554,7 @@ AY_WRTPSG:
OUT0 (Z180_DCNTL),A ; AND RESTORE IT
#ENDIF
#IFDEF SBCV2004
LD A,(RTCVAL) ; SBC-V2-004 CHANGE TO
LD A,(HB_RTCVAL) ; SBC-V2-004 CHANGE TO
OUT (RTCIO),A ; NORMAL CLOCK SPEED
#ENDIF
JP AY_EI
@@ -565,7 +566,7 @@ AY_WRTPSG:
AY_RDPSG:
CALL AY_DI
#IFDEF SBCV2004
LD A,(RTCVAL) ; GET CURRENT RTC LATCH VALUE
LD A,(HB_RTCVAL) ; GET CURRENT RTC LATCH VALUE
OR %00001000 ; SBC-V2-004 CHANGE
OUT (RTCIO),A ; TO HALF CLOCK SPEED
#ENDIF
@@ -584,7 +585,7 @@ AY_RDPSG:
OUT0 (Z180_DCNTL),A ; AND RESTORE IT
#ENDIF
#IFDEF SBCV2004
LD A,(RTCVAL) ; SBC-V2-004 CHANGE TO
LD A,(HB_RTCVAL) ; SBC-V2-004 CHANGE TO
OUT (RTCIO),A ; NORMAL CLOCK SPEED
#ENDIF
JP AY_EI
@@ -617,51 +618,51 @@ AYT_REGWR .DB "\r\nOUT AY-3-8910 $"
; ASSUMING A CLOCK OF 1843200 THIS MAPS TO A0#
;
AY3NOTETBL:
.DW AY_RATIO / 2913
.DW AY_RATIO / 2956
.DW AY_RATIO / 2999
.DW AY_RATIO / 3042
.DW AY_RATIO / 3086
.DW AY_RATIO / 3131
.DW AY_RATIO / 3177
.DW AY_RATIO / 3223
.DW AY_RATIO / 3270
.DW AY_RATIO / 3318
.DW AY_RATIO / 3366
.DW AY_RATIO / 3415
.DW AY_RATIO / 3464
.DW AY_RATIO / 3515
.DW AY_RATIO / 3566
.DW AY_RATIO / 3618
.DW AY_RATIO / 3670
.DW AY_RATIO / 3724
.DW AY_RATIO / 3778
.DW AY_RATIO / 3833
.DW AY_RATIO / 3889
.DW AY_RATIO / 3945
.DW AY_RATIO / 4003
.DW AY_RATIO / 4061
.DW AY_RATIO / 4120
.DW AY_RATIO / 4180
.DW AY_RATIO / 4241
.DW AY_RATIO / 4302
.DW AY_RATIO / 4365
.DW AY_RATIO / 4428
.DW AY_RATIO / 4493
.DW AY_RATIO / 4558
.DW AY_RATIO / 4624
.DW AY_RATIO / 4692
.DW AY_RATIO / 4760
.DW AY_RATIO / 4829
.DW AY_RATIO / 4899
.DW AY_RATIO / 4971
.DW AY_RATIO / 5043
.DW AY_RATIO / 5116
.DW AY_RATIO / 5191
.DW AY_RATIO / 5266
.DW AY_RATIO / 5343
.DW AY_RATIO / 5421
.DW AY_RATIO / 5499
.DW AY_RATIO / 5579
.DW AY_RATIO / 5661
.DW AY_RATIO / 5743
.DW AY_RATIO / 2913 ; A0#/B0b 178977250 / 2913 = 61440; PROOF: 61440 >> 3 = 7680, 3579545 / 7680 / 16 = 29.13
.DW AY_RATIO / 2956 ;
.DW AY_RATIO / 2999 ;
.DW AY_RATIO / 3042 ;
.DW AY_RATIO / 3086 ; B0
.DW AY_RATIO / 3131 ;
.DW AY_RATIO / 3177 ;
.DW AY_RATIO / 3223 ;
.DW AY_RATIO / 3270 ; C1
.DW AY_RATIO / 3318 ;
.DW AY_RATIO / 3366 ;
.DW AY_RATIO / 3415 ;
.DW AY_RATIO / 3464 ; C1#/D1b
.DW AY_RATIO / 3515 ;
.DW AY_RATIO / 3566 ;
.DW AY_RATIO / 3618 ;
.DW AY_RATIO / 3670 ; D1
.DW AY_RATIO / 3724 ;
.DW AY_RATIO / 3778 ;
.DW AY_RATIO / 3833 ;
.DW AY_RATIO / 3889 ; D1#/E1b
.DW AY_RATIO / 3945 ;
.DW AY_RATIO / 4003 ;
.DW AY_RATIO / 4061 ;
.DW AY_RATIO / 4120 ; E1
.DW AY_RATIO / 4180 ;
.DW AY_RATIO / 4241 ;
.DW AY_RATIO / 4302 ;
.DW AY_RATIO / 4365 ; F1
.DW AY_RATIO / 4428 ;
.DW AY_RATIO / 4493 ;
.DW AY_RATIO / 4558 ;
.DW AY_RATIO / 4624 ; F1#/G1b
.DW AY_RATIO / 4692 ;
.DW AY_RATIO / 4760 ;
.DW AY_RATIO / 4829 ;
.DW AY_RATIO / 4899 ; G1
.DW AY_RATIO / 4971 ;
.DW AY_RATIO / 5043 ;
.DW AY_RATIO / 5116 ;
.DW AY_RATIO / 5191 ; G1#/A1b
.DW AY_RATIO / 5266 ;
.DW AY_RATIO / 5343 ;
.DW AY_RATIO / 5421 ;
.DW AY_RATIO / 5499 ; A1
.DW AY_RATIO / 5579 ;
.DW AY_RATIO / 5661 ;
.DW AY_RATIO / 5743 ;

View File

@@ -161,9 +161,7 @@ BQRTC_DISPATCH:
JP Z, BQRTC_SETALM ; Set Alarm
DEC A
JP Z, BQRTC_DEVICE ; Report RTC device info
CALL SYSCHK
LD A,ERR_NOFUNC
OR A
SYSCHKERR(ERR_NOFUNC)
RET
;
@@ -173,9 +171,7 @@ BQRTC_GETBYT:
BQRTC_SETBYT:
BQRTC_GETBLK:
BQRTC_SETBLK:
CALL SYSCHK
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL)
RET
; RTC Get Time

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "DYNO"
#DEFINE PLATFORM_NAME "Dyno", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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)
@@ -64,6 +66,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -82,6 +85,9 @@ DSRTCENABLE .EQU FALSE ; 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 TRUE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM)
BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
;
@@ -100,6 +106,7 @@ DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM)
UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
;
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
@@ -115,9 +122,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -167,7 +174,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
;
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -181,6 +188,8 @@ HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.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
@@ -201,3 +210,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "EASYZ80"
#DEFINE PLATFORM_NAME "Easy-Z80", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
DEFSERCFG .EQU SER_115200_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
;
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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 $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)
@@ -65,6 +67,7 @@ WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -88,6 +91,9 @@ 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
;
@@ -153,9 +159,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -205,7 +211,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
;
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -223,6 +229,11 @@ HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E4 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $E8 ; LPT 1: REGISTERS BASE ADR
;
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
@@ -243,3 +254,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -8,11 +8,11 @@
; USED ONLY AS A REFERENCE TO HELP MANAGE THE FULL SET OF POSSIBLE SETTINGS AND
; KEEP THINGS CONSISTENT.
;
#DEFINE PLATFORM_NAME "ROMWBW"
#DEFINE PLATFORM_NAME "RomWBW", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -21,6 +21,7 @@ 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
@@ -29,8 +30,9 @@ INTMODE .EQU 0 ; 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_NONE ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED)
MEMMGR .EQU MM_NONE ; 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
MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY)
@@ -60,6 +62,11 @@ N8_ACR .EQU $94 ; N8: AUXILLARY CONTROL REGISTER (ACR) ADR
N8_RMAP .EQU $96 ; N8: ROM PAGE REGISTER ADR
N8_DEFACR .EQU $1B ; N8: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE)
;
RPH_PPI0 .EQU $88 ; RPH: FIRST PARALLEL PORT REGISTERS BASE ADR
RPH_RTC .EQU $84 ; RPH: RTC LATCH REGISTER ADR
RPH_ACR .EQU $80 ; RPH: AUXILLARY CONTROL REGISTER (ACR) ADR
RPH_DEFACR .EQU $00 ; RPH: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE)
;
MK4_IDE .EQU $80 ; MK4: IDE REGISTERS BASE ADR
MK4_XAR .EQU $88 ; MK4: EXTERNAL ADDRESS REGISTER (XAR) ADR
MK4_SD .EQU $89 ; MK4: SD CARD CONTROL REGISTER ADR
@@ -91,6 +98,7 @@ WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -117,6 +125,9 @@ DSRTCENABLE .EQU FALSE ; 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
;
@@ -153,6 +164,7 @@ 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)
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
@@ -205,9 +217,11 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30]
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC]
CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM)
GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH]
GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA]
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
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]
@@ -260,12 +274,12 @@ 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 $44 ; PPIDE 2: PPI REGISTERS BASE ADR
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_NONE ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_NONE ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -291,6 +305,11 @@ 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)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
;
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)
@@ -315,3 +334,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "Multi Board Computer"
#DEFINE PLATFORM_NAME "Nhyodyne", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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_HILO ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO
CPUSPDDEF .EQU SPD_LOW ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW
@@ -32,8 +33,9 @@ INTMODE .EQU 0 ; 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_MBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED)
MEMMGR .EQU MM_MBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH]
MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY)
MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY)
;
@@ -61,6 +63,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU TRUE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
@@ -87,6 +90,9 @@ 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
;
@@ -141,9 +147,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30]
CVDUENABLE .EQU TRUE ; 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]
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM)
TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
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]
@@ -197,12 +203,12 @@ 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 $44 ; PPIDE 2: PPI REGISTERS BASE ADR
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]
SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -223,6 +229,11 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
;
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)
@@ -238,12 +249,16 @@ AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
SNMODE .EQU SNMODE_NONE ; DRIVER MODE: SNMODE_[NONE|RC2014|VGM]
;
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC]
AY38910ENABLE .EQU TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU 3579545 / 2 ; DEFAULT TO CPUOSC / 4
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 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "MARK IV"
#DEFINE PLATFORM_NAME "Mark IV", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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
;
@@ -67,6 +69,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -93,6 +96,9 @@ 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
;
@@ -122,6 +128,7 @@ UARTRC .EQU FALSE ; 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
@@ -140,9 +147,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30]
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC]
CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
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]
@@ -189,7 +196,7 @@ IDE2B8BIT .EQU FALSE ; 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 2 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP
PPIDE0BASE .EQU $44 ; PPIDE 0: PPI REGISTERS BASE ADR
PPIDE0BASE .EQU $14 ; 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
@@ -200,7 +207,7 @@ 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_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -224,6 +231,11 @@ 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)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
;
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)
@@ -248,3 +260,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "N8"
#DEFINE PLATFORM_NAME "N8", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_N8 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED)
MEMMGR .EQU MM_N8 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH]
RAMBIAS .EQU 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE
RAMLOC .EQU 0 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE
;
@@ -69,6 +71,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
@@ -95,6 +98,9 @@ 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
;
@@ -124,6 +130,7 @@ UARTRC .EQU FALSE ; 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
@@ -142,9 +149,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30]
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC]
CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM)
TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
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]
@@ -222,6 +229,8 @@ 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)
;
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)
@@ -246,3 +255,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "RC2014"
#DEFINE PLATFORM_NAME "RC2014", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
DEFSERCFG .EQU SER_115200_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
;
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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)
@@ -67,6 +69,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -90,6 +93,9 @@ 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
;
@@ -125,6 +131,7 @@ 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
@@ -159,9 +166,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -217,7 +224,7 @@ 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_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR]
SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE
SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -238,6 +245,8 @@ 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)
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
@@ -258,3 +267,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "RC2014"
#DEFINE PLATFORM_NAME "RC2014", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
DEFSERCFG .EQU SER_115200_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
;
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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]
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)
@@ -72,6 +74,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -95,6 +98,9 @@ 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
;
@@ -175,9 +181,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -233,7 +239,7 @@ 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_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR]
SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE
SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -254,6 +260,8 @@ 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)
;
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
@@ -274,3 +282,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "RC2014"
#DEFINE PLATFORM_NAME "RC2014", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ INTMODE .EQU 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
DEFSERCFG .EQU SER_115200_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
;
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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 $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)
@@ -66,6 +68,7 @@ WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -89,6 +92,9 @@ 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
;
@@ -164,9 +170,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -222,7 +228,7 @@ 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_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR]
SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE
SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -243,6 +249,11 @@ 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)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E4 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $E8 ; LPT 1: REGISTERS BASE ADR
;
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
@@ -263,3 +274,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

260
Source/HBIOS/cfg_rph.asm Normal file
View File

@@ -0,0 +1,260 @@
;
;==================================================================================================
; ROMWBW 2.X CONFIGURATION FOR RHYOPHYRE
;==================================================================================================
;
; 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 "Rhyophyre", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_RPH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
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_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_RPH ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH]
RAMBIAS .EQU 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE
RAMLOC .EQU 0 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE
;
Z180_BASE .EQU $40 ; 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
;
RPH_PPI0 .EQU $88 ; RPH: FIRST PARALLEL PORT REGISTERS BASE ADR
RPH_RTC .EQU $84 ; RPH: RTC LATCH REGISTER ADR
RPH_ACR .EQU $80 ; RPH: AUXILLARY CONTROL REGISTER (ACR) ADR
RPH_DEFACR .EQU $20 ; RPH: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE)
;
RTCIO .EQU RPH_RTC ; 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 FALSE ; ENABLE CTC PERIODIC TIMER
;
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]
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; 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
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)
;
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]
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 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 ; UART: LINE CONFIG FOR UART PORTS
UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED
UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART
UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART
UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART
UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART
;
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 FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
;
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_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC]
CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
GDCENABLE .EQU TRUE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM)
GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH]
GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA]
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
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]
;
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_N8 ; 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)
FDMEDIA .EQU FDM144 ; FD: DEFAULT MEDIA FORMAT FDM[720|144|360|120|111]
FDMEDIAALT .EQU FDM720 ; FD: ALTERNATE MEDIA FORMAT FDM[720|144|360|120|111]
FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS
;
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 TRUE ; 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 RPH_PPI0 ; 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 FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
SDMODE .EQU SDMODE_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR]
SDPPIBASE .EQU RPH_PPI0 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE
SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC 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 FALSE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT
PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PRPCONENABLE .EQU FALSE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.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)
;
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
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR
;
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
SNMODE .EQU SNMODE_NONE ; DRIVER MODE: SNMODE_[NONE|RC2014|VGM]
;
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_N8 ; 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "SBC"
#DEFINE PLATFORM_NAME "Single Board Computer", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ INTMODE .EQU 0 ; 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED)
MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH]
MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY)
MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY)
;
@@ -61,6 +63,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
@@ -87,6 +90,9 @@ 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
;
@@ -141,9 +147,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30]
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC]
CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
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]
@@ -197,12 +203,12 @@ 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 $44 ; PPIDE 2: PPI REGISTERS BASE ADR
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]
SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -223,6 +229,11 @@ 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)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
@@ -247,3 +258,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "SCZ180"
#DEFINE PLATFORM_NAME "Small Computer", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
DEFSERCFG .EQU SER_115200_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
;
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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
;
@@ -62,6 +64,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $0D ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
@@ -85,6 +88,9 @@ 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
;
@@ -120,6 +126,7 @@ 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
@@ -154,9 +161,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -212,7 +219,7 @@ 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]
SDMODE .EQU SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -233,6 +240,8 @@ 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)
;
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
@@ -253,3 +262,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,12 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "UNA"
#DEFINE PLATFORM_NAME "UNA", " [", CONFIG, "]"
;
#INCLUDE "../UBIOS/ubios.inc"
;
;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA]
;
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
@@ -26,7 +27,10 @@ CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
;
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
;
RTCIO .EQU $70 ; RTC LATCH REGISTER ADR
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "ZETA"
#DEFINE PLATFORM_NAME "Zeta", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ INTMODE .EQU 0 ; 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED)
MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH]
MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY)
MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY)
;
@@ -53,6 +55,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
@@ -74,6 +77,9 @@ 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
;
@@ -114,9 +120,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -146,7 +152,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
;
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -163,9 +169,8 @@ PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
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)
;
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)
@@ -181,3 +186,6 @@ 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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -11,11 +11,11 @@
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS
; FOR THE PLATFORM.
;
#DEFINE PLATFORM_NAME "ZETA V2"
#DEFINE PLATFORM_NAME "Zeta 2", " [", CONFIG, "]"
;
#INCLUDE "hbios.inc"
;
PLATFORM .EQU PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC]
PLATFORM .EQU PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH]
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
@@ -24,6 +24,7 @@ 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
@@ -32,8 +33,9 @@ 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_CHK .EQU 0 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED)
MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC]
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 $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)
@@ -64,6 +66,7 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
@@ -85,6 +88,9 @@ 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
;
@@ -125,9 +131,9 @@ 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)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.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_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD]
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD]
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
@@ -157,7 +163,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER
;
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT]
SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
@@ -175,6 +181,8 @@ HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.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
@@ -186,7 +194,9 @@ SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
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)
;
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB)
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76469s/CTC)

View File

@@ -112,7 +112,7 @@ CTC_PREINIT1:
;
; CTC USES 4 CONSECUTIVE VECTOR POSITIONS, ONE FOR
; EACH CHANNEL. BELOW WE SET THE BASE VECTOR TO THE
; START OF THE IVT, SO THE FIRST FOUR ENTIRES OF THE
; START OF THE IVT, SO THE FIRST FOUR ENTRIES OF THE
; IVT CORRESPOND TO CTC CHANNELS A-D.
LD A,INT_CTC0A * 2
OUT (CTCBASE),A ; SETUP CTC BASE INT VECTOR

View File

@@ -171,9 +171,7 @@ CVDU_VDADEV:
RET
CVDU_VDASCS:
CALL SYSCHK ; NOT IMPLEMENTED (YET)
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED (YET)
RET
CVDU_VDASCP:

View File

@@ -38,6 +38,8 @@ ENA_XM .EQU FALSE ; NO ROOM FOR BOTH DSKY+XMODEM
ENA_XM .EQU TRUE ; INCLUDE XMODEM IF SPACE AVAILABLE
#ENDIF
;
ENA_MBC6502 .EQU FALSE ; ENABLE OR DISABLE MBC6502 OPTION
;
#INCLUDE "util.asm"
;
;__UART_ENTRY_________________________________________________________________
@@ -69,6 +71,8 @@ UART_ENTRY:
; R XXXX - RUN A PROGRAM AT ADDRESS XXXX
; S XX - SET ACTIVE BANK TO XX
; T XXXX - X-MODEM TRANSFER TO MEMORY LOCATION XXXX
; U - SET BANK TO PREVIOUS BANK
; 6 XX - TRANSFER CONTROL TO MBC6502 UNIT XX
; X - EXIT MONITOR
;
;__COMMAND_PARSE______________________________________________________________
@@ -126,6 +130,12 @@ SERIALCMDLOOP:
#IF (BIOS == BIOS_WBW)
CP 'S' ; IS IT A "S" (Y/N)
JP Z,SETBNK ; SET BANK COMMAND
CP 'U' ; IS IT A "U" (Y/N)
JP Z,UNSETBNK ; UNSET (REVERT) BANK COMMAND
#IF ((PLATFORM = PLT_MBC) & ENA_MBC6502)
CP '6' ; IS IT A "6" (Y/N)
JP Z,MBC6502 ; TRANSFER TO MBC6502 COMMAND
#ENDIF
#ENDIF
CP 'X' ; IS IT A "X" (Y/N)
JP Z,EXIT ; EXIT COMMAND
@@ -218,6 +228,8 @@ SETBNK:
LD HL,TXT_IMERR
CALL PRTSTR
#ELSE
LD A,($FFE0) ; GET AND SAVE
LD (BNKSAV),A ; CURRENT BANK
CALL BYTEPARM ; GET BANK NUMBER
JP C,ERR ; HANDLE DATA ENTRY ERROR
LD C,A ; PUT IN C FOR FOR FUNC CALL
@@ -226,6 +238,25 @@ SETBNK:
#ENDIF
JP SERIALCMDLOOP ; NEXT COMMAND
;
;__UNSETBNK___________________________________________________________________
;
; PERFORM UNSET BANK ACTION - REVERT TO BANK BEFORE PREVIOUS SET
;_____________________________________________________________________________
;
UNSETBNK:
#IF (INTMODE == 1)
LD HL,TXT_IMERR
CALL PRTSTR
#ELSE
LD A,(BNKSAV)
LD C,A ; PUT IN C FOR FOR FUNC CALL
LD B,BF_SYSSETBNK ; SET BANK FUNCTION
CALL $FFF0 ; C HAS BANK, DO IT
#ENDIF
JP SERIALCMDLOOP ; NEXT COMMAND
;
BNKSAV .DB 00H ; OLD BANK FROM BEFORE SET
;
#ENDIF
;
;__RUN________________________________________________________________________
@@ -358,7 +389,8 @@ XMLOAD: CALL WORDPARM ; GET STARTING LOCATION
CALL NEWLINE
;
LD BC,$F8F0 ; GET CPU SPEED
RST 08 ; AND MULTIPLY
CALL $FFF0 ; CALL HBIOS
; RST 08 ; AND MULTIPLY
LD A,L ; BY 4
PUSH AF
ADD A,A ; TO CREATE
@@ -769,6 +801,30 @@ HELP:
CALL PRTSTR ; DISPLAY IT
JP SERIALCMDLOOP ; AND BACK TO COMMAND LOOP
;
;__MBC6502____________________________________________________________________
;
; TRANSFER CONTROL TO MBC6502
;_____________________________________________________________________________
;
;
#IF (BIOS == BIOS_WBW)
#IF ((PLATFORM = PLT_MBC) & ENA_MBC6502)
MBC6502:
CALL BYTEPARM ; GET BYTE VALUE (FILL VALUE) INTO A
CPL ; UNIT 0 = FFH, 1 = FEH ETC
LD C,A
;
IN A,(C) ; EXECUTE
NOP ; TRANSFER
;
LD A,($FFE0) ; GET PREVIOUS BANK
OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR
OUT (MPCL_ROM),A ; SET ROM PAGE SELECTOR
;
JP SERIALCMDLOOP ; AND BACK TO COMMAND LOOP
#ENDIF
#ENDIF
;
;__ERR________________________________________________________________________
;
; SYNTAX ERROR
@@ -1205,9 +1261,17 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):"
.TEXT "\r\nP xxxx - Program RAM at address xxxx"
.TEXT "\r\nR xxxx [[yy] [zzzz]] - Run code at address xxxx"
.TEXT "\r\n Pass yy and zzzz to register A and BC"
#IF (BIOS == BIOS_WBW)
.TEXT "\r\nS xx - Set bank to xx"
.TEXT "\r\nU - Set bank to previous bank"
#ENDIF
#IF (ENA_XM)
.TEXT "\r\nT xxxx - X-modem transfer to memory location xxxx"
#ENDIF
#IF (BIOS == BIOS_WBW)
#IF ((PLATFORM == PLT_MBC) & ENA_MBC6502)
.TEXT "\r\n6 xx - Transfer control to MBC6502 unit xx"
#ENDIF
#ENDIF
.TEXT "\r\nX - Exit monitor"
.TEXT "$"

397
Source/HBIOS/ds1501rtc.asm Normal file
View File

@@ -0,0 +1,397 @@
;
;==================================================================================================
; Maxim DS1501/DS1511 Y2K-Compliant Watchdog RTC Driver
;==================================================================================================
;
; THIS DRIVER CODE WAS CONTRIBUTED TO ROMWBW BY JPELLETIER 3:59 PM 7/24/2022
;
; Register Addresses (HEX / BCD):
;
; +---+-----+---------------+-------------------+------------------+----------------+
; |ADR| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | RANGE | REGISTER |
; +---+-----+---------------+-------------------+------------------+----------------+
; | 0 | 0 | 10-Second | 1-Second | 00-59 | Seconds |
; +---+-----+-----+---------+-------------------+------------------+----------------+
; | 1 | 0 | 10-Minute | 1-Minute | 00-59 | Minutes |
; +---+-----+-----+---------+-------------------+------------------+----------------+
; | 2 | 0 | 0 | 10-Hour | 1-Hour | 00-23 | Hours |
; +---+-----+-----+----+----+-------------------+------------------+----------------+
; | 3 | 0 | 0 | 0 | 0 | 0 | Day Of Week | 01-07 | Day Of Week |
; +---+-----+-----+----+----+----+--------------+------------------+----------------+
; | 4 | 0 | 0 | 10-Date | 1-Date | 01-31 | Date |
; +---+-----+-----+----+----+-------------------+------------------+----------------+
; | 5 |/EOSC|/E32K|BB32|10Mo| 1-Month | 01-12 | Month |
; +---+-----+-----+----+----+-------------------+------------------+----------------+
; | 6 | 10-Year | 1-Year | 00-99 | Year |
; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+
; | 7 | 10-Century | 1-Century | 00-39 | Century |
; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+
; | 8 | AM1| 10-Second | 1-Second | 00-59 | Seconds Alarm |
; +---+-----+---------------+-------------------+------------------+----------------+
; | 9 | AM2| 10-Minute | 1-Minute | 00-59 | Minutes Alarm |
; +---+-----+-----+---------+-------------------+------------------+----------------+
; | A | AM3| 0 | 10-Hour | 1-Hour | 00-23 | Hours Alarm |
; +---+-----+-----+----+----+-------------------+------------------+----------------+
; | B | AM4|DY/DT| 10-date | Day/Date | 1-7/01-31 | Day/Date Alarm |
; +---+-----+-----+----+----+----+--------------+------------------+----------------+
; | C | 0.1-Second | 0.01-Second | 00-99 | Watchdog |
; +---+-----+-----+---------+-------------------+------------------+----------------+
; | D | 10-Second | 1-Second | 00-99 | Watchdog |
; +---+-----+-----+---------+-------------------+------------------+----------------+
; | E | BLF1| BLF2| PRS| PAB| TDF| KSF| WDF|IRQF| | ControlA |
; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+
; | F | TE| CS| BME| TPE| TIE| KIE| WDE| WDS| | ControlB |
; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+
; |10 | Extended RAM Address | 00-FF | RAM Address |
; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+
; |11 | Reserved | | |
; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+
; |12 | Reserved | | |
; +---+--+--+-----+----+----+----+----+----+----+------------------+----------------+
; |13 | Extended RAM Data | 00-FF | RAM Data |
; +---+--+--+-----+----+----+----+----+----+----+------------------+----------------+
; |14-1F | Reserved | | |
; +------+--+-----+----+----+----+----+----+----+------------------+----------------+
; * = Unused bits; unwritable and read as 0.
; 0 = should be set to 0 for valid time/calendar range.
; Clock calendar data is BCD. Automatic leap year adjustment.
; Day-Of-Week coded as Sunday = 1 through Saturday = 7.
; Constants
;By defining 2 bases, this allows some flexibility for address decoding
DS1501NVM_BASE .EQU DS1501RTC_BASE + $10
DS1501RTC_SEC .EQU DS1501RTC_BASE + $00
DS1501RTC_MIN .EQU DS1501RTC_BASE + $01
DS1501RTC_HOUR .EQU DS1501RTC_BASE + $02
DS1501RTC_WEEK_DAY .EQU DS1501RTC_BASE + $03
DS1501RTC_DAY .EQU DS1501RTC_BASE + $04
DS1501RTC_MONTH .EQU DS1501RTC_BASE + $05
DS1501RTC_YEAR .EQU DS1501RTC_BASE + $06
DS1501RTC_CENT .EQU DS1501RTC_BASE + $07
DS1501RTC_SEC_ALM .EQU DS1501RTC_BASE + $08
DS1501RTC_MIN_ALM .EQU DS1501RTC_BASE + $09
DS1501RTC_HOUR_ALM .EQU DS1501RTC_BASE + $0A
DS1501RTC_DAY_ALM .EQU DS1501RTC_BASE + $0B
DS1501RTC_WDOG1 .EQU DS1501RTC_BASE + $0C
DS1501RTC_WDOG2 .EQU DS1501RTC_BASE + $0D
DS1501RTC_CONTROLA .EQU DS1501RTC_BASE + $0E
DS1501RTC_CONTROLB .EQU DS1501RTC_BASE + $0F
DS1501RTC_RAMADDR .EQU DS1501NVM_BASE + $00
DS1501RTC_RAMDATA .EQU DS1501NVM_BASE + $03
DS1501RTC_HIGH .EQU %11110000
DS1501RTC_LOW .EQU %00001111
;ControlA bit masks
;BLF1| BLF2| PRS| PAB| TDF| KSF| WDF|IRQF
DS1501RTC_IRQF .EQU %00000001
DS1501RTC_WDF .EQU %00000010
DS1501RTC_KSF .EQU %00000100
DS1501RTC_TDF .EQU %00001000
DS1501RTC_PAB .EQU %00010000
DS1501RTC_PRS .EQU %00100000
DS1501RTC_BLF2 .EQU %01000000
DS1501RTC_BLF1 .EQU %10000000
;ControlB bit masks
;TE| CS| BME| TPE| TIE| KIE| WDE| WDS|
DS1501RTC_WDS .EQU %00000001
DS1501RTC_WDE .EQU %00000010
DS1501RTC_KIE .EQU %00000100
DS1501RTC_TIE .EQU %00001000
DS1501RTC_TPE .EQU %00010000
DS1501RTC_BME .EQU %00100000
DS1501RTC_CS .EQU %01000000
DS1501RTC_TE .EQU %10000000
DS1501RTC_BUFSIZE .EQU 6 ; 6 BYTE BUFFER (YYMMDDHHMMSS)
; RTC Device Initialization Entry
DS1501RTC_INIT:
CALL NEWLINE ; Formatting
PRTS("DS1501RTC: IO=0x$")
LD A, DS1501RTC_BASE
CALL PRTHEXBYTE
CALL NEWLINE ; Formatting
PRTS("DS1501NVM: IO=0x$")
LD A, DS1501NVM_BASE
CALL PRTHEXBYTE
IN A,(DS1501RTC_CONTROLB) ;clear any pending interrupt flags
XOR A ; Zero A
OR DS1501RTC_TE ;enable time updates
OUT (DS1501RTC_CONTROLB), A
CALL DS1501RTC_LOAD
; DISPLAY CURRENT TIME
PRTS(" $")
LD A, (DS1501RTC_BUF_MON)
CALL PRTHEXBYTE
PRTS("/$")
LD A, (DS1501RTC_BUF_DAY)
CALL PRTHEXBYTE
PRTS("/$")
LD A, (DS1501RTC_BUF_YEAR)
CALL PRTHEXBYTE
PRTS(" $")
LD A, (DS1501RTC_BUF_HOUR)
CALL PRTHEXBYTE
PRTS(":$")
LD A, (DS1501RTC_BUF_MIN)
CALL PRTHEXBYTE
PRTS(":$")
LD A, (DS1501RTC_BUF_SEC)
CALL PRTHEXBYTE
LD BC,DS1501RTC_DISPATCH
CALL RTC_SETDISP
XOR A ; Signal success
RET
; RTC Device Function Dispatch Entry
; A: Result (OUT), 0=OK, Z=OK, NZ=Error
; B: Function (IN)
DS1501RTC_DISPATCH:
LD A, B ; Get requested function
AND $0F ; Isolate Sub-Function
JP Z, DS1501RTC_GETTIM ; Get Time
DEC A
JP Z, DS1501RTC_SETTIM ; Set Time
DEC A
JP Z, DS1501RTC_GETBYT ; Get NVRAM Byte Value
DEC A
JP Z, DS1501RTC_SETBYT ; Set NVRAM Byte Value
DEC A
JP Z, DS1501RTC_GETBLK ; Get NVRAM Data Block Value
DEC A
JP Z, DS1501RTC_SETBLK ; Set NVRAM Data Block Value
DEC A
JP Z, DS1501RTC_GETALM ; Get Alarm
DEC A
JP Z, DS1501RTC_SETALM ; Set Alarm
;
; NVRAM FUNCTIONS ARE NOT IMPLEMENTED YET
;
DS1501RTC_GETBYT:
DS1501RTC_SETBYT:
DS1501RTC_GETBLK:
DS1501RTC_SETBLK:
CALL PANIC
; RTC Get Time
; A: Result (OUT), 0=OK, Z=OK, NZ=Error
; HL: Date/Time Buffer (OUT)
; Buffer format is BCD: YYMMDDHHMMSS
; 24 hour time format is assumed
;
DS1501RTC_GETTIM:
EX DE, HL
CALL DS1501RTC_LOAD
; Now copy to read destination (Interbank Save)
LD A, BID_BIOS ; Copy from BIOS bank
LD (HB_SRCBNK), A ; Set it
LD A, (HB_INVBNK) ; Copy to current user bank
LD (HB_DSTBNK), A ; Set it
LD BC, DS1501RTC_BUFSIZE ; Length is 6 bytes
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; Copy the clock data
#IF (INTMODE == 1)
EI
#ENDIF
;
; CLEAN UP AND RETURN
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
; RTC Set Time
; A: Result (OUT), 0=OK, Z=OK, NZ=Error
; HL: Date/Time Buffer (IN)
; Buffer Format is BCD: YYMMDDHHMMSS
; 24 hour time format is assumed
;
DS1501RTC_SETTIM:
;
; Copy incoming time data to our time buffer
LD A, (HB_INVBNK) ; Copy from current user bank
LD (HB_SRCBNK), A ; Set it
LD A, BID_BIOS ; Copy to BIOS bank
LD (HB_DSTBNK), A ; Set it
LD DE, DS1501RTC_BUF ; Destination Address
LD BC, DS1501RTC_BUFSIZE ; Length is 6 bytes
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; Copy the clock data
#IF (INTMODE == 1)
EI
#ENDIF
; Write to clock
LD HL, DS1501RTC_BUF
CALL DS1501RTC_SUSPEND
LD A, (HL)
OUT (DS1501RTC_YEAR), A ; Write Year
INC HL
LD A, (HL)
OUT (DS1501RTC_MONTH), A ; Write Month
INC HL
LD A, (HL)
OUT (DS1501RTC_DAY), A ; Write Day
INC HL
LD A, (HL)
OUT (DS1501RTC_HOUR), A ; Write Hour
INC HL
LD A, (HL)
OUT (DS1501RTC_MIN), A ; Write Minute
INC HL
LD A, (HL)
OUT (DS1501RTC_SEC), A ; Write Second
CALL DS1501RTC_RESUME
; clean up and return
XOR A ; Signal success
RET ; And return
; RTC Get Alarm
; A: Result (OUT), 0=OK, Z=OK, NZ=Error
; HL: Date/Time Buffer (OUT)
; Buffer format is BCD: YYMMDDHHMMSS
; 24 hour time format is assumed
;
DS1501RTC_GETALM:
EX DE, HL
LD HL, DS1501RTC_BUF
PUSH HL ; Save address of source buffer
CALL DS1501RTC_SUSPEND
XOR A
LD (HL), A ; Read Year
INC HL
LD (HL), A ; Read Month
INC HL
IN A, (DS1501RTC_DAY_ALM) ; Read Day
LD (HL), A
INC HL
IN A, (DS1501RTC_HOUR_ALM) ; Read Hour
LD (HL), A
INC HL
IN A, (DS1501RTC_MIN_ALM) ; Read Minute
LD (HL), A
INC HL
IN A, (DS1501RTC_SEC_ALM) ; Read Second
LD (HL), A
CALL DS1501RTC_RESUME
POP HL ; Restore address of source buffer
; Now copy to read destination (Interbank Save)
LD A, BID_BIOS ; Copy from BIOS bank
LD (HB_SRCBNK), A ; Set it
LD A, (HB_INVBNK) ; Copy to current user bank
LD (HB_DSTBNK), A ; Set it
LD BC, DS1501RTC_BUFSIZE ; Length is 6 bytes
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; Copy the clock data
#IF (INTMODE == 1)
EI
#ENDIF
;
; CLEAN UP AND RETURN
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
; RTC Set Alarm
; A: Result (OUT), 0=OK, Z=OK, NZ=Error
; HL: Date/Time Buffer (IN)
; Buffer Format is BCD: YYMMDDHHMMSS
; 24 hour time format is assumed
;
DS1501RTC_SETALM:
; Copy incoming time data to our time buffer
LD A, (HB_INVBNK) ; Copy from current user bank
LD (HB_SRCBNK), A ; Set it
LD A, BID_BIOS ; Copy to BIOS bank
LD (HB_DSTBNK), A ; Set it
LD DE, DS1501RTC_BUF ; Destination Address
LD BC, DS1501RTC_BUFSIZE ; Length is 6 bytes
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; Copy the clock data
#IF (INTMODE == 1)
EI
#ENDIF
; Write to clock
LD HL, DS1501RTC_BUF_DAY
CALL DS1501RTC_SUSPEND
LD A, (HL)
OUT (DS1501RTC_DAY_ALM), A ; Write Day
INC HL
LD A, (HL)
OUT (DS1501RTC_HOUR_ALM), A ; Write Hour
INC HL
LD A, (HL)
OUT (DS1501RTC_MIN_ALM), A ; Write Minute
INC HL
LD A, (HL)
OUT (DS1501RTC_SEC_ALM), A ; Write Second
CALL DS1501RTC_RESUME
; clean up and return
XOR A ; Signal success
RET ; And return
DS1501RTC_SUSPEND:
IN A, (DS1501RTC_CONTROLB) ; Suspend Clock
AND ~DS1501RTC_TE
OUT (DS1501RTC_CONTROLB), A
RET
DS1501RTC_RESUME:
IN A, (DS1501RTC_CONTROLB) ; Resume Clock
OR DS1501RTC_TE
OUT (DS1501RTC_CONTROLB), A
RET
DS1501RTC_LOAD:
LD HL, DS1501RTC_BUF
PUSH HL ; Save address of source buffer
CALL DS1501RTC_SUSPEND
IN A, (DS1501RTC_YEAR) ; Read Year
LD (HL), A
INC HL
IN A, (DS1501RTC_MONTH) ; Read Month
LD (HL), A
INC HL
IN A, (DS1501RTC_DAY) ; Read Day
LD (HL), A
INC HL
IN A, (DS1501RTC_HOUR) ; Read Hour
LD (HL), A
INC HL
IN A, (DS1501RTC_MIN) ; Read Minute
LD (HL), A
INC HL
IN A, (DS1501RTC_SEC) ; Read Second
LD (HL), A
CALL DS1501RTC_RESUME
POP HL ; Restore address of source buffer
RET
; Working Variables
DS1501RTC_BUF:
DS1501RTC_BUF_YEAR: .DB 0 ; Year
DS1501RTC_BUF_MON: .DB 0 ; Month
DS1501RTC_BUF_DAY: .DB 0 ; Day
DS1501RTC_BUF_HOUR: .DB 0 ; Hour
DS1501RTC_BUF_MIN: .DB 0 ; Minute
DS1501RTC_BUF_SEC: .DB 0 ; Second

View File

@@ -100,9 +100,7 @@ DS7_DISPATCH:
JP Z, DS7_SETALM ; SET ALARM
DEC A
JP Z, DS7_DEVICE ; REPORT RTC DEVICE INFO
CALL SYSCHK
LD A,ERR_NOFUNC
OR A
SYSCHKERR(ERR_NOFUNC)
RET
;
;-----------------------------------------------------------------------------
@@ -269,9 +267,7 @@ DS7_GETBLK:
DS7_SETBLK:
DS7_SETALM
DS7_GETALM
CALL SYSCHK
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL)
RET
;-----------------------------------------------------------------------------
; REPORT RTC DEVICE INFO
@@ -329,7 +325,7 @@ DS7_RL1:CALL PCF_READI2C
;
#IF (0)
LD A,8
LD DE,DS7_BUF ; DISLAY DATA READ
LD DE,DS7_BUF ; DISPLAY DATA READ
CALL PRTHEXBUF ;
CALL NEWLINE
#ENDIF

View File

@@ -3,7 +3,7 @@
; DSKY (DISPLAY AND KEYBOARD) ROUTINES
;==================================================================================================
;
; THE DSKY MAY COSESIDE ON THE SAME PPI BUS AS A PPISD. IT MAY NOT
; 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)

View File

@@ -66,28 +66,28 @@
; RTC LATCH WRITE
; ---------------
;
; BIT SBC SBC-004 MFPIC N8 N8-CSIO MK4 SC130 SC131 SC126 MBC
; ----- ------- ------- ------- ------- ------- ------- ------- ------- --------------- -------
; D7 RTC_OUT RTC_OUT -- RTC_OUT RTC_OUT RTC_OUT -- -- RTC_OUT,I2C_SDA RTC_OUT
; D6 RTC_CLK RTC_CLK -- RTC_CLK RTC_CLK RTC_CLK -- -- RTC_CLK RTC_CLK
; D5 /RTC_WE /RTC_WE -- /RTC_WE /RTC_WE /RTC_WE -- -- /RTC_WE /RTC_WE
; D4 RTC_CE RTC_CE -- RTC_CE RTC_CE RTC_CE -- -- RTC_CE RTC_CE
; D3 NC CLKSEL /RTC_CE NC NC NC -- -- /SPI_CS2 CLKSEL
; D2 NC SPK RTC_CLK SPI_CS SPI_CS NC /SPI_CS1/SPI_CS1/SPI_CS1 SPK
; D1 -- -- RTC_WE SPI_CLK NC NC -- -- FS LED1
; D0 -- -- RTC_OUT SPI_DI NC NC -- -- I2C_SCL LED0
; BIT SBC SBC-004 MFPIC N8 N8-CSIO MK4 SC130 SC131 SC126 MBC RPH
; ----- ------- ------- ------- ------- ------- ------- ------- ------- --------------- ------- -------
; D7 RTC_OUT RTC_OUT -- RTC_OUT RTC_OUT RTC_OUT -- -- RTC_OUT,I2C_SDA RTC_OUT RTC_OUT
; D6 RTC_CLK RTC_CLK -- RTC_CLK RTC_CLK RTC_CLK -- -- RTC_CLK RTC_CLK RTC_CLK
; D5 /RTC_WE /RTC_WE -- /RTC_WE /RTC_WE /RTC_WE -- -- /RTC_WE /RTC_WE /RTC_WE
; D4 RTC_CE RTC_CE -- RTC_CE RTC_CE RTC_CE -- -- RTC_CE RTC_CE RTC_CE
; D3 NC CLKSEL /RTC_CE NC NC NC -- -- /SPI_CS2 CLKSEL --
; D2 NC SPK RTC_CLK SPI_CS SPI_CS NC /SPI_CS1/SPI_CS1/SPI_CS1 SPK --
; D1 -- -- RTC_WE SPI_CLK NC NC -- -- FS LED1 --
; D0 -- -- RTC_OUT SPI_DI NC NC -- -- I2C_SCL LED0 --
;
; RTC LATCH READ
; --------------
;
; D7 -- -- -- -- -- -- -- -- I2C_SDA --
; D6 CFG CFG -- SPI_DO CFG -- -- -- -- CFG
; D5 -- -- -- -- -- -- -- -- -- --
; D4 -- -- -- -- -- -- -- -- -- --
; D3 -- -- -- -- -- -- -- -- -- --
; D2 -- -- -- -- -- -- -- -- -- --
; D1 ---- -- -- -- -- -- -- -- -- CLKSEL
; D0 RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN -- -- RTC_IN RTC_IN
; D7 -- -- -- -- -- -- -- -- I2C_SDA -- --
; D6 CFG CFG -- SPI_DO CFG -- -- -- -- CFG --
; D5 -- -- -- -- -- -- -- -- -- -- --
; D4 -- -- -- -- -- -- -- -- -- -- --
; D3 -- -- -- -- -- -- -- -- -- -- --
; D2 -- -- -- -- -- -- -- -- -- -- --
; D1 ---- -- -- -- -- -- -- -- -- CLKSEL --
; D0 RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN -- -- RTC_IN RTC_IN RTC_IN
;
#IF (DSRTCMODE == DSRTCMODE_STD)
;
@@ -118,7 +118,7 @@ DS2d8k .EQU %10101011 ; 2 DIODES 8K RESISTOR
;
#IF (DSRTCMODE == DSRTCMODE_MFPIC)
;
DSRTC_IO .EQU $43 ; RTC PORT ON MF/PIC
DSRTC_IO .EQU $13 ; RTC PORT ON MF/PIC
;
DSRTC_DATA .EQU %00000001 ; BIT 0 IS RTC DATA OUT
DSRTC_CLK .EQU %00000100 ; BIT 2 IS RTC CLOCK (CLK)
@@ -247,9 +247,7 @@ DSRTC_DISPATCH:
JP Z,DSRTC_SETALM ; SET ALARM
DEC A
JP Z,DSRTC_DEVICE ; REPORT RTC DEVICE INFO
CALL SYSCHK
LD A,ERR_NOFUNC
OR A
SYSCHKERR(ERR_NOFUNC)
RET
;
; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR
@@ -258,9 +256,7 @@ DSRTC_GETBLK:
DSRTC_SETBLK:
DSRTC_GETALM:
DSRTC_SETALM:
CALL SYSCHK
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL)
RET
;
; RTC GET TIME

View File

@@ -490,9 +490,7 @@ FD_FNTBL:
FD_VERIFY:
FD_FORMAT:
FD_DEFMED:
CALL SYSCHK ; INVALID SUB-FUNCTION
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL) ; INVALID SUB-FUNCTION
RET
;
;
@@ -1149,9 +1147,7 @@ FD_RUN1:
JR Z,FC_WRITE
CP DOP_READID
JR Z,FC_READID
CALL SYSCHK
LD A,ERR_NOFUNC
OR A
SYSCHKERR(ERR_NOFUNC)
RET
FD_RUNCHK:

329
Source/HBIOS/gdc.asm Normal file
View File

@@ -0,0 +1,329 @@
;======================================================================
; UPD7220 GRAPHICS DEVICE CONTROLLER
;======================================================================
;
;======================================================================
; GDC DRIVER - CONSTANTS
;======================================================================
;
#IF (GDCMODE == GDCMODE_ECB)
GDC_BASE .EQU $?? ; GDC BASE I/O PORT
GDC_DAC_BASE .EQU $?? ; RAMDAC BASE I/O PORT
#ENDIF
;
#IF (GDCMODE == GDCMODE_RPH)
GDC_KBDDATA .EQU $8C ; KBD CTLR DATA PORT
GDC_KBDST .EQU $8D ; KBD CTLR STATUS/CMD PORT
GDC_BASE .EQU $90 ; GDC BASE I/O PORT
GDC_DAC_BASE .EQU $98 ; RAMDAC BASE I/O PORT
#ENDIF
;
GDC_STAT .EQU GDC_BASE + 0 ; STATUS PORT
GDC_CMD .EQU GDC_BASE + 1 ; COMMAND PORT
GDC_PARAM .EQU GDC_BASE + 0 ; PARAM PORT
GDC_READ .EQU GDC_BASE + 1 ; READ PORT
GDC_DAC_WR .EQU GDC_DAC_BASE + 0 ; RAMDAC ADR WRITE
GDC_DAC_RD .EQU GDC_DAC_BASE + 3 ; RAMDAC ADR READ
GDC_DAC_PALRAM .EQU GDC_DAC_BASE + 1 ; RAMDAC PALETTE RAM
GDC_DAC_PIXMSK .EQU GDC_DAC_BASE + 2 ; RAMDAC PIXEL READ MASK
GDC_DAC_OVL_WR .EQU GDC_DAC_BASE + 4 ; RAMDAC OVERLAY WRITE
GDC_DAC_OVL_RD .EQU GDC_DAC_BASE + 7 ; RAMDAC OVERLAY READ
GDC_DAC_OVL_RAM .EQU GDC_DAC_BASE + 5 ; RAMDAC OVERLAY RAM
;
GDC_ROWS .EQU 25
GDC_COLS .EQU 80
;
; *** TODO: CGA AND EGA ARE PLACEHOLDERS. THESE EQUATES SHOULD
; BE USED TO ALLOW FOR MULTIPLE MONITOR TIMINGS AND/OR FONT
; DEFINITIONS.
;
#IF (GDCMON == GDCMON_CGA)
#DEFINE USEFONTCGA
#DEFINE GDC_FONT FONTCGA
#ENDIF
;
#IF (GDCMON == GDCMON_EGA)
#DEFINE USEFONT8X16
#DEFINE GDC_FONT FONT8X16
#ENDIF
;
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;
;======================================================================
; GDC DRIVER - INITIALIZATION
;======================================================================
;
GDC_INIT:
LD IY,GDC_IDAT ; POINTER TO INSTANCE DATA
CALL NEWLINE
PRTS("GDC: MODE=$")
#IF (GDCMODE == GDCMODE_ECB)
PRTS("ECB$")
#ENDIF
#IF (GDCMODE == GDCMODE_RPH)
PRTS("RPH$")
#ENDIF
;
#IF (GDCMON == GDCMON_CGA)
PRTS(" CGA$")
#ENDIF
#IF (GDCMON == GDCMON_EGA)
PRTS(" EGA$")
#ENDIF
;
PRTS(" IO=0x$")
LD A,GDC_BASE
CALL PRTHEXBYTE
CALL GDC_PROBE ; CHECK FOR HW PRESENCE
JR Z,GDC_INIT1 ; CONTINUE IF HW PRESENT
;
; HARDWARE NOT PRESENT
PRTS(" NOT PRESENT$")
OR $FF ; SIGNAL FAILURE
RET
;
GDC_INIT1:
CALL GDC_CRTINIT ; SETUP THE GDC CHIP REGISTERS
CALL GDC_VDARES ; RESET GDC
CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER
; ADD OURSELVES TO VDA DISPATCH TABLE
LD BC,GDC_FNTBL ; BC := FUNCTION TABLE ADDRESS
LD DE,GDC_IDAT ; DE := GDC INSTANCE DATA PTR
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
; INITIALIZE EMULATION
LD C,A ; C := ASSIGNED VIDEO DEVICE NUM
LD DE,GDC_FNTBL ; DE := FUNCTION TABLE ADDRESS
LD HL,GDC_IDAT ; HL := GDC INSTANCE DATA PTR
CALL TERM_ATTACH ; DO IT
XOR A ; SIGNAL SUCCESS
RET
;
;======================================================================
; GDC DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
;======================================================================
;
GDC_FNTBL:
.DW GDC_VDAINI
.DW GDC_VDAQRY
.DW GDC_VDARES
.DW GDC_VDADEV
.DW GDC_VDASCS
.DW GDC_VDASCP
.DW GDC_VDASAT
.DW GDC_VDASCO
.DW GDC_VDAWRC
.DW GDC_VDAFIL
.DW GDC_VDACPY
.DW GDC_VDASCR
.DW KBD_STAT
.DW KBD_FLUSH
.DW KBD_READ
.DW GDC_VDARDC
#IF (($ - GDC_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID GDC FUNCTION TABLE ***\n"
!!!!!
#ENDIF
;
GDC_VDAINI:
; RESET VDA
CALL GDC_VDARES ; RESET VDA
XOR A ; SIGNAL SUCCESS
RET
;
GDC_VDAQRY: ; VIDEO INFORMATION QUERY
LD C,$00 ; MODE ZERO IS ALL WE KNOW
LD D,GDC_ROWS ; ROWS
LD E,GDC_COLS ; COLS
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
XOR A ; SIGNAL SUCCESS
RET
;
GDC_VDARES: ; VIDEO SYSTEM RESET
; *** TODO: RESET VIDEO SYSTEM HERE, CLEAR SCREEN,
; CURSOR TO TOP LEFT, CLEAR ATTRIBUTES
XOR A
RET
;
GDC_VDADEV: ; VIDEO DEVICE INFORMATION
LD D,VDADEV_GDC ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,GDC_BASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
GDC_VDASCS: ; SET CURSOR STYLE
SYSCHKERR(ERR_NOTIMPL)
RET
GDC_VDASCP: ; SET CURSOR POSITION
CALL GDC_XY ; SET CURSOR POSITION
XOR A ; SIGNAL SUCCESS
RET
GDC_VDASAT: ; SET ATTRIBUTES
LD A,E ; GET THE INCOMING ATTRIBUTE
LD (GDC_ATTR),A ; AND SAVE FOR LATER
XOR A ; SIGNAL SUCCESS
RET
GDC_VDASCO: ; SET COLOR
LD A,E ; GET THE INCOMING COLOR
LD (GDC_COLOR),A ; AND SAVE FOR LATER
XOR A ; SIGNAL SUCCESS
RET
GDC_VDAWRC: ; WRITE CHARACTER
LD A,E ; CHARACTER TO WRITE GOES IN A
CALL GDC_PUTCHAR ; PUT IT ON THE SCREEN
XOR A ; SIGNAL SUCCESS
RET
GDC_VDAFIL: ; FILL WITH CHARACTER
LD A,E ; FILL CHARACTER GOES IN A
EX DE,HL ; FILL LENGTH GOES IN DE
CALL GDC_FILL ; DO THE FILL
XOR A ; SIGNAL SUCCESS
RET
GDC_VDACPY: ; COPY CHARACTERS/ATTRIBUTES
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS GDC_POS
; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT
PUSH HL ; SAVE LENGTH
CALL GDC_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL
POP BC ; RECOVER LENGTH IN BC
LD DE,(GDC_POS) ; PUT DEST IN DE
JP GDC_BLKCPY ; DO A BLOCK COPY
GDC_VDASCR: ; SCROLL ENTIRE SCREEN
LD A,E ; LOAD E INTO A
OR A ; SET FLAGS
RET Z ; IF ZERO, WE ARE DONE
PUSH DE ; SAVE E
JP M,GDC_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL
CALL GDC_SCROLL ; SCROLL FORWARD ONE LINE
POP DE ; RECOVER E
DEC E ; DECREMENT IT
JR GDC_VDASCR ; LOOP
GDC_VDASCR1:
CALL GDC_RSCROLL ; SCROLL REVERSE ONE LINE
POP DE ; RECOVER E
INC E ; INCREMENT IT
JR GDC_VDASCR ; LOOP
;
GDC_VDARDC: ; READ CHAR/ATTR VALUE FROM VIDEO BUFFER
OR $FF ; UNSUPPORTED FUNCTION
RET
;
;======================================================================
; GDC DRIVER - PRIVATE DRIVER FUNCTIONS
;======================================================================
;
;----------------------------------------------------------------------
; PROBE FOR GDC HARDWARE
;----------------------------------------------------------------------
;
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
;
; *** TODO: IMPLEMENT THIS
;
GDC_PROBE:
XOR A ; SIGNAL SUCCESS
RET ; RETURN WITH ZF SET BASED ON CP
;
;----------------------------------------------------------------------
; DISPLAY CONTROLLER CHIP INITIALIZATION
;----------------------------------------------------------------------
;
; *** TODO: IMPLEMENT THIS
;
GDC_CRTINIT:
XOR A ; SIGNAL SUCCESS
RET
;
;----------------------------------------------------------------------
; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E
;----------------------------------------------------------------------
;
GDC_XY:
CALL GDC_XY2IDX ; CONVERT ROW/COL TO BUF IDX
LD (GDC_POS),HL ; SAVE THE RESULT (DISPLAY POSITION)
; *** TODO: MOVE THE CURSOR
RET
;
;----------------------------------------------------------------------
; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL
; D=ROW, E=COL
;----------------------------------------------------------------------
;
GDC_XY2IDX:
LD A,E ; SAVE COLUMN NUMBER IN A
LD H,D ; SET H TO ROW NUMBER
LD E,GDC_COLS ; SET E TO ROW LENGTH
CALL MULT8 ; MULTIPLY TO GET ROW OFFSET
LD E,A ; GET COLUMN BACK
ADD HL,DE ; ADD IT IN
RET ; RETURN
;
;----------------------------------------------------------------------
; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR
;----------------------------------------------------------------------
;
GDC_PUTCHAR:
; *** TODO: IMPLEMENT THIS
RET
;
;----------------------------------------------------------------------
; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE
; STARTING AT THE CURRENT FRAME BUFFER POSITION
; A: FILL CHARACTER
; DE: NUMBER OF CHARACTERS TO FILL
;----------------------------------------------------------------------
;
GDC_FILL:
; *** TODO: IMPLEMENT THIS
RET
;
;----------------------------------------------------------------------
; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED)
;----------------------------------------------------------------------
;
GDC_SCROLL:
; *** TODO: IMPLEMENT THIS
RET
;
;----------------------------------------------------------------------
; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED)
;----------------------------------------------------------------------
;
GDC_RSCROLL:
; *** TODO: IMPLEMENT THIS
RET
;
;----------------------------------------------------------------------
; BLOCK COPY BC BYTES FROM HL TO DE
;----------------------------------------------------------------------
;
GDC_BLKCPY:
; *** TODO: IMPLEMENT THIS
RET
;
;==================================================================================================
; GDC DRIVER - DATA
;==================================================================================================
;
GDC_ATTR .DB 0 ; CURRENT ATTRIBUTES
GDC_COLOR .DB 0 ; CURRENT COLOR
GDC_POS .DW 0 ; CURRENT DISPLAY POSITION
;
;==================================================================================================
; GDC DRIVER - INSTANCE DATA
;==================================================================================================
;
GDC_IDAT:
.DB GDC_KBDST
.DB GDC_KBDDATA

View File

@@ -53,6 +53,8 @@
; - build.inc
; - config/<plt>_<cfg>.asm
; - cfg_<plt>.asm
; - [z180.inc|z280.inc]
; - [eipc.inc]
; - <drivers>.asm
; - <fonts>.asm
; - util.asm
@@ -61,7 +63,7 @@
; - decode.asm
; - encode.asm
; - [xio|mio].asm
; - dsky.asm
; - [dsky.asm|dskyng.asm]
; - unlzsa2s.asm
;
; INCLUDE GENERIC STUFF
@@ -90,7 +92,7 @@ MODCNT .SET MODCNT + 1
; SOME HARDWARE REQUIRES A SPECIFIC ROMSIZE (NOTABLY ZZRCC) OR THE
; RESULTING BUILD IMAGES WILL BE CORRUPT. ROMSIZE_CHK IS SPECIFIED
; IN THE CONFIG FILE AND IS VERIFIED AGAINST THE ROMSIZE BEING USED
; BY THE BUILD. A ROMSIZE_CHK VALUE OF 0 INDICATES THE VERFICATION
; BY THE BUILD. A ROMSIZE_CHK VALUE OF 0 INDICATES THE VERIFICATION
; IS DISABLED (WHICH IT USUALLY IS).
;
#IF (ROMSIZE_CHK != 0) & (ROMSIZE != ROMSIZE_CHK)
@@ -132,6 +134,11 @@ MODCNT .SET MODCNT + 1
#DEFINE LED(N) \;
#ENDIF
;
#DEFINE SYSCHKERR(HB_ERR) \
#DEFCONT \ CALL SYSCHKA
#DEFCONT \ LD A,HB_ERR
#DEFCONT \ OR A
;
;
;
#IF (INTMODE == 0)
@@ -219,6 +226,7 @@ RTCDEF .SET RTCDEF | %00001000 ; INITIAL SPEED LOW
;
.FILL (000H - $),0FFH ; RST 0
JP HB_START
.DB 0 ; SIG PTR STARTS AT $0004
.DW ROM_SIG
.FILL (008H - $),0FFH ; RST 8
JP HB_INVOKE ; INVOKE HBIOS FUNCTION
@@ -556,6 +564,28 @@ HBX_RAMX:
HBX_MMA .DB 0 ; TEMPORARY STORAGE FOR REG A
#ENDIF
;
#IF (MEMMGR == MM_RPH)
BIT 7,A ; TEST BIT 7 FOR RAM VS. ROM
JR Z,HBX_ROM ; IF NOT SET, SELECT ROM PAGE
;
HBX_RAM:
AND %00011111 ; AVOID WRAPPING BITS
RLCA ; SCALE SELECTOR TO
RLCA ; ... GO FROM Z180 4K PAGE SIZE
RLCA ; ... TO DESIRED 32K PAGE SIZE
OUT0 (Z180_BBR),A ; WRITE TO BANK BASE
LD A,RPH_DEFACR | 80H ; SELECT RAM BY SETTING BIT 7
OUT0 (RPH_ACR),A ; ... IN RPH ACR REGISTER
RET ; DONE
;
HBX_ROM:
OR RPH_DEFACR ; COMBINE WITH DEFAULT BITS
OUT0 (RPH_ACR),A ; BANK INDEX TO RPH ACR REGISTER
XOR A ; ZERO ACCUM
OUT0 (Z180_BBR),A ; ZERO BANK BASE
RET ; DONE
#ENDIF
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Copy Data - Possibly between banks. This resembles CP/M 3, but
; usage of the HL and DE registers is reversed.
@@ -1071,14 +1101,14 @@ HB_START:
;
#IFDEF APPBOOT
#IF (MEMMGR == MM_Z280)
LD A,%00000001
LD A,DIAG_01
OUT (DIAGPORT),A
LD DE,Z280_BOOTERR
LD C,9
LD A,%00000010
LD A,DIAG_02
OUT (DIAGPORT),A
CALL $0005
LD A,%00001000
LD A,DIAG_04
OUT (DIAGPORT),A
RET
;
@@ -1101,8 +1131,13 @@ Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 n
OUT0 (N8_ACR),A ; ... REGISTER IS INITIALIZED
#ENDIF
;
#IF (PLATFORM == PLT_RPH)
LD A,RPH_DEFACR ; ENSURE RPH ACR
OUT0 (RPH_ACR),A ; ... REGISTER IS INITIALIZED
#ENDIF
;
#IF (DIAGENABLE)
LD A,%00000001
LD A,DIAG_01
OUT (DIAGPORT),A
#ENDIF
#IF (LEDENABLE)
@@ -1212,7 +1247,7 @@ Z280_INITZ:
LD A,Z180_BASE
OUT0 ($3F),A ; AT RESET, ICR IS AT $3F
DIAG(%00000010)
DIAG(DIAG_02)
; DISABLE REFRESH
XOR A
@@ -1238,7 +1273,7 @@ Z280_INITZ:
LD A,$F0
OUT0 (Z180_DCNTL),A
#IF ((MEMMGR == MM_Z180) | (MEMMGR == MM_N8))
#IF ((MEMMGR == MM_Z180) | (MEMMGR == MM_N8) | (MEMMGR == MM_RPH))
; Z180 MMU SETUP
LD A,$80
OUT0 (Z180_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG
@@ -1306,8 +1341,10 @@ Z280_INITZ:
; NOT WANT TO EFFECT RAM UNTIL AFTER THE BACKUP BATTERY STATUS CHECK
; IS PERFORMED NEXT.
;
LD A,%00000011
#IF (DIAGENABLE)
LD A,DIAG_02
OUT (DIAGPORT),A
#ENDIF
;
; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE
; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT.
@@ -1326,7 +1363,7 @@ Z280_INITZ:
; WILL NOT START CORRECTLY WHEN THEY CHECK THE ROM ID VERSION BYTES.
; THE BATTERY CONDITION VALUE IS TEMPORARILY STORED AT HBX_LOC - 1
; BECAUSE WE ARE CURRENTLY RUNNING IN ROM. AFTER WE TRANSITION HBIOS
; TO RAM, THE VALUE IS MOVED TO IT'S REAL LCOATION AT HB_BATCOND.
; TO RAM, THE VALUE IS MOVED TO IT'S REAL LOCATION AT HB_BATCOND.
; IF THERE IS NO DS1210 IN THE SYSTEM, THE CODE BELOW DOES NO HARM.
;
LD HL,HBX_LOC - 1 ; POINT TO BYTE
@@ -1530,21 +1567,51 @@ MBC_SINGLE:
;
#ENDIF
;
; IF THIS IS A ROM-LESS SYSTEM, THEN WE NEED TO COPY THE "APP" BANK TO
; TPA. IT IS DONE PRIOR TO COPYING HBIOS TO IT'S FINAL BANK BECAUSE
; THE SOURCE OF THE APP BANK CODE MAY BE THE BANK THAT HBIOS WANTS TO
; USE AS IT'S FINAL LOCATION (PRIMARILY IN CASE OF RAMBOOT WHERE THE
; SYSTEM HAS THE MINIMUM 128KB OF RAM).
; IF THIS IS A ROM-LESS SYSTEM, THEN WE NEED TO COPY THE PAYLOAD
; (LOADER, MONITOR, ZSDOS) THAT HAS BEEN LOADED TO PHYSICAL RAM
; BANKS 0 AND 1 TO THE USER TPA BANK TO RUN AFTER BOOT.
; IT IS DONE PRIOR TO COPYING HBIOS TO IT'S FINAL BANK BECAUSE
; THE PAYLOAD MAY EXTEND INTO THE HBIOS OPERATING BANK. THIS
; HAPPENS PRIMARILY IN THE CASE WHERE THE
; SYSTEM HAS THE MINIMUM 128KB OF RAM.
;
#IFDEF ROMBOOT
#IF (ROMSIZE == 0)
LD A,(HB_CURBNK)
;
; THE PAYLOAD IS LIKELY TO CROSS OVER THE RAM BANK 0/1
; BOUNDARY. BNKCPY DOES NOT HANDLE THIS BECAUSE IT ASSUMES
; THE COMMON BANK IS USED AFTER PASSING OVER THE BANK
; BOUNDARY. WE WORK AROUND THAT HERE BY DOING TWO COPIES.
; THE FIRST ONE HANDLES THE PORTION OF THE PAYLOAD FROM THE
; END OF HBIOS TO THE BANK BOUNDARY ($8000). THE SECOND
; ONE HANDLES THE PORTION THAT EXTENDS INTO THE SECOND
; PHYSICAL RAM BANK.
;
; COPY PORTION OF PAYLOAD FOLLOWING HBIOS TO THE BANK
; BOUNDARY AT $8000 INTO START OF TPA.
LD A,BID_RAM0
LD (HB_SRCBNK),A
LD A,BID_USR
LD (HB_DSTBNK),A
LD HL,HB_END
LD DE,0
LD BC,$8000
LD BC,$8000-HB_END
;
#IF (MEMMGR == MM_Z280)
CALL Z280_BNKCPY
#ELSE
CALL HBX_BNKCPY
#ENDIF
;
; COPY REMAINDER OF PAYLOAD EXTENDING INTO THE SECOND PHYSICAL
; RAM BANK. NOTE THAT THE DESTINATION ADDRESS (DE) IS
; ALREADY CORRECT FROM THE PRIOR COPY.
LD A,BID_RAM0+1
LD (HB_SRCBNK),A
LD HL,$0000
; DE IS ALREADY CORRECT
LD BC,$8000-($8000-HB_END)
;
#IF (MEMMGR == MM_Z280)
CALL Z280_BNKCPY
#ELSE
@@ -1602,8 +1669,8 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
; THAT.
LD SP,HBX_LOC - 2 ; RESET STACK
;
; NOTIFY THAT WE MADE THE TRANSTION!
DIAG(%00000111)
; NOTIFY THAT WE MADE THE TRANSITION!
DIAG(DIAG_03)
LED(%00000010)
;
; SET THE IN-RAM FLAG
@@ -1730,7 +1797,7 @@ SAVE_REC_M:
#ENDIF
#ENDIF
;
DIAG(%00001111)
DIAG(DIAG_04)
;
#IF (WBWDEBUG == USEMIO) ; BUFFER OUTPUT UNTIL
CALL MIO_INIT ; WE GET TO BOOT MESSAGE
@@ -1819,7 +1886,7 @@ HB_CPU1:
;
#ENDIF
;
DIAG(%00011111)
DIAG(DIAG_05)
;
; INIT OSCILLATOR SPEED FROM CONFIG
;
@@ -1889,20 +1956,20 @@ HB_CPUSPD2:
;
LD HL,(HB_CPUOSC) ; INIT HL TO CPU OSC FREQ (KHZ)
;
#IF (Z180_CLKDIV == 0)
; ADJUST HL TO REFLECT HALF SPEED OPERATION
SRL H ; ADJUST HL ASSUMING
RR L ; HALF SPEED OPERATION
#ENDIF
;
#IF (Z180_CLKDIV == 1)
#IF (Z180_CLKDIV >= 1)
LD A,(HB_CPUTYPE) ; GET CPU TYPE
CP 2 ; Z8S180 REV K OR BETTER?
JR C,HB_CPU3 ; IF NOT, NOT POSSIBLE!
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED
LD A,$80
OUT0 (Z180_CCR),A
; HL ALREADY REFLECTS FULL SPEED OPERATION
; ADJUST HL TO REFLECT FULL SPEED OPERATION
SLA L
RL H
#ENDIF
;
#IF (Z180_CLKDIV >= 2)
@@ -2111,7 +2178,7 @@ Z280_TC .EQU CPUOSC / 4 / 50 / 2 ; TIME CONSTANT
LD A,$FF ; FILL WITH $FF
CALL FILL ; DO IT
;
DIAG(%00111111)
DIAG(DIAG_06)
;
#IF FALSE
;
@@ -2167,9 +2234,24 @@ NOT_REC_M0:
;
#ENDIF
;
DIAG(%01111111)
DIAG(DIAG_07)
LED(%00000011)
;
;
;
;
#IF (BOOT_DELAY > 100)
.ECHO "*** ERROR: INVALID BOOT_DELAY (BOOT_DELAY > 100)!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR
#ENDIF
;
#IF (BOOT_DELAY > 0)
LD B,BOOT_DELAY * 2 ; SCALE TO 1/2 SEC
HB_BOOTDLY:
CALL LDELAY ; 1/2 SECOND DELAY
DJNZ HB_BOOTDLY ; LOOP TILL DONE
#ENDIF
;
; PRIOR TO THIS POINT, CONSOLE I/O WAS NOT AVAILABLE UNLESS DIRECTED TO DEBUG OUTPUT I.E. XIO
; NOW THAT HBIOS IS READY, SET THE CONSOLE UNIT TO ACTIVATE CONSOLE I/O
; VIA HBIOS.
@@ -2228,7 +2310,19 @@ NXTMIO: LD A,(HL)
.TEXT "HBIOS MUTEX ENABLED$"
#ENDIF
;
DIAG(%11111111)
; DISPLAY RECOVERY MODE MESSAGE
;
#IF (BT_REC_TYPE != BT_REC_NONE)
LD A,(HB_BOOT_REC) ; IF WE ARE IN RECOVERY MODE
OR A ; DISPLAY RECOVERY MODE MESSAGE
JR Z,NOT_REC_M2
CALL NEWLINE
CALL PRTSTRD
.TEXT "RECOVERY MODE$"
#ENDIF
NOT_REC_M2:
;
DIAG(DIAG_08)
;
; IO PORT SCAN
;
@@ -2389,6 +2483,9 @@ HB_Z280BUS1:
#ENDIF
#IF (MEMMGR == MM_MBC)
.TEXT "MBC$"
#ENDIF
#IF (MEMMGR == MM_RPH)
.TEXT "RPH$"
#ENDIF
CALL PRTSTRD
.TEXT " MMU$"
@@ -2739,6 +2836,10 @@ INITSYS4:
LDCTL (C),HL
#ENDIF
;
#IFDEF TESTING
CALL SND_BEEP
#ENDIF
;
#IFNDEF ROMBOOT
;
; COPY OS IMAGE: BID_USR:<IMG START> --> BID_USR:0
@@ -2844,6 +2945,9 @@ HB_PCINITTBL:
#IF (PIOENABLE)
.DW PIO_PREINIT
#ENDIF
#IF LPTENABLE)
.DW LPT_PREINIT
#ENDIF
#IF (PIO_4P | PIO_ZP)
.DW PIO_PREINIT
#ENDIF
@@ -2875,6 +2979,9 @@ HB_INITTBL:
#IF (SN76489ENABLE)
.DW SN76489_INIT
#ENDIF
#IF (YM2612ENABLE)
.DW YM2612_INIT
#ENDIF
#IF (SPKENABLE)
.DW SP_INIT ; AUDIBLE INDICATOR OF BOOT START
#ENDIF
@@ -2896,9 +3003,24 @@ HB_INITTBL:
#IF (ACIAENABLE)
.DW ACIA_INIT
#ENDIF
#IF (PIOENABLE)
.DW PIO_INIT
#ENDIF
#IF (LPTENABLE)
.DW LPT_INIT
#ENDIF
#IF (PIO_4P | PIO_ZP)
.DW PIO_INIT
#ENDIF
#IF (UFENABLE)
.DW UF_INIT
#ENDIF
#IF (DSRTCENABLE)
.DW DSRTC_INIT
#ENDIF
#IF (DS1501RTCENABLE)
.DW DS1501RTC_INIT
#ENDIF
#IF (BQRTCENABLE)
.DW BQRTC_INIT
#ENDIF
@@ -2924,8 +3046,8 @@ HB_INITTBL:
#IF (VGAENABLE)
.DW VGA_INIT
#ENDIF
#IF (NECENABLE)
.DW NEC_INIT
#IF (GDCENABLE)
.DW GDC_INIT
#ENDIF
#IF (TMSENABLE)
.DW TMS_INIT
@@ -2963,16 +3085,6 @@ HB_INITTBL:
#IF (PPPENABLE)
.DW PPP_INIT
#ENDIF
#IF (PIOENABLE)
.DW PIO_INIT
#ENDIF
#IF (PIO_4P | PIO_ZP)
.DW PIO_INIT
#ENDIF
#IF (UFENABLE)
.DW UF_INIT
#ENDIF
;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
;
@@ -3025,7 +3137,7 @@ HB_DISPATCH:
PUSH AF
LD A,(HB_STACK - HB_STKSIZ + $08)
CP $FF
CALL SYSCHK
SYSCHKERR(ERR_INTERNAL)
LD A,$FF
LD (HB_STACK - HB_STKSIZ + $08),A
POP AF
@@ -3053,9 +3165,7 @@ HB_DISPATCH1:
; FALL THRU
;
HB_DISPERR:
CALL SYSCHK
LD A,ERR_NOFUNC
OR A
SYSCHKERR(ERR_NOFUNC)
RET
;
;==================================================================================================
@@ -3396,7 +3506,7 @@ HB_DSKFN:
HB_DSKFNADR .EQU $+1
CALL PANIC ; READ ONE SECTOR
#IF (DIAGENABLE & DIAGDISKIO)
DIAG(0) ; CLEAR DIAG LEDS
DIAG(DIAG_00) ; CLEAR DIAG LEDS
#ENDIF
#IF (LEDENABLE & LEDDISKIO)
LED($00)
@@ -3517,9 +3627,7 @@ RTC_DISPATCH:
RET
;
RTC_DISPERR:
CALL SYSCHK
LD A,ERR_NOHW
OR A
SYSCHKERR(ERR_NOHW)
RET
;
; SET RTC DISPATCH ADDRESS, USED BY RTC DRIVERS DURING INIT
@@ -3617,7 +3725,7 @@ SND_ADDENT:
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
;
SND_FNCNT .EQU 8 ; NUMBER OF SND FUNCS (FOR RANGE CHECK)
SND_MAX .EQU 3 ; UP TO 2 UNITS
SND_MAX .EQU 4 ; UP TO 4 UNITS
SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES
;
.DB SND_FNCNT ; SND FUNCTION COUNT (FOR RANGE CHECK)
@@ -3626,6 +3734,49 @@ SND_CNT .DB 0 ; ENTRY COUNT PREFIX
SND_TBL .FILL SND_SIZ,0 ; SPACE FOR ENTRIES
;
;==================================================================================================
; SPEAKER BEEP ROUTINE
;==================================================================================================
;
; ROUTINE TO BEEP THE DEAULT SOUND UNIT
; NEED TO CHECK FOR EXISTENCE OF SOUND UNIT
; WHICH CHANNEL SHOULD BE USED? IS THERE A GOOD DEFAULT CHANNEL?
;
SND_BEEP:
; CHECK FOR AT LEAST 1 SOUND DEVICE
LD A,(SND_CNT) ; GET SOUND UNIT COUNT
OR A ; CHECK FOR ZERO
RET Z ; BAIL OUT IF NO SOUND UNITS
; PLAY A BEEP ON SOUND DEVICE UNIT 0
LD B,$50 ; SOUND RESET FUNCTION
LD C,0 ; SOUND UNIT NUMBER
CALL SND_DISPATCH ; DO IT
LD B,$51 ; VOLUME
LD C,0 ; SOUND UNIT NUMBER
LD L,$FF ; MAX
CALL SND_DISPATCH ; DO IT
LD B,$53 ; SELECT NOTE
LD C,0 ; SOUND UNIT NUMBER
;LD HL,0 ; A0#
LD HL,244 ; B5 (CLOSE TO 1 KHZ)
CALL SND_DISPATCH ; DO IT
;LD B,$56 ; DURATION
;LD C,0 ; SOUND UNIT NUMBER
;LD HL,500 ; 1/2 SECOND
;CALL SND_DISPATCH ; DO IT
LD B,$54 ; PLAY SOUND
LD C,0 ; SOUND UNIT NUMBER
LD D,0 ; CHANNEL 0
CALL SND_DISPATCH ; DO IT
LD DE,15625 ; PLAY FOR 1/4 SECOND
CALL VDELAY ; WAIT WHILE TONE IS PLAYED
;CALL LDELAY ; LET SOUND PLAY 1/2 SECOND
LD B,$50 ; SOUND RESET FUNCTION
LD C,0 ; SOUND UNIT NUMBER
CALL SND_DISPATCH ; DO IT
RET ; DONE
;
;==================================================================================================
; SYSTEM FUNCTION DISPATCHER
;==================================================================================================
;
@@ -3674,9 +3825,7 @@ SYS_RESET:
JR Z,SYS_RESCOLD
CP BF_SYSRES_USER
JR Z,SYS_RESUSER
CALL SYSCHK
LD A,ERR_NOFUNC
OR A ; SIGNAL ERROR
SYSCHKERR(ERR_NOFUNC)
RET
;
; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS
@@ -3697,6 +3846,11 @@ SYS_RESINT:
; GO BACK TO ROM BOOT LOADER
;
SYS_RESWARM:
;
#IF (ROMSIZE == 0)
JR SYS_RESCOLD
#ENDIF
;
CALL SYS_RESINT
;
#IF (MEMMGR == MM_Z280)
@@ -3713,6 +3867,14 @@ SYS_RESWARM:
; RESTART SYSTEM AS THOUGH POWER HAD JUST BEEN TURNED ON
;
SYS_RESCOLD:
;
#IF (ROMSIZE == 0)
LD DE,STR_RESTART
CALL Z,WRITESTR
DI
HALT
#ENDIF
;
#IF (MEMMGR == MM_Z280)
JP Z280_RESTART
#ELSE
@@ -3867,9 +4029,7 @@ SYS_ALLOC:
; ALL OTHER REGISTERS PRESERVED
;
SYS_FREE:
CALL SYSCHK ; NOT YET IMPLEMENTED
LD A,ERR_NOTIMPL ; NOT YET INMPLEMENTED
OR A ; SET FLAGS
SYSCHKERR(ERR_NOTIMPL) ; NOT YET INMPLEMENTED
RET
;
; GET SYSTEM INFORMATION
@@ -3909,9 +4069,7 @@ SYS_GET:
JP Z,SYS_GETBNKINFO
CP BF_SYSGET_CPUSPD
JP Z,SYS_GETCPUSPD
CALL SYSCHK
LD A,ERR_NOFUNC ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR
RET
;
; GET TIMER
@@ -3998,7 +4156,7 @@ SYS_GETBNKINFO:
XOR A
RET
;
; GET SYSTEM CPU SPEED ORMANCE ATTRIBUTES
; GET SYSTEM CPU SPEED PERFORMANCE ATTRIBUTES
; RETURNS:
; L: CLOCK MULT (0:HALF, 1:FULL, 2: DOUBLE)
; D: MEMORY WAIT STATES
@@ -4008,10 +4166,10 @@ SYS_GETCPUSPD:
;
#IF (((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) & (CPUSPDCAP==SPD_HILO))
LD A,(HB_RTCVAL)
BIT 3,A
#IF (PLATFORM == PLT_SBC)
XOR %00001000 ; SBC SPEED BIT IS INVERTED
#ENDIF
BIT 3,A
LD L,0 ; ASSUME HALF SPEED
JR Z,SYS_GETCPUSPD1
LD L,1
@@ -4023,19 +4181,33 @@ SYS_GETCPUSPD1:
#ENDIF
;
#IF (CPUFAM == CPU_Z180)
IN0 A,(Z180_CMR) ; GET CLOCK MULTIPLIER
RLCA ; ROTATE BIT TO BIT 0
AND %00000001 ; ISOLATE IT
LD H,A ; SAVE IN H
LD HL,0 ; INIT CPU SPEED TO HALF
LD A,(HB_CPUTYPE) ; LOAD CPUTYPE
CP 2 ; S-CLASS OR ABOVE?
JR C,SYS_GETCPUSPD1 ; IF NOT, NO CCR/CMR
;
; GET CCR BIT
IN0 A,(Z180_CCR) ; GET CLOCK CONTROL
RLCA ; ROTATE BIT TO BIT 0
AND %00000001 ; ISOLATE IT
LD L,A ; SAVE IN L
;
LD A,(HB_CPUTYPE) ; LOAD CPUTYPE
CP 3 ; REV. N?
JR C,SYS_GETCPUSPD1 ; IF NOT, NO CMR
;
; GET CMR BIT
IN0 A,(Z180_CMR) ; GET CLOCK MULTIPLIER
RLCA ; ROTATE BIT TO BIT 0
AND %00000001 ; ISOLATE IT
LD H,A ; SAVE IN H
;
SYS_GETCPUSPD1:
; CALC FINAL MULTIPLIER TO L
XOR A ; CLEAR ACCUM
ADD A,H ; ADD IN CMR BIT
ADD A,L ; ADD IN CCR BIT
LD L,A ; SAVE RESULT IN L
;
; DCNTL = MMII????
IN0 A,(Z180_DCNTL) ; GET WAIT STATES
RLCA ; ROTATE MEM WS BITS
@@ -4189,9 +4361,7 @@ SYS_SET:
JR Z,SYS_SETBOOTINFO
CP BF_SYSSET_CPUSPD
JR Z,SYS_SETCPUSPD
CALL SYSCHK
LD A,ERR_NOFUNC ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR
RET
;
; SET BOOT INFORMATION
@@ -4299,6 +4469,29 @@ SYS_SETCPUSPD3:
#ENDIF
;
#IF (CPUFAM == CPU_Z180)
; VERIFY THAT REQUESTED SETTINGS ARE ALLOWED BY HARDWARE
LD A,L ; GET SPEED REQUESTED
CP $FF ; NO CHANGE?
JR Z,SYS_SETCPUSPD0A ; SKIP CHECK
LD A,(HB_CPUTYPE) ; 1=ORIG, 2=REVK, 3=REVN
INC L ; 1=HALF,2=FULL,3=DOUBLE
CP L ; TOO HIGH FOR CPU TYPE?
JP C,SYS_SETCPUSPD_ERR ; CPU CAN'T DO SPD MULT
DEC L ; RESTORE ORIG REQUEST
SYS_SETCPUSPD0A:
LD A,D ; MEM WS
CP $FF ; NO CHANGE?
JR Z,SYS_SETCPUSPD0B ; SKIP CHECK
CP 4 ; TOO HIGH?
JP NC,SYS_SETCPUSPD_ERR ; >3 IS TOO HIGH
SYS_SETCPUSPD0B:
LD A,D ; I/O WS
CP $FF ; NO CHANGE?
JR Z,SYS_SETCPUSPD0C ; SKIP CHECK
CP 4 ; TOO HIGH?
JP NC,SYS_SETCPUSPD_ERR ; >3 IS TOO HIGH
SYS_SETCPUSPD0C:
;
PUSH DE ; SAVE WAIT STATES FOR NOW
; BEFORE IMPLEMENTING THE NEW CPU SPEED, WE SWITCH THE
; WAIT STATES TO MAXIMUM BECAUSE WE MAY BE IMPLEMENTING
@@ -4325,11 +4518,11 @@ SYS_SETCPUSPD1:
LD C,%10000000 ; SET CCR BIT
SYS_SETCPUSPD2:
;
; IMPLEMENT THE NEW CPU SPEED
IN0 A,(Z180_CMR)
AND ~%10000000
OR B
OUT0 (Z180_CMR),A
;
IN0 A,(Z180_CCR)
AND ~%10000000
OR C
@@ -4529,9 +4722,7 @@ SYS_INT:
JR Z,SYS_INTGET
CP BF_SYSINT_SET
JR Z,SYS_INTSET
CALL SYSCHK
LD A,ERR_NOFUNC ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR
RET
;
; GET INTERRUPT SYSTEM INFORMATION
@@ -4557,9 +4748,7 @@ SYS_INTINFO:
;
SYS_INTVECADR:
#IF (INTMODE == 0)
CALL SYSCHK ; INVALID FOR INT MODE 0
LD A,ERR_BADCFG ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_BADCFG) ; SIGNAL ERROR. INVALID FOR INT MODE 0
RET
#ENDIF
#IF (INTMODE == 1)
@@ -4573,9 +4762,7 @@ SYS_INTVECADR:
LD A,E ; INCOMING INDEX POSITION TO A
CP C ; COMPARE TO VECTOR COUNT
JR C,SYS_INTGET1 ; CONTINUE IF POSITION IN RANGE
CALL SYSCHK ; ELSE ERROR
LD A,ERR_RANGE ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_RANGE) ; ELSE ERROR
RET
SYS_INTGET1:
OR A ; CLEAR CARRY
@@ -5056,15 +5243,11 @@ HB_DISPCALC:
RET ; JUMP TO DRIVER FUNC ADR ON TOS
;
HB_FUNCERR:
CALL SYSCHK
LD A,ERR_NOFUNC ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR
RET
;
HB_UNITERR:
CALL SYSCHK
LD A,ERR_NOUNIT ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_NOUNIT) ; SIGNAL ERROR
RET
;
; ADD AN ENTRY TO THE UNIT TABLE AT ADDRESS IN HL
@@ -5102,7 +5285,7 @@ HB_ADDENT:
; ALL OTHER REGISTERS PRESERVED
;
; A 4 BYTE HEADER IS PLACED IN FRONT OF THE ALLOCATED MEMORY
; - DWORD: SIZE OF MEMROY ALLOCATED (DOES NOT INCLUDE 4 BYTE HEADER)
; - DWORD: SIZE OF MEMORY ALLOCATED (DOES NOT INCLUDE 4 BYTE HEADER)
; - DWORD: ADDRESS WHERE ALLOC WAS CALLED (VALUE ON TOP OF STACK AT CALL)
;
HB_ALLOC:
@@ -5151,9 +5334,7 @@ HB_ALLOC:
HB_ALLOC1:
; ERROR RETURN
POP DE ; RESTORE INCOMING DE
CALL SYSCHK
LD A,ERR_NOMEM ; SIGNAL ERROR
OR A ; SET FLAGS
SYSCHKERR(ERR_NOMEM) ; SIGNAL ERROR
RET
;
HB_TMPSZ .DW 0
@@ -5582,6 +5763,15 @@ SIZ_DSRTC .EQU $ - ORG_DSRTC
.ECHO " bytes.\n"
#ENDIF
;
#IF (DS1501RTCENABLE)
ORG_DS1501RTC .EQU $
#INCLUDE "ds1501rtc.asm"
SIZ_DS1501RTC .EQU $ - ORG_DS1501RTC
.ECHO "DS1501RTC occupies "
.ECHO SIZ_DS1501RTC
.ECHO " bytes.\n"
#ENDIF
;
#IF (BQRTCENABLE)
ORG_BQRTC .EQU $
#INCLUDE "bqrtc.asm"
@@ -5642,6 +5832,15 @@ SIZ_ASCI .EQU $ - ORG_ASCI
.ECHO " bytes.\n"
#ENDIF
;
#IF (Z2UENABLE)
ORG_Z2U .EQU $
#INCLUDE "z2u.asm"
SIZ_Z2U .EQU $ - ORG_Z2U
.ECHO "Z2U occupies "
.ECHO SIZ_Z2U
.ECHO " bytes.\n"
#ENDIF
;
#IF (UARTENABLE)
ORG_UART .EQU $
#INCLUDE "uart.asm"
@@ -5678,12 +5877,39 @@ SIZ_ACIA .EQU $ - ORG_ACIA
.ECHO " bytes.\n"
#ENDIF
;
#IF (Z2UENABLE)
ORG_Z2U .EQU $
#INCLUDE "z2u.asm"
SIZ_Z2U .EQU $ - ORG_Z2U
.ECHO "Z2U occupies "
.ECHO SIZ_Z2U
#IF (PIOENABLE)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (LPTENABLE)
ORG_LPT .EQU $
#INCLUDE "lpt.asm"
SIZ_LPT .EQU $ - ORG_LPT
.ECHO "LPT occupies "
.ECHO SIZ_LPT
.ECHO " bytes.\n"
#ENDIF
;
#IF (PIO_4P | PIO_ZP | PIO_SBC)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (UFENABLE)
ORG_UF .EQU $
#INCLUDE "uf.asm"
SIZ_UF .EQU $ - ORG_UF
.ECHO "UF occupies "
.ECHO SIZ_UF
.ECHO " bytes.\n"
#ENDIF
;
@@ -5723,12 +5949,12 @@ SIZ_TMS .EQU $ - ORG_TMS
.ECHO " bytes.\n"
#ENDIF
;
#IF (NECENABLE)
ORG_NEC .EQU $
;#INCLUDE "nec.asm"
SIZ_NEC .EQU $ - ORG_NEC
.ECHO "NEC occupies "
.ECHO SIZ_NEC
#IF (GDCENABLE)
ORG_GDC .EQU $
#INCLUDE "gdc.asm"
SIZ_GDC .EQU $ - ORG_GDC
.ECHO "GDC occupies "
.ECHO SIZ_GDC
.ECHO " bytes.\n"
#ENDIF
;
@@ -5792,7 +6018,7 @@ SIZ_FONTS .EQU $ - ORG_FONTS
.ECHO SIZ_FONTS
.ECHO " bytes.\n"
;
#IF (CVDUENABLE | VGAENABLE) | (TMSENABLE & (TMSMODE == TMSMODE_RCKBD))
#IF (CVDUENABLE | VGAENABLE) | GDCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_RCKBD) | (TMSMODE == TMSMODE_MBC)))
ORG_KBD .EQU $
#INCLUDE "kbd.asm"
SIZ_KBD .EQU $ - ORG_KBD
@@ -5918,33 +6144,6 @@ SIZ_SPK .EQU $ - ORG_SPK
.ECHO SIZ_SPK
.ECHO " bytes.\n"
#ENDIF
;
#IF (PIOENABLE)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (PIO_4P | PIO_ZP | PIO_SBC)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (UFENABLE)
ORG_UF .EQU $
#INCLUDE "uf.asm"
SIZ_UF .EQU $ - ORG_UF
.ECHO "UF occupies "
.ECHO SIZ_UF
.ECHO " bytes.\n"
#ENDIF
#IF (KIOENABLE)
ORG_KIO .EQU $
#INCLUDE "kio.asm"
@@ -5977,6 +6176,14 @@ SIZ_AY38910 .EQU $ - ORG_AY38910
.ECHO SIZ_AY38910
.ECHO " bytes.\n"
#ENDIF
#IF (YM2612ENABLE)
ORG_YM2612 .EQU $
#INCLUDE "ym2612.asm"
SIZ_YM2612 .EQU $ - ORG_YM2612
.ECHO "YM2612 occupies "
.ECHO SIZ_YM2612
.ECHO " bytes.\n"
#ENDIF
;
.ECHO "RTCDEF="
.ECHO RTCDEF
@@ -6008,7 +6215,7 @@ SIZ_AY38910 .EQU $ - ORG_AY38910
;
; INCLUDE LZSA2 decompression engine if required.
;
#IF ((VGAENABLE | CVDUENABLE | TMSENABLE) & USELZSA2)
#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE) & USELZSA2)
#INCLUDE "unlzsa2s.asm"
#ENDIF
;
@@ -6123,7 +6330,7 @@ HB_RDSEC:
;
; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE?
;
SYSCHK:
SYSCHKA:
; CHECK DIAG LEVEL TO SEE IF WE SHOULD DISPLAY
PUSH AF ; PRESERVE INCOMING AF VALUE
LD A,(CB_DIAGLVL) ; GET DIAGNOSTIC LEVEL
@@ -6137,6 +6344,17 @@ SYSCHK:
CALL WRITESTR ; PRINT IT
POP DE ; RESTORE DE VALUE
CALL XREGDMP ; DUMP REGISTERS
; DISPLAY ERROR CODE. IT IS AT RETURN ADDRESS+1 .. LD A,XX
EX (SP),HL ; GET RETURN ADDRESS
INC HL ; POINT TO THE ERROR CODE
PUSH AF
LD A,(HL) ; DISPLAY
CALL PRTHEXBYTE
POP AF
DEC HL ; RESTORE RETURN ADDRESS
EX (SP),HL
;
JR CONTINUE ; CHECK W/ USER
;
SYSCHK1:
@@ -6677,7 +6895,7 @@ PS_PRTDEV:
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
RET
;
; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE
; PRINT DEVICE MNEMONIC, DEVTYP/NUM SPECIFIED IN DE
;
PS_PRTNUL:
LD HL,PS_STRNUL
@@ -6769,7 +6987,7 @@ PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD
;
PS_SDSTRREF:
.DW PS_SDUART, PS_SDASCI, PS_SDTERM, PS_SDPRPCON, PS_SDPPPCON
.DW PS_SDSIO, PS_SDACIA, PS_SDPIO, PS_SDUF, PS_SDDUART, PS_SDZ2U
.DW PS_SDSIO, PS_SDACIA, PS_SDPIO, PS_SDUF, PS_SDDUART, PS_SDZ2U, PS_SDLPT
;
PS_SDUART .TEXT "UART$"
PS_SDASCI .TEXT "ASCI$"
@@ -6782,6 +7000,7 @@ PS_SDPIO .TEXT "PIO$"
PS_SDUF .TEXT "UF$"
PS_SDDUART .TEXT "DUART$"
PS_SDZ2U .TEXT "Z2U$"
PS_SDLPT .TEXT "LPT$"
;
; CHARACTER SUB TYPE STRINGS
;
@@ -6801,11 +7020,11 @@ PIO_MODE_STR: .TEXT "Output$"
; VIDEO DEVICE STRINGS
;
PS_VDSTRREF:
.DW PS_VDVDU, PS_VDCVDU, PS_VDNEC, PS_VDTMS, PS_VDVGA
.DW PS_VDVDU, PS_VDCVDU, PS_VDGDC, PS_VDTMS, PS_VDVGA
;
PS_VDVDU .TEXT "VDU$"
PS_VDCVDU .TEXT "CVDU$"
PS_VDNEC .TEXT "NEC$"
PS_VDGDC .TEXT "GDC$"
PS_VDTMS .TEXT "TMS$"
PS_VDVGA .TEXT "VGA$"
;
@@ -7015,6 +7234,7 @@ STR_LOWBAT .DB "\r\n\r\n+++ LOW BATTERY +++$"
STR_PANIC .TEXT "\r\n>>> PANIC: $"
STR_SYSCHK .TEXT "\r\n>>> SYSCHK: $"
STR_CONTINUE .TEXT "\r\nContinue (Y/N)? $"
STR_RESTART .TEXT "\r\n\r\n>>> Press hardware reset button to restart system\r\n\r\n$"
;
#IF (DSKYENABLE) ; 'H','B','I','O',' ',' ',' ',' '
#IF (DSKYMODE == DSKYMODE_V1)

View File

@@ -136,6 +136,7 @@ PLT_SCZ180 .EQU 10 ; SCZ180
PLT_DYNO .EQU 11 ; DYNO MICRO-ATX MOTHERBOARD
PLT_RCZ280 .EQU 12 ; RC2014 W/ Z280
PLT_MBC .EQU 13 ; MULTI BOARD COMPUTER
PLT_RPH .EQU 14 ; RHYOPHYRE GRAPHICS COMPUTER
;
; HBIOS GLOBAL ERROR RETURN VALUES
;
@@ -155,6 +156,111 @@ ERR_TIMEOUT .EQU -11 ; DEVICE TIMEOUT
ERR_BADCFG .EQU -12 ; INVALID CONFIGURATION
ERR_INTERNAL .EQU -13 ; INTERNAL ERROR
;
; HBIOS DIAG OPTIONS
;
DIAG_PROG .EQU 0 ; PROGRESS BAR
DIAG_STEP .EQU 1 ; STEP BAR
DIAG_ASCII .EQU 2 ; 8-BIT ASCII 30H - 39H
DIAG_BINARY .EQU 3 ; BINARY 00H - 09H
DIAG_7SEG .EQU 4 ; 7-SEGMENT
DIAG_FLASH .EQU 5 ; FLASH
DIAG_TRIG .EQU 6 ; TRIGGER
;
DIAG_DISP .EQU DIAG_PROG ; DEFAULT
;
#IF (DIAG_DISP == DIAG_PROG)
DIAG_00 .EQU 00000000B
DIAG_01 .EQU 00000001B
DIAG_02 .EQU 00000011B
DIAG_03 .EQU 00000111B
DIAG_04 .EQU 00001111B
DIAG_05 .EQU 00011111B
DIAG_06 .EQU 00111111B
DIAG_07 .EQU 01111111B
DIAG_08 .EQU 11111111B
DIAG_09 .EQU 11111111B
#ENDIF
;
#IF (DIAG_DISP == DIAG_STEP)
DIAG_00 .EQU 00000000B
DIAG_01 .EQU 00000001B
DIAG_02 .EQU 00000010B
DIAG_03 .EQU 00000100B
DIAG_04 .EQU 00001000B
DIAG_05 .EQU 00010000B
DIAG_06 .EQU 00100000B
DIAG_07 .EQU 01000000B
DIAG_08 .EQU 10000000B
DIAG_09 .EQU 11111111B
#ENDIF
;
#IF (DIAG_DISP == DIAG_ASCII)
DIAG_00 .EQU '0'
DIAG_01 .EQU '1'
DIAG_02 .EQU '2'
DIAG_03 .EQU '3'
DIAG_04 .EQU '4'
DIAG_05 .EQU '5'
DIAG_06 .EQU '6'
DIAG_07 .EQU '7'
DIAG_08 .EQU '8'
DIAG_09 .EQU '9'
#ENDIF
;
#IF (DIAG_DISP == DIAG_BINARY)
DIAG_00 .EQU 0
DIAG_01 .EQU 1
DIAG_02 .EQU 2
DIAG_03 .EQU 3
DIAG_04 .EQU 4
DIAG_05 .EQU 5
DIAG_06 .EQU 6
DIAG_07 .EQU 7
DIAG_08 .EQU 8
DIAG_09 .EQU 9
#ENDIF
;
#IF (DIAG_DISP == DIAG_7SEG)
; abcdefg
DIAG_00 .EQU 00000000B ; BLANK
DIAG_01 .EQU 01111110B ; 0
DIAG_02 .EQU 00110000B ; 1
DIAG_03 .EQU 01101101B ; 2
DIAG_04 .EQU 01111001B ; 3
DIAG_05 .EQU 00110011B ; 4
DIAG_06 .EQU 01011011B ; 5
DIAG_07 .EQU 00011111B ; 6
DIAG_08 .EQU 01110000B ; 7
DIAG_09 .EQU 01111111B ; 8
DIAG_10 .EQU 01110011B ; 9
#ENDIF
;
#IF (DIAG_DISP == DIAG_FLASH)
DIAG_00 .EQU 00000000B ; OFF
DIAG_01 .EQU 11111111B ; ON
DIAG_02 .EQU 00000000B ; OFF
DIAG_03 .EQU 11111111B ; ON
DIAG_04 .EQU 00000000B ; OFF
DIAG_05 .EQU 11111111B ; ON
DIAG_06 .EQU 00000000B ; OFF
DIAG_07 .EQU 11111111B ; ON
DIAG_08 .EQU 00000000B ; OFF
DIAG_09 .EQU 11111111B ; ON
#ENDIF
;
#IF (DIAG_DISP == DIAG_TRIG)
DIAG_00 .EQU 11111111B ; ON
DIAG_01 .EQU 11111111B ; ON
DIAG_02 .EQU 11111111B ; ON
DIAG_03 .EQU 11111111B ; ON
DIAG_04 .EQU 11111111B ; ON
DIAG_05 .EQU 11111111B ; ON
DIAG_06 .EQU 11111111B ; ON
DIAG_07 .EQU 11111111B ; ON
DIAG_08 .EQU 11111111B ; ON
DIAG_09 .EQU 11111111B ; ON
#ENDIF
;
; MEDIA ID VALUES
;
MID_NONE .EQU 0
@@ -182,6 +288,7 @@ CIODEV_PIO .EQU $70
CIODEV_UF .EQU $80
CIODEV_DUART .EQU $90
CIODEV_Z2U .EQU $A0
CIODEV_LPT .EQU $B0
;
; SUB TYPES OF CHAR DEVICES
;
@@ -216,7 +323,7 @@ RTCDEV_RP5 .EQU $50 ; RP5C01
;
VDADEV_VDU .EQU $00 ; ECB VDU - MOTOROLA 6545
VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563
VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220
VDADEV_GDC .EQU $20 ; GRAPHICS DISPLAY CTLR - UPD7220
VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918
VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445
;VDADEV_V9958 .EQU $50 ; V9958 VDU

View File

@@ -0,0 +1,82 @@
;
;==================================================================================================
; HBIOS ENVIRONMENT CONFIG VALUE EXPORT TOOL
;==================================================================================================
;
; Do we need a private stack???
;
#include "std.asm"
;
; Macro to make it simple to print a config value
;
#define prtval(tag,val) \
#defcont \ call PREFIX
#defcont \ call PRTSTRD
#defcont \ .text tag
#defcont \ call PRTEQ
#defcont \ ld hl,val
#defcont \ call PRTDEC
#defcont \ call EOL
;
; Program starts here
;
.org $100 ; Normal CP/M start address
;
; Print all desired config values...
;
prtval("ROMSIZE$", ROMSIZE)
prtval("CPUFAM$", CPUFAM)
;
ret
;
; Output correct prefix for command/shell
;
PREFIX:
#ifdef CMD
call PRTSTRD
.text "set $"
#endif
ret
;
; Output an equal sign
;
PRTEQ:
ld a,'='
call COUT
ret
;
; Output end-of-line. Handles differences between
; DOS/Windows and Unix.
;
EOL:
#ifdef CMD
ld a,13
call COUT
#endif
ld a,10
call COUT
ret
;
; Print a single character from register A.
; This routine is required by the utility routines included below.
;
COUT:
push af
push bc
push de
push hl
ld e,a
ld c,2
call $0005
pop hl
pop de
pop bc
pop af
ret
;
; Include the utility routines
;
#include "util.asm"
;
.end

View File

@@ -121,9 +121,7 @@ HDSK_FNTBL:
HDSK_VERIFY:
HDSK_FORMAT:
HDSK_DEFMED:
CALL SYSCHK ; INVALID SUB-FUNCTION
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL) ; INVALID SUB-FUNCTION
RET
;
;

View File

@@ -461,9 +461,7 @@ IDE_FNTBL:
IDE_VERIFY:
IDE_FORMAT:
IDE_DEFMED:
CALL SYSCHK ; NOT IMPLEMENTED
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED
RET
;
;
@@ -1246,19 +1244,31 @@ IDE_INITDEV00:
CALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
#ENDIF
;
XOR A
LD (IY+IDE_MED),0 ; CLEAR FLAGS
; DETERMINE IF CF DEVICE
LD HL,HB_WRKBUF ; FIRST WORD OF IDENTIFY DATA HAS CF FLAG
LD A,$8A ; FIRST BYTE OF MARKER IS $8A
CP (HL) ; COMPARE
JR NZ,IDE_INITDEV1 ; IF NO MATCH, NOT CF
INC HL
LD A,$84 ; SECOND BYTE OF MARKER IS $84
CP (HL) ; COMPARE
JR NZ,IDE_INITDEV1 ; IF NOT MATCH, NOT CF
SET 0,(IY+IDE_MED) ; SET FLAGS BIT FOR CF MEDIA
;
; DETERMINE IF CF DEVICE BY TESTING FOR CF CARD SIGNATURES
; IN THEORY, THERE ARE SOME OTHER POSSIBLE VARIATIONS, BUT
; THEY ARE NOT RECOMMENDED BY THE CF CARD SPEC AND MIGHT
; OVERLAP WITH "REAL" HARD DISK SIGNATURES. I HAVE NEVER
; SEEN A CF CARD THAT DID NOT USE ONE OF THE BELOW.
; CREDIT TO LASZLO SZOLNOKI
LD BC,$848A ; STANDARD CF CARD SIGNATURE
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$044A ; ALT SIG FOR NON-REMOVABLE
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR NON-REMOVABLE
CALL IDE_INITDEV000 ; TEST & SET
JR IDE_INITDEV1 ; CONTINUE INIT
;
IDE_INITDEV000:
; CHECK IF FIRST WORD OF IDENTIFY DATA MATCHES VALUE IN BC
; AND SET CF FLAG IF SO
LD HL,(HB_WRKBUF) ; FIRST WORD OF IDENTIFY DATA
OR A ; CLEAR CARRY
SBC HL,BC ; COMPARE
RET NZ ; ABORT IF NOT EQUAL
SET 0,(IY+IDE_MED) ; ELSE SET FLAGS BIT FOR CF MEDIA
RET ; AND RETURN
;
IDE_INITDEV1:
; DETERMINE IF LBA CAPABLE

View File

@@ -56,9 +56,7 @@ INTRTC_DISPATCH:
JP Z,INTRTC_SETALM ; SET ALARM
DEC A
JP Z,INTRTC_DEVICE ; REPORT RTC DEVICE INFO
CALL SYSCHK
LD A,ERR_NOFUNC
OR A
SYSCHKERR(ERR_NOFUNC)
RET
;
; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR
@@ -69,9 +67,7 @@ INTRTC_GETBLK:
INTRTC_SETBLK:
INTRTC_GETALM:
INTRTC_SETALM:
CALL SYSCHK
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL)
RET
;
; RTC GET TIME
@@ -205,7 +201,7 @@ INTRTC_INT2:
JR NZ,INTRTC_INTX ; NOPE, DONE
LD (HL),0 ; BACK TO YEAR ZERO
INTRTC_INTX:
JP SYSCHK
JP PANIC
INTRTC_VEC .EQU $-2
;
; CONVERT FROM BINARY BUF (HL) TO BCD BUF (DE)

328
Source/HBIOS/lpt.asm Normal file
View File

@@ -0,0 +1,328 @@
;
;==================================================================================================
; CENTRONICS (LPT) INTERFACE DRIVER
;==================================================================================================
;
; CENTRONICS-STYLE PARALLEL PRINTER DRIVER. ASSUMES IBM STYLE
; HARDWARE INTERFACE AS DESCRIBED BELOW.
;
; IMPLEMENTED AS A ROMWBW CHARACTER DEVICE. CURRENTLY HANDLES OUPUT
; ONLY.
;
; PORT 0 (INPUT/OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PD1 | PD0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 1 (INPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | BUSY | ACK | POUT | SEL | ERR | 0 | 0 | 0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 2 (INPUT/OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | STAT1 | STAT0 | ENBL | PINT | SEL | RES | LF | STB |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
LPT_NONE .EQU 0 ; NOT PRESENT
LPT_IBM .EQU 1 ; IBM PC STYLE INTERFACE
;
; PRE-CONSOLE INITIALIZATION - DETECT AND INIT HARDWARE
;
LPT_PREINIT:
;
; SETUP THE DISPATCH TABLE ENTRIES
; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST REMIAIN
; DISABLED.
;
LD B,LPT_CFGCNT ; LOOP CONTROL
XOR A ; ZERO TO ACCUM
LD (LPT_DEV),A ; CURRENT DEVICE NUMBER
LD IY,LPT_CFG ; POINT TO START OF CFG TABLE
LPT_PREINIT0:
PUSH BC ; SAVE LOOP CONTROL
CALL LPT_INITUNIT ; HAND OFF TO UNIT INIT CODE
POP BC ; RESTORE LOOP CONTROL
;
LD A,(IY+1) ; GET THE LPT TYPE DETECTED
OR A ; SET FLAGS
JR Z,LPT_PREINIT2 ; SKIP IT IF NOTHING FOUND
;
PUSH BC ; SAVE LOOP CONTROL
PUSH IY ; CFG ENTRY ADDRESS
POP DE ; ... TO DE
LD BC,LPT_FNTBL ; BC := FUNCTION TABLE ADDRESS
CALL NZ,CIO_ADDENT ; ADD ENTRY IF LPT FOUND, BC:DE
POP BC ; RESTORE LOOP CONTROL
;
LPT_PREINIT2:
LD DE,LPT_CFGSIZ ; SIZE OF CFG ENTRY
ADD IY,DE ; BUMP IY TO NEXT ENTRY
DJNZ LPT_PREINIT0 ; LOOP UNTIL DONE
;
LPT_PREINIT3:
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
; LPT INITIALIZATION ROUTINE
;
LPT_INITUNIT:
CALL LPT_DETECT ; DETERMINE LPT TYPE
LD (IY+1),A ; SAVE IN CONFIG TABLE
OR A ; SET FLAGS
RET Z ; ABORT IF NOTHING THERE
;
; UPDATE WORKING LPT DEVICE NUM
LD HL,LPT_DEV ; POINT TO CURRENT DEVICE NUM
LD A,(HL) ; PUT IN ACCUM
INC (HL) ; INCREMENT IT (FOR NEXT LOOP)
LD (IY),A ; UPDATE UNIT NUM
;
; SET DEFAULT CONFIG
LD DE,-1 ; LEAVE CONFIG ALONE
; CALL INITDEV TO IMPLEMENT CONFIG, BUT NOTE THAT WE CALL
; THE INITDEV ENTRY POINT THAT DOES NOT ENABLE/DISABLE INTS!
JP LPT_INITDEVX ; IMPLEMENT IT AND RETURN
;
;
;
LPT_INIT:
LD B,LPT_CFGCNT ; COUNT OF POSSIBLE LPT UNITS
LD IY,LPT_CFG ; POINT TO START OF CFG TABLE
LPT_INIT1:
PUSH BC ; SAVE LOOP CONTROL
LD A,(IY+1) ; GET LPT TYPE
OR A ; SET FLAGS
CALL NZ,LPT_PRTCFG ; PRINT IF NOT ZERO
POP BC ; RESTORE LOOP CONTROL
LD DE,LPT_CFGSIZ ; SIZE OF CFG ENTRY
ADD IY,DE ; BUMP IY TO NEXT ENTRY
DJNZ LPT_INIT1 ; LOOP TILL DONE
;
XOR A ; SIGNAL SUCCESS
RET ; DONE
;
; DRIVER FUNCTION TABLE
;
LPT_FNTBL:
.DW LPT_IN
.DW LPT_OUT
.DW LPT_IST
.DW LPT_OST
.DW LPT_INITDEV
.DW LPT_QUERY
.DW LPT_DEVICE
#IF (($ - LPT_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID LPT FUNCTION TABLE ***\n"
!!! ; FORCE AN ASSEMBLY ERROR
#ENDIF
;
; BYTE INTPUT
;
LPT_IN:
; INPUT NOT SUPPORTED - RETURN NULL BYTE
LD E,0 ; NULL BYTE
XOR A ; SIGNAL SUCCESS
RET
;
; BYTE OUTPUT
;
LPT_OUT:
CALL LPT_OST ; READY TO SEND?
JR Z,LPT_OUT ; LOOP IF NOT
LD A,(IY+3)
LD C,A ; PORT 0 (DATA)
OUT (C),E ; OUTPUT DATA TO PORT
CALL DELAY ; IGNORE ANYTHING BACK AFTER A RESET
LD A,%00001101 ; SELECT & STROBE, LEDS OFF
INC C ; PUT CONTROL PORT IN C
INC C
OUT (C),A ; OUTPUT DATA TO PORT
CALL DELAY ; IGNORE ANYTHING BACK AFTER A RESET
LD A,%00001100 ; SELECT, LEDS OFF
OUT (C),A ; OUTPUT DATA TO PORT
XOR A ; SIGNAL SUCCESS
RET
;
; INPUT STATUS
;
LPT_IST:
; INPUT NOT SUPPORTED - RETURN NOT READY
XOR A ; ZERO BYTES AVAILABLE
RET ; DONE
;
; OUTPUT STATUS
;
LPT_OST:
LD A,(IY+3)
LD C,A ; PORT 0 (DATA)
INC C ; SELECT STATUS PORT
IN A,(C) ; GET STATUS INFO
AND %10000000 ; ONLY INTERESTED IN BUSY FLAG
RET ; DONE
;
; INITIALIZE DEVICE
;
LPT_INITDEV:
HB_DI ; AVOID CONFLICTS
CALL LPT_INITDEVX ; DO THE REAL WORK
HB_EI ; INTS BACK ON
RET ; DONE
;
; THIS ENTRY POINT BYPASSES DISABLING/ENABLING INTS WHICH IS REQUIRED BY
; PREINIT ABOVE. PREINIT IS NOT ALLOWED TO ENABLE INTS!
;
LPT_INITDEVX:
LD A,(IY+3)
LD C,A ; PORT 0 (DATA)
XOR A ; CLEAR ACCUM
OUT (C),A ; SEND IT
INC C ; BUMP TO
INC C ; ... PORT 2
LD A,%00001000 ; SELECT AND ASSERT RESET, LEDS OFF
OUT (C),A ; SEND IT
CALL LDELAY ; HALF SECOND DELAY
LD A,%00001100 ; SELECT AND DEASSERT RESET, LEDS OFF
OUT (C),A ; SEND IT
XOR A ; SIGNAL SUCCESS
RET ; RETURN
;
;
;
LPT_QUERY:
LD E,(IY+4) ; FIRST CONFIG BYTE TO E
LD D,(IY+5) ; SECOND CONFIG BYTE TO D
XOR A ; SIGNAL SUCCESS
RET ; DONE
;
;
;
LPT_DEVICE:
LD D,CIODEV_LPT ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$40 ; C := DEVICE TYPE, 0x40 IS PIO
LD H,(IY+1) ; H := MODE
LD L,(IY+3) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
; LPT DETECTION ROUTINE
;
LPT_DETECT:
LD A,(IY+3) ; BASE PORT ADDRESS
LD C,A ; PUT IN C FOR I/O
CALL LPT_DETECT2 ; CHECK IT
JR Z,LPT_DETECT1 ; FOUND IT, RECORD IT
LD A,LPT_NONE ; NOTHING FOUND
RET ; DONE
;
LPT_DETECT1:
; LPT FOUND, RECORD IT
LD A,LPT_IBM ; RETURN CHIP TYPE
RET ; DONE
;
LPT_DETECT2:
; LOOK FOR LPT AT BASE PORT ADDRESS IN C
INC C ; PORT C FOR I/O
INC C ; ...
XOR A ; DEFAULT VALUE (TRI-STATE OFF)
OUT (C),A ; SEND IT
;
;IN A,(C) ; READ IT
;AND %11000000 ; ISOLATE STATUS BITS
;CP %00000000 ; CORRECT VALUE?
;RET NZ ; IF NOT, RETURN
;LD A,%11000000 ; STATUS BITS ON (LEDS OFF)
;OUT (C),A ; SEND IT
;IN A,(C) ; READ IT
;AND %11000000 ; ISOLATE STATUS BITS
;CP %11000000 ; CORRECT VALUE?
;
DEC C ; BACK TO BASE PORT
DEC C ; ...
LD A,$A5 ; TEST VALUE
OUT (C),A ; SEND IT
IN A,(C) ; READ IT BACK
CP $A5 ; CORRECT?
RET ; RETURN (ZF SET CORRECTLY)
;
;
;
LPT_PRTCFG:
; ANNOUNCE PORT
CALL NEWLINE ; FORMATTING
PRTS("LPT$") ; FORMATTING
LD A,(IY) ; DEVICE NUM
CALL PRTDECB ; PRINT DEVICE NUM
PRTS(": IO=0x$") ; FORMATTING
LD A,(IY+3) ; GET BASE PORT
CALL PRTHEXBYTE ; PRINT BASE PORT
; PRINT THE LPT TYPE
CALL PC_SPACE ; FORMATTING
LD A,(IY+1) ; GET LPT TYPE BYTE
RLCA ; MAKE IT A WORD OFFSET
LD HL,LPT_TYPE_MAP ; POINT HL TO TYPE MAP TABLE
CALL ADDHLA ; HL := ENTRY
LD E,(HL) ; DEREFERENCE
INC HL ; ...
LD D,(HL) ; ... TO GET STRING POINTER
CALL WRITESTR ; PRINT IT
;
; ALL DONE IF NO LPT WAS DETECTED
LD A,(IY+1) ; GET LPT TYPE BYTE
OR A ; SET FLAGS
RET Z ; IF ZERO, NOT PRESENT
;
; *** ADD MORE DEVICE INFO??? ***
;
XOR A
RET
;
;
;
LPT_TYPE_MAP:
.DW LPT_STR_NONE
.DW LPT_STR_IBM
;
LPT_STR_NONE .DB "<NOT PRESENT>$"
LPT_STR_IBM .DB "IBM$"
;
; WORKING VARIABLES
;
LPT_DEV .DB 0 ; DEVICE NUM USED DURING INIT
;
; LPT DEVICE CONFIGURATION TABLE
;
LPT_CFG:
;
LPT0_CFG:
; LPT MODULE A CONFIG
.DB 0 ; DEVICE NUMBER (SET DURING INIT)
.DB 0 ; LPT TYPE (SET DURING INIT)
.DB 0 ; MODULE ID
.DB LPT0BASE ; BASE PORT
.DW 0 ; LINE CONFIGURATION
;
LPT_CFGSIZ .EQU $ - LPT_CFG ; SIZE OF ONE CFG TABLE ENTRY
;
#IF (LPTCNT >= 2)
;
LPT1_CFG:
; LPT MODULE B CONFIG
.DB 0 ; DEVICE NUMBER (SET DURING INIT)
.DB 0 ; LPT TYPE (SET DURING INIT)
.DB 1 ; MODULE ID
.DB LPT1BASE ; BASE PORT
.DW 0 ; LINE CONFIGURATION
;
#ENDIF
;
LPT_CFGCNT .EQU ($ - LPT_CFG) / LPT_CFGSIZ

View File

@@ -157,9 +157,7 @@ MD_FNTBL:
MD_VERIFY:
MD_FORMAT:
MD_DEFMED:
CALL SYSCHK ; INVALID SUB-FUNCTION
LD A,ERR_NOTIMPL
OR A
SYSCHKERR(ERR_NOTIMPL) ; INVALID SUB-FUNCTION
RET
;
;
@@ -182,9 +180,7 @@ MD_CAP: ; ASSUMES THAT UNIT 0 IS RAM, UNIT 1 IS ROM
JR Z,MD_CAP0 ; UNIT 0
DEC A ; TRY UNIT 1
JR Z,MD_CAP1 ; UNIT 1
CALL SYSCHK ; INVALID UNIT
LD A,ERR_NOUNIT
OR A
SYSCHKERR(ERR_NOUNIT) ; INVALID UNIT
RET
MD_CAP0:
LD A,(HCB + HCB_RAMBANKS) ; POINT TO RAM BANK COUNT

View File

@@ -221,7 +221,7 @@ PIO_PROBE2:
RET
;
PIO_PROBECHIP:
; PIO IS HRD TO DETECT DEFINITIVELY. BEST I CAN THINK
; PIO IS HARD TO DETECT DEFINITIVELY. BEST I CAN THINK
; OF IS TO CHECK THE VALUE READ FROM THE CONTROL PORT.
; IT APPEARS TO BE ZERO CONSISTENTLY IF CHIP EXISTS.
IN A,(C) ; GET VALUE

View File

@@ -605,7 +605,7 @@ PIOMIVT(PIO3IN,PI3_IST,PRTTAB+3)
#DEFCONT ;\
#DEFCONT ; WAIT FOR SPACE FOR THE CHARACTER\
#DEFCONT ; IF WE ARE WAITING FOR A \
#DEFCONT ; CHARACTRE THEN OUTPUT IT NOW \
#DEFCONT ; CHARACTER THEN OUTPUT IT NOW \
#DEFCONT ; OTHERWISE STORE IT UNTIL THE \
#DEFCONT ; INTERRUPT CALLS FOR IT \
#DEFCONT ;\

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