Compare commits

...

144 Commits

Author SHA1 Message Date
Wayne Warthen
2f3fb51884 More Cleanup
- Tweaks to SURVEY and PORTSWP to improve port detection accuracy and handle Z280 better
- Recover a **lot** of wasted space in dbgmon using a few built-in utility routines instead of entire util.asm
- Improve the (D)evice command in romldr to use the HBIOS routine which is much more complete and saves space
2023-02-15 19:31:05 -08:00
Wayne Warthen
36fe842bec Fix SURVEY.COM (again)
See Issue #316
2023-02-14 18:47:09 -08:00
Wayne Warthen
73213d4321 Fix Missing Files 2023-02-13 19:53:35 -08:00
Wayne Warthen
7d19d3e403 More Cleanup 2023-02-13 19:32:43 -08:00
Wayne Warthen
c157d52c1d More Cleanup
This check-in includes some refactoring of the configuration files.
2023-02-12 19:26:23 -08:00
Wayne Warthen
3034fb6b5b More Documentation Updates 2023-02-11 19:13:52 -08:00
Wayne Warthen
fee6f29cf0 More Documentation Updates 2023-02-10 20:20:39 -08:00
Wayne Warthen
a531551573 Missing Files 2023-02-10 13:25:21 -08:00
Wayne Warthen
53bdee68d5 Fixed SURVEY Crash on SBC Platform
Hacked to avoid bank switch problem.  See issue #316
2023-02-10 11:31:32 -08:00
Wayne Warthen
0b8cb94cc2 More Documentation Updates 2023-02-09 19:57:27 -08:00
Wayne Warthen
ce6622244d More Doc Updates
Mostly formatting cleanup this time.
2023-02-07 19:38:27 -08:00
Wayne Warthen
b649cf19ce Delete Readme.unix 2023-02-07 15:42:48 -08:00
Wayne Warthen
96902ae2bd More Doc Updates 2023-02-07 15:41:39 -08:00
Wayne Warthen
97cb2f1dfc Yet Another Iteration of Documentation Updates 2023-02-06 20:06:25 -08:00
Wayne Warthen
146826b142 Continuing Doc Update
Mostly done with User Guide now.
2023-02-05 16:36:23 -08:00
Wayne Warthen
0a6009b38f Another Iteration of Documentation Updates
... still a lot left to go.
2023-01-29 17:40:59 -08:00
Wayne Warthen
4f48e48a99 First Round of Clean-up for Stable Release
- Restructured documentation and started updates (much more to go)
- Added test app to test HBIOS banking API.
2023-01-27 15:49:32 -08:00
Wayne Warthen
cd161067db Update CF Card Detection
In the IDE and PPIDE drivers, a CF Card is differentiated from a Hard Disk using the first word of the result of the IDENTIFY DEVICE command.  The value 0x045A was recently added because it was seen from a CF<->SD Card adapter.  However, the value has now been seen from a spinning hard disk.  Since the value is ambiguous and not defined in the CF Card specs, I am removing it from the list of CF Card signatures.

Credit to Mark Elkin for identifying this and helping me track it down.
2023-01-21 14:56:12 -08:00
Wayne Warthen
4d9c93734f Support Serial Keyboard with Video Displays
Added configuration setting VDAEMU_SERKBD which can be used to specify any serial unit # to be used as the keyboard for the video terminal.  Default value is $FF which means to use the default hardware keyboard.  All other values mean that terminal input is to come from corresponding serial unit #.

Also a couple more tweaks to the p-System boot volume.
2023-01-18 14:29:19 -08:00
Wayne Warthen
71a8b2b177 Finalize p-System Implementation
- Implemented Extended BIOS functions
- p-System slices moved into partition
2023-01-16 15:41:21 -08:00
Wayne Warthen
979e763739 Introducing p-System IV.0 for RomWBW
A full implementation of UCSD p-System IV.0 for RomWBW.  Derived from the official Z80 Adaptable p-System.

My first real programming was on this system.  So many memories...
2023-01-13 16:58:52 -08:00
Wayne Warthen
16475fe408 Audio Driver Cleanup
Resolved some consistency issues between the AY-3-8910 and SN76489 audio drivers.
2023-01-09 16:08:42 -08:00
Wayne Warthen
d2e1e5be4b Enable WAIT Signal for 9958 Video
Credit to Alan Cox.  This seems to allow a 9958 video chip to run with a Z180 without added wait states.
2023-01-08 18:41:49 -08:00
Wayne Warthen
2271c086b5 Minor IDE/CF/SD Disk Handling Updates
As suggested by Laszlo Szolnoki, I have added an additional CF Card signature to the IDE and PPIDE drivers.  He also pointed out a deficiency in the disk size printing which has been addressed.
2023-01-04 16:24:31 -08:00
Wayne Warthen
2b4631195a Misc Updates Based on Input from Eluan Miranda
I got a very nice email from Eluan Miranda.  He pointed out a few inconsistencies in the video and audio driver configurations.  I made a few adjustments to clean things up.
2023-01-01 15:26:42 -08:00
Wayne Warthen
d5f0699fc3 Regen Docs and Bump Version 2023-01-01 11:06:39 -08:00
Wayne Warthen
5c84fc6213 Merge pull request #313 from b1ackmai1er/dev
Change romldr to accept a baud rate
2023-01-01 11:02:10 -08:00
b1ackmai1er
d9f11b9f5e ym2612 minors 2022-12-31 21:30:01 +08:00
b1ackmai1er
bb2a68e066 Update romldr.asm 2022-12-31 11:22:34 +08:00
b1ackmai1er
cd426ba6ca Update GettingStarted.md 2022-12-31 10:43:29 +08:00
b1ackmai1er
491bbb68a6 Update romldr.asm 2022-12-31 01:00:06 +08:00
b1ackmai1er
b3bf3e27ee Update romldr.asm 2022-12-30 20:08:28 +08:00
b1ackmai1er
523ce60093 Update GettingStarted.md 2022-12-30 16:38:43 +08:00
b1ackmai1er
3f00cfbfb8 Merge pull request #31 from wwarthen/dev
Dev
2022-12-30 05:08:01 +08:00
Wayne Warthen
2dd9edd8ca Regenerate Docs and Bump Version 2022-12-29 10:14:02 -08:00
Wayne Warthen
6145383a65 Make VGM Names Lowercase (part 2) 2022-12-29 10:07:02 -08:00
Wayne Warthen
c0721a3f85 Make VGM Names Lowercase (part 1) 2022-12-29 10:05:58 -08:00
Wayne Warthen
c10497bd03 Merge pull request #312 from b1ackmai1er/dev
ym2612 driver updates
2022-12-29 09:15:09 -08:00
b1ackmai1er
5b1542e49b Update ym2612.asm 2022-12-29 18:57:50 +08:00
b1ackmai1er
96269a7f45 Update ym2612.asm 2022-12-21 22:53:47 +08:00
b1ackmai1er
bd03277bfe Update ym2612.asm 2022-12-21 05:31:38 +08:00
b1ackmai1er
c072027b87 Preserve registers 2022-12-20 17:19:12 +08:00
b1ackmai1er
e409391f14 Update Scales.asm 2022-12-19 21:54:17 +08:00
b1ackmai1er
030228e9b8 Update ym2612.asm 2022-12-18 22:44:05 +08:00
b1ackmai1er
d584d3d553 rename fm demo program 2022-12-18 21:03:10 +08:00
b1ackmai1er
2049b35ee2 Update ym2612.asm 2022-12-18 20:56:12 +08:00
b1ackmai1er
285bc6611f Update Scales.asm 2022-12-18 20:44:55 +08:00
b1ackmai1er
be8177b8a4 ym26112 driver 2022-12-18 20:41:29 +08:00
Wayne Warthen
9c80db786e Merge pull request #311 from b1ackmai1er/dev
Some vgmplayer updates
2022-12-16 19:29:43 -08:00
b1ackmai1er
d062b4345d Update YM2612.ASM
Tidy up
2022-12-16 22:31:25 +08:00
b1ackmai1er
03bf1527cc Adjust to fit on disk images 2022-12-15 22:02:58 +08:00
b1ackmai1er
38318262e9 reset defaults 2022-12-15 21:36:45 +08:00
b1ackmai1er
eefad65904 Remove tunes
They get copied over in build process. I think this is the right behaviour ?
2022-12-15 21:31:02 +08:00
b1ackmai1er
4d6a922402 Merge pull request #30 from wwarthen/dev
Dev
2022-12-15 21:26:46 +08:00
b1ackmai1er
e32d6e2d5d vgmplay updates
Still not in a terrific state but better
2022-12-15 21:25:56 +08:00
Wayne Warthen
9ea462ef7a Fix ZDE Default Config
Re-enable use of control-K to access menus.
2022-12-14 17:05:35 -08:00
Wayne Warthen
1681e159bd CP/NET update from Douglas Miller
Minor rev, but includes a fix for CPNBOOT.
2022-12-14 15:55:11 -08:00
Wayne Warthen
3b8973fa12 ZDE Updates from Lars Nelson
Lars has corrected some time stamp deficiencies in ZDE 1.6.  It is now v1.8.
2022-12-12 15:27:28 -08:00
b1ackmai1er
ef1989f600 vgm ym2612 updates 2022-12-12 21:41:18 +08:00
b1ackmai1er
023e54a9a8 Merge pull request #29 from wwarthen/dev
User Defined SD Interface
2022-12-12 17:13:16 +08:00
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
b1ackmai1er
f86019a628 Merge pull request #28 from wwarthen/dev
Dev
2022-12-09 20:19:44 +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
b1ackmai1er
149ffb899b Merge pull request #27 from wwarthen/dev
Dev
2022-12-07 05:30:20 +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
b1ackmai1er
23a10343ca Merge pull request #15 from wwarthen/dev
Dev
2022-06-18 12:58:19 +08:00
277 changed files with 17911 additions and 9001 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

5
.gitignore vendored
View File

@@ -20,6 +20,7 @@
Binary/**/*.mym
Binary/**/*.pt3
!Binary/cpnos-wbw.sys
Source/**/eeprom
Source/Apps/Assign.com
@@ -94,8 +95,8 @@ Tools/unix/zx/zx
!Source/ZPM3/*.[Cc][Oo][Mm]
!Source/ZSDOS/*.[Cc][Oo][Mm]
!Source/ZRC/*.bin
!Source/ZZR/*.bin
!Source/ZZR/*.hex
!Source/ZZRC/*.bin
!Source/ZZRC/*.hex
!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

@@ -7,4 +7,4 @@
***********************************************************************
This directory contains some sample ProTracker and MYM sound
files that can be played by the TUNE application.
files that can be played by the TUNE or VGMPLAY application.

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

@@ -75,8 +75,8 @@ The VDU video board requires a dedicated onboard ROM containing the
font data. The "vdu.rom" file contains the binary data to program
onto that chip.
Disk Images (fd_*.img, hd_*.img)
------------------------------
Disk Images (fd_*.img, hd_*.img, psys.img)
------------------------------------------
RomWBW includes a mechanism for generating floppy disk and hard disk
binary images that are ready to copy directly to a floppy, hard disk,
@@ -96,16 +96,18 @@ RawWriteWin (as long as you have access to a floppy drive on your
Windows computer). The resulting floppy disks will be usable on any
RomWBW-based system with floppy drive(s).
Likewise, the hd_*.img files are hard disk images. Each file is
intended to be copied to the start of any type of hard disk media
(typically a CF Card or SD Card). The resulting media will be usable
on any RomWBW-based system that accepts the corresponding media type.
Likewise, the hd512_*.img and hd1k_*.img files are hard disk images.
Each file is intended to be copied to the start of any type of hard
disk media (typically a CF Card or SD Card). The resulting media will
be usable on any RomWBW-based system that accepts the corresponding
media type.
WARNING: The hdnew_*.img disk images are part of a new disk
format that is a work in progress. Do not use these disk
images without knowing exactly what you are doing! The
hd_*.img disk images continue to be the images you should
be using under normal circumstances.
NOTE: The hd512_*.img files are equivalent to the hd_*.img
files in previous distributions. The hd1k_*.img files
contained a revised file system format that increases the
maximum number of CP/M directory entries from 512 to 1024.
Refer to the ReadMe.txt in the Source/Images directory
for details.
Documentation of the pre-built disk images is contained in the
DiskList.txt file in this directory.
@@ -115,6 +117,12 @@ the BuildImages.cmd script in the Source directory. Additional
information on how to generate custom disk images is found in the
Source\Images ReadMe.txt file.
The psys.img file contains a full implementation of the UCSD p-System
for the Z80 running under RomWBW. This image file must be placed on
disk media by itself (not appended or concatenated with hd*.img files.
Refer to the Source/pSys/ReadMe.txt file for more information on the
p-System implementation.
Propeller ROM Images (*.eeprom)
-------------------------------

View File

@@ -1,260 +0,0 @@
***********************************************************************
*** ***
*** R o m W B W ***
*** ***
*** Z80/Z180 System Software ***
*** ***
***********************************************************************
This directory ("Binary") is part of the RomWBW System Software
distribution archive. Refer to the ReadMe.txt file in this
directory for more information on the overall contents of the
directory.
When distributed, RomWBW contains a set of pre-built ROM images that
are ready to program onto the EEPROM of any of the Z80/Z180 based
RetroBrew Computers CPU boards. Additionally, any custom built ROM
images will be placed in this directory.
All of the pre-built ROM images are 512KB. This size is compatible
with all of the Z80/Z180 systems. Some systems can accept different
size ROM images. Creating alternative sizes requires a custom ROM
build (see ReadMe.txt in the Source directory).
It is critical that the right ROM Imgae be selected for the target
platform being used. The table below indicates the correct ROM
image to use for each platform:
SBC V1/V2 SBC_std.rom
SBC SimH SBC_simh.rom
Zeta V1 ZETA_std.rom
Zeta V2 ZETA2_std.rom
N8 N8_std.rom
Mark IV MK4_std.rom
RC2014 w/ Z80 RCZ80_std.rom
RC2014 w/ Z180 RCZ180_nat.rom (native Z180 memory addressing)
RC2014 w/ Z180 RCZ180_ext.rom (external 512K RAM/ROM module)
SC-series SC126, SC130, SC131
Easy Z80 EZZ180_std.rom
Dyno DYNO_std.rom
You will find there is one additional ROM image called
"UNA_std.rom". This ROM image is an UNA-based RomWBW ROM image. As
such, this ROM image can be used on any Z80/Z180 platform supported
by John Coffman's UNA BIOS. Refer to RetroBrew Computers Wiki for
more information on UNA hardware support.
For each of the ROM Images (".rom"), there are corresponding files
with the extensions of ".com" and ".img". The .com variant can be
copied to a functional RomWBW-based system and executed like a
normal application under CP/M or Z-System. This will load the new
ROM on-the-fly. It is an excellent way to test a ROM Image before
actually burning it. Similarly, the .img files can be loaded using
the UNA FAT loader for testing.
All of the standard ROM Images are configured for:
- 512KB ROM Disk
- 512KB RAM Disk
- 38.4Kbps baud serial console (*)
- Auto-discovery of all serial ports
* RC2014 and Stephen Cousins' kits run at 115,200Kbps baud
All hard disk type devices (IDE, PPIDE, CF Card, SD Card) will be
automatically assigned at least two drive letters per device. The
drive letters will refer to the first 2 slices of the device. The
ASSIGN command can be used to display and reassign drives to disk
devices and slices as desired.
Standard ROM Image Notes
------------------------
The standard ROM images will detect and install support for certain
devices and peripherals that are on-board or frequently used with
each platform as documented below. If the device or peripheral is
not detected at boot, the ROM will simply bypass support
appropriately.
SBC (SBC_std.rom):
- CPU speed is detected at startup
- Console on onboard UART serial port at 38400 baud
- Includes support for PPIDE/CF Card(s) connected to on-board
parallel port.
- Includes support for CVDU and VGA3 boards. If detected at
startup, support for video and keyboard is installed
including VT-100/ANSI terminal emulation.
- Auto detects DiskIO v3 floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Auto-detects PropIO or PropIO V2 and installs associated
video, keyboard and SD Card support if present.
- If PropIO, PropIO V2, CVDU, or VGA hardware is detected,
initial console output is determined by JP2. If JP2 is
shorted, console will go to on-board serial port, if JP2
is open, console will go to the detected video and keyboard
ports.
- SBC V1 has a known race condition in the bank switching
circuit which is likely to cause system instability. SBC
V2 does not have this issue.
SBC (SBC_simh.rom):
- SBC variant customized to run under SimH
- Implments two emulated SimH hard disk images
- Uses SimH RTC
ZETA (ZETA_std.rom):
- CPU speed is detected at startup
- Console on onboard UART serial port at 38400 baud
- Auto-detects FDC and installs 3.5" disk support
if found
- Auto detects on-board floppy disk controller and installs
support for one attached 3.5" floppy disk if found
- Auto-detects ParPortProp and includes support for it if it
is attached.
- If ParPortProp is installed, initial console output is
determined by JP1. If JP1 is shorted, console will go to
on-board serial port, if JP1 is open, console will go to
ParPortProp video and keyboard ports.
ZETA2 (ZETA2_std.rom):
- CPU speed is detected at startup
- Console on onboard UART serial port at 38400 baud
- Auto detects on-board floppy disk controller and installs
support for one attached 3.5" floppy disk if found
- Auto-detects ParPortProp and includes support for it if it
is attached.
- Uses CTC to generate periodic timer interrupts.
- If ParPortProp is installed, initial console output is
determined by JP1. If JP1 is shorted, console will go to
on-board serial port, if JP1 is open, console will go to
ParPortProp video and keyboard ports.
N8 (N8_std.rom):
- CPU speed is detected at startup
- Console on Z180 onboard primary ASCI serial port at 38400 baud
- Auto detects onboard floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Includes support for on-board TMS9918 video and keyboard
including VT-100/ANSI terminal emulation.
- Includes support for on-board SD Card as hard disk and
assumes a production level N8 board (date code >= 2312).
MK4 (MK4_std.rom):
- CPU speed is detected at startup
- Console on Z180 onboard primary ASCI serial port at 38400 baud
- Includes support for on-board IDE port (CF Card via adapter).
- Includes support for on-board SD Card port.
- Auto detects Dual IDE floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Auto-detects PropIO or PropIO V2 and installs associated
video, keyboard and SD Card support if present.
- Includes support for CVDU and VGA3 boards. If detected at
startup, support for video and keyboard is installed
including VT-100/ANSI terminal emulation.
RCZ80 (RCZ80_std.rom):
- Assumes CPU oscillator of 7.3728 MHz
- Requires 512K RAM/ROM module
- Auto detects Serial I/O Module (ACIA), Dual Serial
Module (SIO/2), and EP Dual UART.
- Console on whichever serial module is installed,
order of priority is UART, SIO, then ACIA.
- Baud rate is determined by hardware, but normally 115200.
- Auto support for RC2014 Compact Flash Module
- Auto support for RC2014 PPIDE Module
- Support for Scott Baker SIO board may be enabled in config
- Auto detects WDC floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Support for SMC floppy controller may be enabled in config
- Support for J.B. Lang TMS9918 video card may be enabled in config
- Support for PropIO V2 may be enabled in config (PRPENABLE). If
enabled, will auto-detect and install associated
video, keyboard and SD Card support if present.
RCZ80 w/ KIO (RCZ80_kio.rom):
- Same as RCZ80_std
- Requires KIO module
- SIO ports provided by KIO
RCZ180 (RCZ180_nat.rom & RCZ180_ext.rom):
- Assumes CPU oscillator of 18.432 MHz
- Console on Z180 onboard primary ASCI serial port at 115200 baud
- Auto support for RC2014 Compact Flash Module
- Auto support for RC2014 PPIDE Module
- Support for alternative serial modules may be enabled in config
- Auto detects WDC floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Support for SMC floppy controller may be enabled in config
- Support for J.B. Lang TMS9918 video card may be enabled in config
- You must pick the variant (_ext or _nat) depending
on which memory module you are using:
- RCZ180_ext.rom uses external bank management to access
memory, such as the 512K RAM/ROM module.
- RCZ180_nat.rom uses the built-in Z180 memory manager
for use with memory modules using direct physical
addressing of memory, such as the SC119.
- Support for PropIO V2 may be enabled in config (PRPENABLE). If
enabled, will auto-detect and install associated
video, keyboard and SD Card support if present.
RCZ280 (RCZ280_ext.rom, RCZ280_nat.rom, RCZ280_nat_zz.rom):
- Assumes CPU oscillator of 24 MHz
- Bus clock will be 6 MHz or 12 MHz, so does not match RC2014 standard!!!
- Requires 512K RAM/ROM module (unless using ZZ80MB)
- Auto detects Serial I/O Module (ACIA), Dual Serial
Module (SIO), EP Dual UART (DUART), and built-in Z280 UART (Z2U).
- ACIA module is only supported on _ext variant.
- Built-in Z280 UART (Z2U) is buffered and interrupt driven only
on _nat and _nat_zz variants. It uses polling I/O on _ext.
- Console on whichever serial module is installed,
order of priority is Z2U, UART, SIO, DUART, ACIA
- Baud rate is determined by hardware, but normally 115200.
- Auto support for RC2014 Compact Flash Module
- Auto support for RC2014 PPIDE Module
- Support for Scott Baker SIO board may be enabled in config
- Auto detects WDC floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Support for SMC floppy controllers may be enabled in config
- Support for J.B. Lang TMS9918 video card may be enabled in config
- You must pick the variant (_ext, _nat, or _nat_zz) depending
on which platform or memory module you are using:
- RCZ280_ext.rom uses external bank management to access
memory, such as the 512K RAM/ROM module.
- RCZ280_nat.rom uses the built-in Z280 memory manager
for use with memory modules using direct physical
addressing of memory, such as the SC119.
- RCZ280_nat_zz.rom is specifically for the ZZ80MB platform
which has both CPU and memory onboard.
- Support for PropIO V2 may be enabled in config (PRPENABLE). If
enabled, will auto-detect and install associated
video, keyboard and SD Card support if present.
SCZ180 (SCZ180_126.rom, SCZ180_130.rom, SCZ180_131.rom, SCZ140.rom):
- Same as RCZ180
- Adds auto support for onboard SPI SD Card
- The 4 different variants of SCZ180 are provided to match the
4 corresponding systems (SC126, SC130, SC131, and SC140)
designed by Stephen Cousins.
- Support for PropIO V2 may be enabled in config (PRPENABLE). If
enabled, will auto-detect and install associated
video, keyboard and SD Card support if present.
EZZ80 (EZZ80_std.rom):
- Assumes CPU oscillator of 10.000 MHz
- Console on primary SIO serial port at 115200 baud
- Includes support for on-board SIO
- Auto support for RC2014 Compact Flash Module
- Auto support for RC2014 PPIDE Module
- Auto detects WDC floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Support for SMC floppy controllers may be enabled in config
- Support for PropIO V2 may be enabled in config (PRPENABLE). If
enabled, will auto-detect and install associated
video, keyboard and SD Card support if present.
DYNO (DYNO_std.rom):
- Assumes CPU oscillator of 18.432 MHz
- Console on Z180 onboard serial ports at 38400 baud
- Includes support for BQ4842 RTC
- Auto detects Dyno floppy disk controller and installs
support for two attached 3.5" floppy disks if found
- Includes support for onboard PPIDE

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

BIN
Binary/cpnos-wbw.sys Normal file

Binary file not shown.

View File

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

View File

@@ -62,6 +62,13 @@ 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)
- L?N: Updated ZDE to v1.8 including time stamp preservation fixes
- D?M: Minor update to CP/NET client files, fix to CPNBOOT
- WBW: Added p-System IV.0 Z80 implementation
- WBW: Hacked SURVEY to work around bank switching crash
Version 3.1
-----------

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/RomWBW Errata.pdf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/RomWBW System Guide.pdf Normal file

Binary file not shown.

BIN
Doc/RomWBW User Guide.pdf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/qcp27.pdf Normal file

Binary file not shown.

BIN
Doc/qdos27.pdf Normal file

Binary file not shown.

BIN
Doc/qpm27.pdf Normal file

Binary file not shown.

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

1419
ReadMe.md

File diff suppressed because it is too large Load Diff

1396
ReadMe.txt

File diff suppressed because it is too large Load Diff

View File

@@ -21,9 +21,6 @@ call :asm rtchb || exit /b
zxcc Z80ASM -SYSGEN/F || exit /b
zxcc MAC SURVEY.ASM -$PO || exit /b
zxcc MLOAD25 -SURVEY.COM=SURVEY.HEX || exit /b
pushd XM && call Build || exit /b & popd
pushd FDU && call Build || exit /b & popd
pushd Tune && call Build || exit /b & popd
@@ -34,6 +31,7 @@ pushd ZMD && call Build || exit /b & popd
pushd Dev && call Build || exit /b & popd
pushd VGM && call Build || exit /b & popd
pushd cpuspd && call Build || exit /b & popd
pushd Survey && call Build || exit /b & popd
copy *.com %APPBIN%\ || exit /b

View File

@@ -17,3 +17,4 @@ pushd ZMD && call Clean || exit /b 1 & popd
pushd Dev && call Clean || exit /b 1 & popd
pushd VGM && call Clean || exit /b 1 & popd
pushd cpuspd && call Clean || exit /b 1 & popd
pushd Survey && call Clean || exit /b 1 & popd

View File

@@ -1,13 +1,9 @@
OBJECTS = sysgen.com survey.com \
syscopy.com assign.com format.com talk.com mode.com rtc.com \
timer.com rtchb.com
SUBDIRS = XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd
OBJECTS = sysgen.com syscopy.com assign.com format.com talk.com \
mode.com rtc.com timer.com rtchb.com
SUBDIRS = XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd Survey
DEST = ../../Binary/Apps
TOOLS =../../Tools
include $(TOOLS)/Makefile.inc
USETASM = 1
survey.com: USETASM = 0

View File

@@ -0,0 +1,16 @@
@echo off
setlocal
set TOOLS=..\..\..\Tools
set PATH=%TOOLS%\zxcc;%PATH%
set CPMDIR80=%TOOLS%/cpm/
:: zxcc MAC survey.asm -$PO || exit /b
:: zxcc MLOAD25 survey || exit /b
zxcc M80 -,=survey/L/R
zxcc L80 -survey,survey/N/E
copy /Y survey.com ..\..\..\Binary\Apps\ || exit /b

View File

@@ -0,0 +1,8 @@
@echo off
setlocal
if exist *.hex del *.hex
if exist *.rel del *.rel
if exist *.prn del *.prn
if exist *.lst del *.lst
if exist *.com del *.com

View File

@@ -0,0 +1,6 @@
OBJECTS = survey.com
DEST = ../../../Binary/Apps
TOOLS = ../../../Tools
OTHERS = *.hex
include $(TOOLS)/Makefile.inc

View File

@@ -15,6 +15,10 @@
;
;VERSION LIST - Most recent version first.
;
;10/Feb/23 - Total hack to avoid crash on ECB SBC
; RomWBW now required by this version
; Wayne Warthen
;
;16/Dec/17 - Handle 16-bit port addressing using
; Z80 IN A,(C) instruction. Wayne Warthen
;
@@ -234,7 +238,21 @@ TABS EQU 9 ; Tab columns
; MAIN PROGRAM ;
;***********************;
;
ORG 100H
;ORG 100H
;
;
;
.Z80
LD HL,IMGORG
LD DE,START
LD BC,IMGEND-IMGORG
LDIR
JP START
.8080
;
IMGORG:
;
.PHASE 8000H
;
START:
LXI H,0 ; Save stack pointer
@@ -242,7 +260,8 @@ START:
SHLD OLDSP
LXI SP,FINIS+64
CALL TYPE ; Type initial CRLF
DB TAB,TAB,'*** System Survey (December 17) ***'
DW CRLF,CRLF
DB TAB,'*** RomWBW System Survey (Feb 2023) ***'
DW CRLF,CRLFE
;DISK SURVEY
@@ -586,6 +605,24 @@ PDLY:
MOV A,H ; ON CONSOLE STATUS PORT
ORA L
JNZ PDLY
;
.Z80
; record the active bank
ld a,(0ffe0h) ; get current hbios bank id
ld (BANK),a ; and save it
; Check for Z180 CPU
xor a ; assume Z80
ld (IS180),a ; save it
ld de,0506H ; 5 x 6
db 0EDH,05CH ; MLT DE: de = 30 if z180
ld a,e ; result to A
cp 30 ; check if multiply happened
jr nz,z80 ; if invalid, then Z80
or 0ffH ; flag value for Z180
ld (IS180),a ; save it
z80:
.8080
;
LXI H,0 ; Init active port counter
mvi d,0 ; Init port counter
mvi e,0ffh ; init port group variable
@@ -596,17 +633,77 @@ PORTLP:
CPI SKIPORT
JZ ISPORT ; Print mask port
ENDIF
mov c,a ; port number to reg c
mvi b,0 ; for 16 bit port addressing
db 0edh,078h ; z80: in a,(c)
; inactive port could return 0xFF or 0x78 or the port address
cmp c
jz nextpt
cpi 0FFh
jz nextpt
cpi 078h
jz nextpt
;
.Z80
di ; interrupts off
ld a,(IS180) ; Z180?
or a
jr nz,rd180
;
; Z80 port read
; Read port using IN A,(C), push result
ld a,d
ld c,a
ld (pnum0a),a ; dynamic update
ld (pnum0b),a ; dynamic update
ld b,0
in a,(c)
push af
; Read port using IN A,(port), push result
in a,(0ffh) ; IN0
pnum0a equ $-1
push af
; Read port using IN A,(port), push result
in a,(0ffh) ; IN0
pnum0b equ $-1
push af
jr rdz
;
rd180:
; Z180 port read
; Read port using IN A,(C), push result
ld a,d
ld c,a
ld (pnum1a),a ; dynamic update
ld (pnum1b),a ; dynamic update
ld b,0
in a,(c)
push af
; Read port using IN0 A,(port), push result
db 0EDH,038H,0FFH ; IN0
pnum1a equ $-1
push af
; Read port using IN0 A,(port), push result
db 0EDH,038H,0FFH ; IN0
pnum1b equ $-1
push af
;
rdz:
; Make sure correct bank is still selected!
push af
ld a,(BANK)
call 0FFF3H
pop af
;
ei ; interrupts back on now
;
; port is considered inactive if values read from different port
; read mechanisms differ or if the value $FF is read consistently,
; or if the value read is equal to the port number itself
;
pop bc ; second IN0 (port) value
pop af ; first IN0 (port) valule
cp b ; same?
pop bc ; IN (C) value
jr nz,ISPORT ; if no, active running ctr port
cp b ; same?
jr nz,NEXTPT ; if not, inactive port
cp 0FFh ; pullup value???
jr z,NEXTPT ; if so, consider not active
cp d ; value same as port num???
jr z,NEXTPT ; if so, consider not active
;
.8080
ISPORT:
mov a,d ; got a live one, probably
ani 0f0h ; is port in same group as last ?
@@ -708,7 +805,6 @@ BITSHF:
JNZ BITSHF
RET
;***********************;
; DATA STORAGE ;
;***********************;
@@ -722,6 +818,13 @@ RAMF: DS 1 ; RAM good flag
EMPF: DS 1 ; Empty so far flag
BLKSHF: DS 1 ; block shift factor
MAXALL: DS 2 ; maximum block number
BANK: DS 1 ; saved HBIOS bank id
IS180: DS 1 ; non-zero for Z180 CPU
FINIS EQU $ ; End of program
;
.DEPHASE
;
IMGEND:
;
END


View File

@@ -0,0 +1,329 @@
;
;------------------------------------------------------------------------------
; PLAY SCALES USING HBIOS
;------------------------------------------------------------------------------
;
FCB .EQU $5C ; Location of default FCB
BDOS .EQU $0005
;
.ORG $0100
;
LD (OLDSTACK),SP ; save old stack pointer
LD SP,STACK ; set new stack pointer
;
;------------------------------------------------------------------------------
; GET DEVICE # FROM COMMAND LINE
;------------------------------------------------------------------------------
;
LD A,(FCB+1) ; GET FIRST CHAR
SUB ' '
JR Z,NO_ARG
SUB '0'-' '
JP C,EXIT
;
;------------------------------------------------------------------------------
; DISPLAY DEVICE AND NUMBER OF CHANNELS
;------------------------------------------------------------------------------
;
NO_ARG: LD (DEVICE),A ;
LD DE,TXT_DEV ; DEVICE:
CALL PRTSTR
CALL PRTDECB
LD C,A ; GET DEVICE ID
LD A,':'
CALL PRTCHR
LD B,$55
PUSH BC
LD E,4
RST 08
LD DE,TXT_NAME
LD A,B
RRCA \ RRCA \ RRCA \ RRCA
CALL PRTIDXDEA ; SHOW NAME
LD DE,TXT_CH
CALL PRTSTR
;
POP BC ; GET & DISPLAY # CHANNELS
LD E,1
RST 08
LD A,B
CALL PRTDECB
CALL CRLF ; NUMBER OF CHANNELS IS IN B
;
;------------------------------------------------------------------------------
; LOOP THROUGH EACH CHANNEL
;------------------------------------------------------------------------------
CH__TONE: LD A,(DEVICE) ; C CONTAINS DEVICE
LD C,A ; THROUGH THIS LOOP
;
PUSH BC
LD B,50H ; RESET DEVICE
RST 08
POP BC
;
PUSH BC
LD B,51H ; VOLUME FULL
LD L,0FFH
RST 08
POP BC
;
LD A,B
TST_TONE_LP: DEC A
LD (CHANNEL),A ; SAVE CURRENT CHANNEL
CALL TST_SCALES ; SCALES TEST
; CALL TST_VOLUME ; VOLUME TEST
CALL CRLF
DJNZ TST_TONE_LP
;
PUSH BC
LD B,50H ; RESET DEVICE
RST 08
POP BC
;
;------------------------------------------------------------------------------
; RESTORE STACK & EXIT
;------------------------------------------------------------------------------
;
EXIT: LD SP, (OLDSTACK) ; Exit to CP/M
RST 00H
DI
HALT
;
;------------------------------------------------------------------------------
; PLAY SCALES FROM HIGHEST HBIOS NOTE TO LOWEST
;------------------------------------------------------------------------------
;
TST_SCALES: PUSH BC
PUSH AF
;
LD HL,380 ; START NOTE
LD (NOTE),HL ; Top of Octave 7 is 343
LD B,51H ; VOLUME HIGH
LD L,0FFH
PUSH BC
RST 08
POP BC
;
NEXT0: PUSH BC
;
LD DE,TXT_TSTCH ; DISPLAY CHANNEL
CALL PRTSTR
LD A,(CHANNEL)
CALL PRTDECB
;
LD DE,TXT_NOTE ; DISPLAY NOTE
CALL PRTSTR
LD HL,(NOTE)
CALL PRTDECW
POP BC
;
LD B,53H ; SET NOTE
LD HL,(NOTE)
PUSH BC
RST 08
POP BC
OR A ; DID DRIVER FAIL
JR Z,NEXT4 ; THIS NOTE ?
LD DE,TXT_BAD_N
CALL FAILMSG
JR SKIP
;
NEXT4: LD B,57H ; DURATION
LD HL,1000
PUSH BC
RST 08
POP BC
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
OR A ; DID DRIVER FAIL
JR Z,NEXT2 ; TO PLAY ?
LD DE,TXT_BAD_N
CALL FAILMSG
JR SKIP
;
NEXT2: CALL DELAY
CALL CRLF
;
SKIP: LD HL,(NOTE)
DEC HL
LD (NOTE),HL
INC HL
LD A,H
OR L
DEC HL
JR NZ,NEXT0
;
LD B,51H ; VOLUME
LD L,00H ; OFF
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
PUSH BC
LD C, 6 ; check for keypress
LD E,0FFH
CALL BDOS
POP BC
OR A
JP NZ,EXIT
POP AF
POP BC
;
RET
;
FAILMSG: PUSH AF
PUSH BC
CALL PRTSTR
CALL CRLF
POP BC
POP AF
RET
;
;------------------------------------------------------------------------------
; CONSTANT TONE ON ALL CHANNELS, SCALE VOLUME
;------------------------------------------------------------------------------
;
TST_VOLUME:
LD HL,332+48 ; TONE
LD (NOTE),HL
;
LD B,3
NEXTCH1 LD A,B
DEC A
LD (CHANNEL),A
PUSH BC ; ACROSS
CALL TONE ; ALL
LD C, 6 ; KEYPRESS
LD E, 0FFH
CALL BDOS
POP BC ; CHANNELS
OR A
JP NZ,EXIT
DJNZ NEXTCH1
RET
TONE: LD A,(DEVICE)
LD C,A
LD B,50H ; RESET
PUSH BC
RST 08
POP BC
;
NEXT1: LD B,51H ; VOLUME
LD A,(VOLUME)
LD L,A
PUSH BC
RST 08
POP BC
;
LD B,53H ; NOTE
LD HL,(NOTE)
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
CALL DELAY
;
LD A,(VOLUME)
DEC A
LD (VOLUME),A
JR NZ,NEXT1
;
LD B,51H ; VOLUME
LD L,00H
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
PUSH BC
LD A,(CHANNEL)
LD D,A
POP BC
RST 08
;
RET
;;
;------------------------------------------------------------------------------
; LONG DELAY
;------------------------------------------------------------------------------
;
DELAY: LD HL,-1
DELAY1: DEC HL
LD A,H
OR L
JR NZ,DELAY1
RET
;
;------------------------------------------------------------------------------
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY 0
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; TO THE START OF THE STRING LIST.
;------------------------------------------------------------------------------
;
PRTIDXDEA: LD C,A
OR A
PRTIDXDEA1: JR Z,PRTIDXDEA3 ; FOUND TARGET SO EXIT
PRTIDXDEA2: LD A,(DE) ; LOOP UNIT
INC DE ; WE REACH
OR A ; END OF STRING
JR NZ,PRTIDXDEA2
DEC C ; AT STRING END. SO GO
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
PRTIDXDEA3: CALL PRTSTR ; DISPLAY THE STRING
RET
;
#INCLUDE "printing.inc"
;
TXT_CH .DB "CHANNELS: ",0
TXT_TSTCH .DB "CHANNEL: ",0
TXT_BAD_N .DB " BAD NOTE",0
TXT_BAD_P .DB " PLAY ERROR",0
TXT_NOTE .DB " NOTE: ",0
TXT_DEV .DB "DEVICE: ",0
TXT_NAME .DB "SN76489 ",0
.DB "AY-3-8910 ",0
.DB "I/O PORT ",0
.DB "YM2612 ",0
MODE .DB 0 ; scales mode or volume mode
DEVICE .DB 0
NOTE .DW 128
VOLUME .DB 0
CHANNEL .DB 0
OLDSTACK .DW 0 ; original stack pointer
.DS 40H ; space for stack
STACK ; top of stack
;
.END

View File

@@ -22,6 +22,8 @@ pushd kbdtest && call Build || exit /b & popd
pushd ps2info && call Build || exit /b & popd
pushd 2piotst && call Build || exit /b & popd
pushd piomon && call Build || exit /b & popd
pushd banktest && call Build || exit /b & popd
pushd portswp && call Build || exit /b & popd
goto :eof

View File

@@ -19,3 +19,5 @@ pushd kbdtest && call Clean || exit /b 1 & popd
pushd ps2info && call Clean || exit /b 1 & popd
pushd 2piotst && call Clean || exit /b 1 & popd
pushd piomon && call Clean || exit /b 1 & popd
pushd banktest && call Clean || exit /b 1 & popd
pushd portswp && call Clean || exit /b 1 & popd

View File

@@ -1,5 +1,5 @@
OBJECTS =
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portswp
DEST = ../../../Binary/Apps/Test
TOOLS =../../../Tools

View File

@@ -0,0 +1,11 @@
@echo off
setlocal
set TOOLS=../../../../Tools
set PATH=%TOOLS%\tasm32;%PATH%
set TASMTABS=%TOOLS%\tasm32
tasm -t80 -g3 -fFF banktest.asm banktest.com banktest.lst || exit /b
copy /Y banktest.com ..\..\..\..\Binary\Apps\Test\ || exit /b

View File

@@ -0,0 +1,6 @@
@echo off
setlocal
if exist *.com del *.com
if exist *.lst del *.lst
if exist *.bin del *.bin

View File

@@ -0,0 +1,7 @@
OBJECTS = banktest.com
DEST = ../../../../Binary/Apps/Test
TOOLS =../../../../Tools
USETASM=1
include $(TOOLS)/Makefile.inc

View File

@@ -0,0 +1,564 @@
;===============================================================================
; BANKTEST - Test RomWBW bank management API
;
;===============================================================================
;
; Author: Wayne Warthen (wwarthen@gmail.com)
;_______________________________________________________________________________
;
; Usage:
; BANKTEST
;
; Operation:
; Steps through a series of banking API tests
;_______________________________________________________________________________
;
; Change Log:
; 2023-01-22 [WBW] Initial release
;_______________________________________________________________________________
;
; ToDo:
;_______________________________________________________________________________
;
;===============================================================================
; Definitions
;===============================================================================
;
runloc .equ $C000 ; Running location (upper memory required)
stksiz .equ $40 ; Working stack size
;
rmj .equ 3 ; intended HBIOS version - major
rmn .equ 1 ; intended HBIOS version - minor
;
restart .equ $0000 ; CP/M restart vector
;
#include "../../../HBIOS/hbios.inc"
;
;===============================================================================
; Code Section
;===============================================================================
;
.org $100
;
; relocate worker code to upper memory
ld hl,begin ; start of working code image
ld de,runloc ; running location
ld bc,size ; size of working code image
ldir ; copy to upper RAM
jp runloc ; and go
;
; Start of working code
;
begin .equ $ ; image loaded here
;
.org runloc ; now generate running location adresses
;
; setup stack (save old value)
ld (stksav),sp ; save stack
ld sp,stack ; set new stack
;
; initialization
call init ; initialize
jr nz,exit ; abort if init fails
;
; process
call process ; do main processing
jr nz,exit ; abort on error
;
exit: ; clean up and return to command processor
call crlf ; formatting
ld sp,(stksav) ; restore stack
;jp restart ; return to CP/M via restart
ret ; return to CP/M w/o restart
;
; Initialization
;
init:
call crlf2 ; formatting
ld de,msgban ; point to version message part 1
call prtstr ; print it
;
call idbio ; identify active BIOS
cp 1 ; check for HBIOS
jp nz,errbio ; handle BIOS error
;
ld a,rmj << 4 | rmn ; expected HBIOS ver
cp d ; compare with result above
jp nz,errbio ; handle BIOS error
;
initx
; initialization complete
xor a ; signal success
ret ; return
;
; Process
;
process:
;
; Start by testing a bank switch and dumping some memory
; from the new bank.
;
di
;
; Get and display current RAM bank
ld b,BF_SYSGETBNK ; HBIOS GetBank function
rst 08 ; do it via RST vector, C=bank id
ld a,c ; put bank id in A
push af ; save bank id returned
call crlf2
ld de,msgcur ; load message
call prtstr ; print it
pop af ; restore bank id
call prthex ; print the bank id
;
; Switch to first RAM bank
ld b,BF_SYSSETBNK ; HBIOS SetBank function
ld c,$80 ; first RAM bank
rst 08 ; do it via RST vector
ld a,c ; original bank id to accum
ld (orgbnk),a ; save it
;
; NOTE: Once the page zero of the default bank is swapped out, we
; cannot use RST 08 for HBIOS function calls because the vector is
; no longer in context. Instead, we rely on the alternate call
; address entry point.
;
; Do an HBIOS function call while bank switched
call crlf2
ld de,msg80 ; message to print
call prtstr ; do it
;
; Dump chunk of memory from bank
call crlf
ld de,0 ; from 0x0000
call dump_buffer
;
; Switch back to original bank
ld b,BF_SYSSETBNK ; HBIOS SetBank function
ld a,(orgbnk) ; get original bank back
ld c,a ; to C for function call
call HB_INVOKE ; do it via call
;
ei
;
; Now poke a small procedure into an alternate bank and do an
; inter-bank call to execute it.
;
; Copy test procedure to a foreign bank
ld b,BF_SYSSETCPY ; HBIOS SysSetCopy function
ld a,(orgbnk) ; our current bank is source
ld e,a ; put in D
ld d,xproc_bnk ; target bank is 0x80
ld hl,xproc_len ; length to copy
rst 08 ; do it
;
ld b,BF_SYSBNKCPY ; HBIOS SysBnkCopy function
ld de,xproc_loc ; destination address
ld hl,xproc ; source address
rst 08 ; do it
;
; Do an inter-bank call to the test procedure
di ; interrupts off
ld a,xproc_bnk ; target bank
ld ix,xproc_loc ; target address
call HB_BNKCALL ; do it and pray
ei ; interrupts back on
;
call crlf2
ld de,msgdone ; message to print
call prtstr ; do it
;
ret ; all done
;
; Test procedure to be copied into an alternate bank. Code should
; be entirely relocatable.
;
xproc_bnk .equ $80 ; alternate bank for test proc
xproc_loc .equ $1000 ; run location for test proc
;
xproc:
call crlf2
ld de,msgxcal
call prtstr
ret
;
xproc_end .equ $
xproc_len .equ xproc_end - xproc
;
; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0
;
idbio:
;
; Check for UNA (UBIOS)
ld a,($FFFD) ; fixed location of UNA API vector
cp $C3 ; jp instruction?
jr nz,idbio1 ; if not, not UNA
ld hl,($FFFE) ; get jp address
ld a,(hl) ; get byte at target address
cp $FD ; first byte of UNA push ix instruction
jr nz,idbio1 ; if not, not UNA
inc hl ; point to next byte
ld a,(hl) ; get next byte
cp $E5 ; second byte of UNA push ix instruction
jr nz,idbio1 ; if not, not UNA, check others
;
ld bc,$04FA ; UNA: get BIOS date and version
rst 08 ; DE := ver, HL := date
;
ld a,2 ; UNA BIOS id = 2
ret ; and done
;
idbio1:
; Check for RomWBW (HBIOS)
ld hl,(HB_IDENT) ; HL := HBIOS ident location
ld a,'W' ; First byte of ident
cp (hl) ; Compare
jr nz,idbio2 ; Not HBIOS
inc hl ; Next byte of ident
ld a,~'W' ; Second byte of ident
cp (hl) ; Compare
jr nz,idbio2 ; Not HBIOS
;
ld b,BF_SYSVER ; HBIOS: VER function
ld c,0 ; required reserved value
rst 08 ; DE := version, L := platform id
;
ld a,1 ; HBIOS BIOS id = 1
ret ; and done
;
idbio2:
; No idea what this is
xor a ; Setup return value of 0
ret ; and done
;
; Print character in A without destroying any registers
;
prtchr:
push bc ; save registers
push de
push hl
ld e,a ; character to print in E
ld b,BF_CIOOUT ; HBIOS function to output a character
ld c,CIO_CONSOLE ; write to current console unit
call HB_INVOKE ; invoke HBIOS via call
pop hl ; restore registers
pop de
pop bc
ret
;
prtdot:
;
; shortcut to print a dot preserving all regs
push af ; save af
ld a,'.' ; load dot char
call prtchr ; print it
pop af ; restore af
ret ; done
;
prtspace:
;
; shortcut to print a space preserving all regs
push af ; save af
ld a,' ' ; load dot char
call prtchr ; print it
pop af ; restore af
ret ; done
;
prtcr:
;
; shortcut to print a dot preserving all regs
push af ; save af
ld a,13 ; load CR value
call prtchr ; print it
pop af ; restore af
ret ; done
;
; Print a zero terminated string at (DE) without destroying any registers
;
prtstr:
push de
;
prtstr1:
ld a,(de) ; get next char
or a
jr z,prtstr2
call prtchr
inc de
jr prtstr1
;
prtstr2:
pop de ; restore registers
ret
;
; Print a block of memory nicely formatted
; de=buffer address
;
dump_buffer:
call crlf
push de
pop hl
inc d
inc d
db_blkrd:
push bc
push hl
pop bc
call prthexword ; print start location
pop bc
call prtspace ;
ld c,16 ; set for 16 locs
push hl ; save starting hl
db_nxtone:
ld a,(hl) ; get byte
call prthex ; print it
call prtspace ;
db_updh:
inc hl ; point next
dec c ; dec. loc count
jr nz,db_nxtone ; if line not done
; now print 'decoded' data to right of dump
db_pcrlf:
call prtspace ; space it
ld c,16 ; set for 16 chars
pop hl ; get back start
db_pcrlf0:
ld a,(hl) ; get byte
and 060h ; see if a 'dot'
ld a,(hl) ; o.k. to get
jr nz,db_pdot ;
db_dot:
ld a,2eh ; load a dot
db_pdot:
call prtchr ; print it
inc hl ;
ld a,d ;
cp h ;
jr nz,db_updh1 ;
ld a,e ;
cp l ;
jp z,db_end ;
db_updh1:
; if block not dumped, do next character or line
dec c ; dec. char count
jr nz,db_pcrlf0 ; do next
db_contd:
call crlf ;
jp db_blkrd ;
db_end:
ret
;
; Print the value in A in hex without destroying any registers
;
prthex:
push af ; save AF
push de ; save DE
call hexascii ; convert value in A to hex chars in DE
ld a,d ; get the high order hex char
call prtchr ; print it
ld a,e ; get the low order hex char
call prtchr ; print it
pop de ; restore DE
pop af ; restore AF
ret ; done
;
; print the hex word value in bc
;
prthexword:
push af
ld a,b
call prthex
ld a,c
call prthex
pop af
ret
;
; print the hex dword value in de:hl
;
prthex32:
push bc
push de
pop bc
call prthexword
push hl
pop bc
call prthexword
pop bc
ret
;
; Convert binary value in A to ascii hex characters in DE
;
hexascii:
ld d,a ; save A in D
call hexconv ; convert low nibble of A to hex
ld e,a ; save it in E
ld a,d ; get original value back
rlca ; rotate high order nibble to low bits
rlca
rlca
rlca
call hexconv ; convert nibble
ld d,a ; save it in D
ret ; done
;
; Convert low nibble of A to ascii hex
;
hexconv:
and $0F ; low nibble only
add a,$90
daa
adc a,$40
daa
ret
;
; Print value of A or HL in decimal with leading zero suppression
; Use prtdecb for A or prtdecw for HL
;
prtdecb:
push hl
ld h,0
ld l,a
call prtdecw ; print it
pop hl
ret
;
prtdecw:
push af
push bc
push de
push hl
call prtdec0
pop hl
pop de
pop bc
pop af
ret
;
prtdec0:
ld e,'0'
ld bc,-10000
call prtdec1
ld bc,-1000
call prtdec1
ld bc,-100
call prtdec1
ld c,-10
call prtdec1
ld e,0
ld c,-1
prtdec1:
ld a,'0' - 1
prtdec2:
inc a
add hl,bc
jr c,prtdec2
sbc hl,bc
cp e
ret z
ld e,0
call prtchr
ret
;
; Start a new line
;
crlf2:
call crlf ; two of them
crlf:
push af ; preserve AF
ld a,13 ; <CR>
call prtchr ; print it
ld a,10 ; <LF>
call prtchr ; print it
pop af ; restore AF
ret
;
; Get the next non-blank character from (HL).
;
nonblank:
ld a,(hl) ; load next character
or a ; string ends with a null
ret z ; if null, return pointing to null
cp ' ' ; check for blank
ret nz ; return if not blank
inc hl ; if blank, increment character pointer
jr nonblank ; and loop
;
; Convert character in A to uppercase
;
ucase:
cp 'a' ; if below 'a'
ret c ; ... do nothing and return
cp 'z' + 1 ; if above 'z'
ret nc ; ... do nothing and return
res 5,a ; clear bit 5 to make lower case -> upper case
ret ; and return
;
; Add the value in A to HL (HL := HL + A)
;
addhl:
add a,l ; A := A + L
ld l,a ; Put result back in L
ret nc ; if no carry, we are done
inc h ; if carry, increment H
ret ; and return
;
; Jump indirect to address in HL
;
jphl:
jp (hl)
;
; Errors
;
erruse: ; command usage error (syntax)
ld de,msguse
jr err
;
errprm: ; command parameter error (syntax)
ld de,msgprm
jr err
;
errbio: ; invalid BIOS or version
ld de,msgbio
jr err
;
err: ; print error string and return error signal
call crlf2 ; print newline
;
err1: ; without the leading crlf
call prtstr ; print error string
;
err2: ; without the string
; call crlf ; print newline
or $FF ; signal error
ret ; done
;
;===============================================================================
; Storage Section
;===============================================================================
;
orgbnk .db 0 ; original bank id at startup
;
stksav .dw 0 ; stack pointer saved at start
.fill stksiz,0 ; stack
stack .equ $ ; stack top
;
; Messages
;
msgban .db "BANKTEST v1.0, 22-Jan-2023",13,10
.db "Copyright (C) 2023, Wayne Warthen, GNU GPL v3",0
msguse .db "Usage: BANKTEST",13,10
msgprm .db "Parameter error (BANKTEST /? for usage)",0
msgbio .db "Incompatible BIOS or version, "
.db "HBIOS v", '0' + rmj, ".", '0' + rmn, " required",0
msgcur .db "Initial Bank ID = 0x",0
msg80 .db "Hello from bank 0x80!",0
msgxcal .db "Inter-bank procedure call test...",0
msgdone .db "End of bank test",0
;
;
;
size .equ $ - runloc
;
.end

View File

@@ -0,0 +1,11 @@
@echo off
setlocal
set TOOLS=../../../../Tools
set PATH=%TOOLS%\tasm32;%PATH%
set TASMTABS=%TOOLS%\tasm32
tasm -t180 -g3 -fFF portswp.asm portswp.com portswp.lst || exit /b
copy /Y portswp.com ..\..\..\..\Binary\Apps\Test\ || exit /b

View File

@@ -0,0 +1,6 @@
@echo off
setlocal
if exist *.com del *.com
if exist *.lst del *.lst
if exist *.bin del *.bin

View File

@@ -0,0 +1,9 @@
OBJECTS = portswp.com
DEST = ../../../../Binary/Apps/Test
TOOLS =../../../../Tools
USETASM=1
include $(TOOLS)/Makefile.inc
TASM=$(BINDIR)/uz80as -t hd64180

View File

@@ -0,0 +1,609 @@
;===============================================================================
; PORTSWP - Sweep Ports
;
;===============================================================================
;
; Author: Wayne Warthen (wwarthen@gmail.com)
;_______________________________________________________________________________
;
; Usage:
; PORTSWP
;
; Operation:
; Reads all ports (multiple ways) and displays values read
;_______________________________________________________________________________
;
; Change Log:
; 2023-02-14 [WBW] Initial release
;_______________________________________________________________________________
;
; ToDo:
;_______________________________________________________________________________
;
;===============================================================================
; Definitions
;===============================================================================
;
runloc .equ $C000 ; Running location (upper memory required)
stksiz .equ $40 ; Working stack size
;
rmj .equ 3 ; intended HBIOS version - major
rmn .equ 1 ; intended HBIOS version - minor
;
restart .equ $0000 ; CP/M restart vector
;
#include "../../../HBIOS/hbios.inc"
;
;===============================================================================
; Code Section
;===============================================================================
;
.org $100
;
; relocate worker code to upper memory
ld hl,begin ; start of working code image
ld de,runloc ; running location
ld bc,size ; size of working code image
ldir ; copy to upper RAM
jp runloc ; and go
;
; Start of working code
;
begin .equ $ ; image loaded here
;
.org runloc ; now generate running location adresses
;
; setup stack (save old value)
ld (stksav),sp ; save stack
ld sp,stack ; set new stack
;
; initialization
call init ; initialize
jr nz,exit ; abort if init fails
;
; process
call process ; do main processing
jr nz,exit ; abort on error
;
exit: ; clean up and return to command processor
call crlf ; formatting
ld sp,(stksav) ; restore stack
;jp restart ; return to CP/M via restart
ret ; return to CP/M w/o restart
;
; Initialization
;
init:
call crlf2 ; formatting
ld de,msgban ; point to version message part 1
call prtstr ; print it
;
call idbio ; identify active BIOS
cp 1 ; check for HBIOS
jp nz,errbio ; handle BIOS error
;
ld a,rmj << 4 | rmn ; expected HBIOS ver
cp d ; compare with result above
jp nz,errbio ; handle BIOS error
;
initx
; initialization complete
xor a ; signal success
ret ; return
;
; Process
;
process:
call crlf
ld a,($FFE0) ; get current hbios bank id
ld (orgbnk),a ; and save it
ld a,0 ; start with port 0
ld (curport),a ; save it for use below
; Test for z180 using mlt
ld de,$0506 ; 5 x 6
mlt de ; de = 30 if z180
ld a,e ; result to A
cp 30 ; check if multiply happened
jr nz,prtcpu ; if invalid, then Z80
or $FF ; flag value for Z180
ld (is180),a ; save it
;
prtcpu:
ld de,msgcpu
call prtstr
ld a,(is180)
or a
ld de,msgz80
jr z,prtcpu1
ld de,msgz180
prtcpu1:
call prtstr
call crlf
;
loop:
call crlf
ld a,(curport)
call prthex
ld a,':'
call prtchr
;
di ; interrupts off
;
ld hl,vallist ; init value list pointer
call portread ; read the port
call portread ; do it again
;
; restore possibly corrupted bank registers
ld a,(orgbnk) ; get proper bank id
call $FFF3 ; restore it
;
ei ; interrupts safe now
;
ld hl,vallist ; re-init value list pointer
ld b,4 ; print 4 values
prtloop:
ld a,' '
call prtchr
ld a,(hl)
call prthex
inc hl
djnz prtloop
;
; update port and loop as needed
ld a,(curport) ; get current port
inc a ; move to next
ld (curport),a ; save it
jr z,done ; done on wraparound
jr loop ; loop until done
;
done:
;
call crlf2
ld de,msgdone ; message to print
call prtstr ; do it
ret ; all done
;
;
;
portread:
ld a,(is180)
or a
jr nz,portread_z180
;
portread_z80: ; use traditional "IN"
; read port using IN <portnum>
ld a,(curport) ; get current port
ld (port),a ; modify IN instruction
nop ; defeat Z280 pipeline
nop
in a,($FF) ; read the port
port .equ $-1
ld (hl),a ; save it
inc hl ; bump value list pointer
;
; read port using IN (C)
ld a,(curport) ; get current port
ld b,0 ; in case 16 bits decoded
ld c,a ; move to reg C
in a,(c) ; read the port
ld (hl),a ; save it
inc hl ; bump value list pointer
ret
;
portread_z180: ; use "IN0"
; read port using IN <portnum>
ld a,(curport) ; get current port
ld (port1),a ; modify IN instruction
in0 a,($FF) ; read the port
port1 .equ $-1
ld (hl),a ; save it
inc hl ; bump value list pointer
;
; read port using IN (C)
ld a,(curport) ; get current port
ld b,0 ; in case 16 bits decoded
ld c,a ; move to reg C
in a,(c) ; read the port
ld (hl),a ; save it
inc hl ; bump value list pointer
ret
;
; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0
;
idbio:
;
; Check for UNA (UBIOS)
ld a,($FFFD) ; fixed location of UNA API vector
cp $C3 ; jp instruction?
jr nz,idbio1 ; if not, not UNA
ld hl,($FFFE) ; get jp address
ld a,(hl) ; get byte at target address
cp $FD ; first byte of UNA push ix instruction
jr nz,idbio1 ; if not, not UNA
inc hl ; point to next byte
ld a,(hl) ; get next byte
cp $E5 ; second byte of UNA push ix instruction
jr nz,idbio1 ; if not, not UNA, check others
;
ld bc,$04FA ; UNA: get BIOS date and version
rst 08 ; DE := ver, HL := date
;
ld a,2 ; UNA BIOS id = 2
ret ; and done
;
idbio1:
; Check for RomWBW (HBIOS)
ld hl,(HB_IDENT) ; HL := HBIOS ident location
ld a,'W' ; First byte of ident
cp (hl) ; Compare
jr nz,idbio2 ; Not HBIOS
inc hl ; Next byte of ident
ld a,~'W' ; Second byte of ident
cp (hl) ; Compare
jr nz,idbio2 ; Not HBIOS
;
ld b,BF_SYSVER ; HBIOS: VER function
ld c,0 ; required reserved value
rst 08 ; DE := version, L := platform id
;
ld a,1 ; HBIOS BIOS id = 1
ret ; and done
;
idbio2:
; No idea what this is
xor a ; Setup return value of 0
ret ; and done
;
; Print character in A without destroying any registers
;
prtchr:
push bc ; save registers
push de
push hl
ld e,a ; character to print in E
ld b,BF_CIOOUT ; HBIOS function to output a character
ld c,CIO_CONSOLE ; write to current console unit
call HB_INVOKE ; invoke HBIOS via call
pop hl ; restore registers
pop de
pop bc
ret
;
prtdot:
;
; shortcut to print a dot preserving all regs
push af ; save af
ld a,'.' ; load dot char
call prtchr ; print it
pop af ; restore af
ret ; done
;
prtspace:
;
; shortcut to print a space preserving all regs
push af ; save af
ld a,' ' ; load dot char
call prtchr ; print it
pop af ; restore af
ret ; done
;
prtcr:
;
; shortcut to print a dot preserving all regs
push af ; save af
ld a,13 ; load CR value
call prtchr ; print it
pop af ; restore af
ret ; done
;
; Print a zero terminated string at (DE) without destroying any registers
;
prtstr:
push de
;
prtstr1:
ld a,(de) ; get next char
or a
jr z,prtstr2
call prtchr
inc de
jr prtstr1
;
prtstr2:
pop de ; restore registers
ret
;
; Print a block of memory nicely formatted
; de=buffer address
;
dump_buffer:
call crlf
push de
pop hl
inc d
inc d
db_blkrd:
push bc
push hl
pop bc
call prthexword ; print start location
pop bc
call prtspace ;
ld c,16 ; set for 16 locs
push hl ; save starting hl
db_nxtone:
ld a,(hl) ; get byte
call prthex ; print it
call prtspace ;
db_updh:
inc hl ; point next
dec c ; dec. loc count
jr nz,db_nxtone ; if line not done
; now print 'decoded' data to right of dump
db_pcrlf:
call prtspace ; space it
ld c,16 ; set for 16 chars
pop hl ; get back start
db_pcrlf0:
ld a,(hl) ; get byte
and 060h ; see if a 'dot'
ld a,(hl) ; o.k. to get
jr nz,db_pdot ;
db_dot:
ld a,2eh ; load a dot
db_pdot:
call prtchr ; print it
inc hl ;
ld a,d ;
cp h ;
jr nz,db_updh1 ;
ld a,e ;
cp l ;
jp z,db_end ;
db_updh1:
; if block not dumped, do next character or line
dec c ; dec. char count
jr nz,db_pcrlf0 ; do next
db_contd:
call crlf ;
jp db_blkrd ;
db_end:
ret
;
; Print the value in A in hex without destroying any registers
;
prthex:
push af ; save AF
push de ; save DE
call hexascii ; convert value in A to hex chars in DE
ld a,d ; get the high order hex char
call prtchr ; print it
ld a,e ; get the low order hex char
call prtchr ; print it
pop de ; restore DE
pop af ; restore AF
ret ; done
;
; print the hex word value in bc
;
prthexword:
push af
ld a,b
call prthex
ld a,c
call prthex
pop af
ret
;
; print the hex dword value in de:hl
;
prthex32:
push bc
push de
pop bc
call prthexword
push hl
pop bc
call prthexword
pop bc
ret
;
; Convert binary value in A to ascii hex characters in DE
;
hexascii:
ld d,a ; save A in D
call hexconv ; convert low nibble of A to hex
ld e,a ; save it in E
ld a,d ; get original value back
rlca ; rotate high order nibble to low bits
rlca
rlca
rlca
call hexconv ; convert nibble
ld d,a ; save it in D
ret ; done
;
; Convert low nibble of A to ascii hex
;
hexconv:
and $0F ; low nibble only
add a,$90
daa
adc a,$40
daa
ret
;
; Print value of A or HL in decimal with leading zero suppression
; Use prtdecb for A or prtdecw for HL
;
prtdecb:
push hl
ld h,0
ld l,a
call prtdecw ; print it
pop hl
ret
;
prtdecw:
push af
push bc
push de
push hl
call prtdec0
pop hl
pop de
pop bc
pop af
ret
;
prtdec0:
ld e,'0'
ld bc,-10000
call prtdec1
ld bc,-1000
call prtdec1
ld bc,-100
call prtdec1
ld c,-10
call prtdec1
ld e,0
ld c,-1
prtdec1:
ld a,'0' - 1
prtdec2:
inc a
add hl,bc
jr c,prtdec2
sbc hl,bc
cp e
ret z
ld e,0
call prtchr
ret
;
; Start a new line
;
crlf2:
call crlf ; two of them
crlf:
push af ; preserve AF
ld a,13 ; <CR>
call prtchr ; print it
ld a,10 ; <LF>
call prtchr ; print it
pop af ; restore AF
ret
;
; Get the next non-blank character from (HL).
;
nonblank:
ld a,(hl) ; load next character
or a ; string ends with a null
ret z ; if null, return pointing to null
cp ' ' ; check for blank
ret nz ; return if not blank
inc hl ; if blank, increment character pointer
jr nonblank ; and loop
;
; Convert character in A to uppercase
;
ucase:
cp 'a' ; if below 'a'
ret c ; ... do nothing and return
cp 'z' + 1 ; if above 'z'
ret nc ; ... do nothing and return
res 5,a ; clear bit 5 to make lower case -> upper case
ret ; and return
;
; Add the value in A to HL (HL := HL + A)
;
addhl:
add a,l ; A := A + L
ld l,a ; Put result back in L
ret nc ; if no carry, we are done
inc h ; if carry, increment H
ret ; and return
;
; Jump indirect to address in HL
;
jphl:
jp (hl)
;
; Short delay functions. No clock speed compensation, so they
; will run longer on slower systems. The number indicates the
; number of call/ret invocations. a single call/ret is
; 27 t-states on a z80, 25 t-states on a z180
;
; ; Z80 Z180
; ; ---- ----
dly64: call dly32 ; 1728 1600
dly32: call dly16 ; 864 800
dly16: call dly8 ; 432 400
dly8: call dly4 ; 216 200
dly4: call dly2 ; 108 100
dly2: call dly1 ; 54 50
dly1: ret ; 27 25
;
; Errors
;
erruse: ; command usage error (syntax)
ld de,msguse
jr err
;
errprm: ; command parameter error (syntax)
ld de,msgprm
jr err
;
errbio: ; invalid BIOS or version
ld de,msgbio
jr err
;
err: ; print error string and return error signal
call crlf2 ; print newline
;
err1: ; without the leading crlf
call prtstr ; print error string
;
err2: ; without the string
; call crlf ; print newline
or $FF ; signal error
ret ; done
;
;===============================================================================
; Storage Section
;===============================================================================
;
is180 .db 0 ; non-zero for z180
orgbnk .db 0 ; original bank id
curport .db 0 ; current port being processed
vallist .fill 8,0 ; port values read
;
stksav .dw 0 ; stack pointer saved at start
.fill stksiz,0 ; stack
stack .equ $ ; stack top
;
; Messages
;
msgban .db "PORTSWP v1.0, 14-Feb-2023",13,10
.db "Copyright (C) 2023, Wayne Warthen, GNU GPL v3",0
msguse .db "Usage: PORTSWP",13,10
msgprm .db "Parameter error (PORTSWP /? for usage)",0
msgbio .db "Incompatible BIOS or version, "
.db "HBIOS v", '0' + rmj, ".", '0' + rmn, " required",0
str_sep .db ": ",0
;
msgcpu .db "CPU is ",0
msgz80 .db "Z80",0
msgz180 .db "Z180",0
msgdone .db "End of Port Sweep",0
;
;
;
size .equ $ - runloc
;
.end

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

@@ -34,6 +34,7 @@ PRTCR:
; Print a zero terminated string at (DE) without destroying any registers
;
PRTSTR:
PUSH AF
PUSH DE
;
PRTSTR1:
@@ -46,6 +47,7 @@ PRTSTR1:
;
PRTSTR2:
POP DE ; restore registers
POP AF
RET
;
; Print the value in A in hex without destroying any registers

View File

@@ -6,6 +6,7 @@ set PATH=%TOOLS%\tasm32;%PATH%
set TASMTABS=%TOOLS%\tasm32
tasm -t180 -g3 -fFF -dWBW vgmplay.asm vgmplay.com vgmplay.lst || exit /b
tasm -t180 -g3 -fFF -dWBW ymfmdemo.asm ymfmdemo.com ymfmdemo.lst || exit /b
copy /Y vgmplay.com ..\..\..\Binary\Apps\ || exit /b
copy /Y Tunes\*.* ..\..\..\Binary\Apps\Tunes\ || exit /b
copy /Y Tunes\*.vgm ..\..\..\Binary\Apps\Tunes\ || exit /b

View File

@@ -10,6 +10,9 @@ DEPS := vgmplay.asm $(shell find . -name '*.inc')
vgmplay.com: $(DEPS)
$(TASM) -dWBW vgmplay.asm vgmplay.com vgmplay.lst
ym2612.com:
$(TASM) -dWBW ymfmdemo.asm ymfmdemo.com ymfmdemo.lst
all::
mkdir -p $(DEST)/Tunes
cp Tunes/* $(DEST)/Tunes
cp Tunes/*.vgm $(DEST)/Tunes

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -34,6 +34,7 @@ PRTCR:
; Print a zero terminated string at (DE) without destroying any registers
;
PRTSTR:
PUSH AF
PUSH DE
;
PRTSTR1:
@@ -46,6 +47,7 @@ PRTSTR1:
;
PRTSTR2:
POP DE ; restore registers
POP AF
RET
;
; Print the value in A in hex without destroying any registers

File diff suppressed because it is too large Load Diff

View File

@@ -5,39 +5,70 @@ Simple player for VGM (Video Game Music) files.
Usage:
VGMPLAY MUSIC.VGM
VGMPLAY MUSIC[.VGM]
Default Ports:
Press a key to exit the program.
D8H-D0H - First AY-3-8910 (RSEL/RDAT)
A0H-A1H - Second AY-3-8910
FFH - First SN76489
FBH - Second SN76489
C6H-C7H - YM2612/YM3484
Supported devices
=================
If your system uses different ports you need to recompile the source.
SN76489
AY-3-89810
YM2612/YM3484
YM2151
Note: The player should be compatible with VGM files up to version 1.51
but there are very few controls (if any) in the code, be sure to have
a good VGM file that doesn't contain much extra data. These files can be
very big, the player is limited to the available TPA space which is
typically around 54-55k, bigger files will overwrite the CP/M code and/or
wrap around the 64k limit.
Supported platforms
===================
The played is designed to run on a standard RC2014 with a 7.3728 MHz clock,
if your system uses a different clock you need to adjust the frame delay accordingly.
VGM Player is currently being developed on the ROMWBW platform using the Retrobrew computers
EBC-SBC-V2 (Z80), ECB-SCG (AY-3-8910) and ECB-VGM (YM2612 and 2xSN76489) board.
It can be configured to run with other hardware such as RC2014, P8X180 and nhyodyne MBC.
VGM files can be very big and are limited in size by the available TPA space, which is typically 52k.
Processor speed affects the playback speed. Under ROMWBW the player will detect the cpu speed configuration
and adjust timing loops. For other platforms, default speeds are configured but may need to be changed
to suit your hardware. Counter/Timer hardware may be supported in future.
Example Music Files
===================
LEMMIN01.VGM - SN76489 - Lemmings: Title Screen
PENGUI03.VGM - AY-3-8910 - Penguin Adventure: Forest Path
PITFAL02.VGM - 2xSN76489 - Pitfall II: Scene 1
TIGER02.VGM - 2xAY-3-8910 - Tiger Hely: First Mission
WONDER01.VGM - 2xSN76489 - Wonder Boy in Monster Land
FILTHY01.VGM - YM3484 - Columns : Filthy
ITSGAMOV.VGM - YM3484+SN76489 - Puyo Puyo Tsuu : It's Game Over!
ENDING.VGM - AY-3-8910 * Puyo Puyo: Ending (Unused) : 24K
QIX.VGM - AY-3-8910 - Super Qix: Main BGM 2 : 28K
AGGRESS.VGM - AY-3-8910 - Rastan Saga: Aggressive World : 32K
PENGUI03.VGM - AY-3-8910 - Penguin Adventure: Forest Path : 44K
TIGER02.VGM - 2xAY-3-8910 - Tiger Hely: First Mission : 28K
BGM.VGM - 2xAY-3-8910 * SHM: BGM : 8K
LEMMIN01.VGM - SN76489 - Lemmings: Title Screen : 44K
TEDDY.VGM - 2xSN76489 - TeddyBoy Blues: Title ~ Main Theme : 52K
PITFAL02.VGM - 2xSN76489 - Pitfall II: Scene 1 : 16K
WONDER01.VGM - 2xSN76489 * Wonder Boy in Monster Land: Monster Land : 40K
DESCENT.VGM - SN76489+YM2612 - Flashback: The Quest for Identity: Descent into the Tunnels : 40K
SHIRAKAW.VGM - SN76489+YM2612 * Jantei Monogatari: St. Shirakawa University : 32K
ANNA.VGM - SN76489+YM2612 - Jantei Monogatari: Anna : 32K
FIELDMAP.VGM - SN76489+YM2612 - Taikou Risshiden: Field Map: Summer : 8K
ITSGAMOV.VGM - SN76489+YM2612 - Puyo Puyo Tsuu: It's Game Over! : 16K
STARTDEM.VGN - 2xSN76489+AY-3-8910 * Exed Exes / Savage Bees: Start Demo ~Main BGM : 32K
INCHINA.VGM - YM2612 * Double Dragon 3: The Rosetta Stone: In China : 44K
Original Source by J.B Langston, Marco Maccaferri
ROMWBW + YM2612/YM3484 version by Phil Summers
* Included in disk images
VGM sources
===========
https://www.smspower.org/forums/15359-VGMPacksGameGearMegaCollection
https://vgmrips.net/packs/chip/ym2612
https://project2612.org/
VGM Tools
=========
https://vgmrips.net/wiki/VGMTool
https://github.com/vgmrips/vgmtools
References
==========
http://www.primrosebank.net/computers/mtx/tools/PD/vgmplayer.zip - Paul Daniels MTX SN76489 interrupt version with embedded VGM tune.
https://github.com/jblang/SN76489/blob/master/examples/vgmplayer.asm - J.B. Langston RC2014 polled version with file loading.
https://groups.google.com/g/rc2014-z80/c/9nHnETJzGKU - Marco Maccaferri P8X180 & AY-3-8910 support
https://github.com/electrified/rc2014-ym2151/tree/main/software/vgmplay - Ed Brindly RC2014 & YM2151 support
ROMWBW version by Phil Summers. VGM Player is still in development. The ECB-VGM is also still under development.

View File

@@ -0,0 +1,779 @@
;
;------------------------------------------------------------------------------
; Simple Z80 FM Music Driver.
; Adapted from https://github.com/michaelcmartin/bumbershoot/genesis/fm_mus.asm
;------------------------------------------------------------------------------
;
; A song in this system is a series of records, where each record
; begins with a byte for the number of frames this record lasts,
; followed by a byte for the number of register writes to the first
; block of FM registers, followed by that many pairs of (register,
; value) bytes.
; When a zero byte is reached for a record length, the playback
; loops back to the "segno" label.
;
; Song data is created from a Music Macro Language score (mml)
; by the makebach.py script
;
;------------------------------------------------------------------------------
; Device and system specific definitions
;------------------------------------------------------------------------------
;
custom .equ 0 ; System configurations
sbcecb .equ 1
MBC .equ 2
;
plt_romwbw .equ 1 ; Build for ROMWBW?
plt_type .equ sbcecb ; Select build configuration
plt_cpuspd .equ 6 ; Non ROMWBW cpu speed default
debug .equ 0
ctc_delay .equ 0
;
.org 100H
;
BDOS .equ 0005h
;
YMSEL .equ $c0
YMDAT .equ $c1
ctcbase .equ $cc
;
;------------------------------------------------------------------------------
; Initialize sound chip and ctc etc
;------------------------------------------------------------------------------
;
init:
#IF (debug)
call ym_init
#ENDIF
#IF (ctc_delay)
call ctc_config
#ENDIF
;
;------------------------------------------------------------------------------
; Main loop
;------------------------------------------------------------------------------
;
mloop: LD C, 6 ; check for keypress
LD E, 0FFH
CALL 5
OR A
JP NZ,0
;
call ploop ; PLAY
jp z,0
;
ld hl,$1000 ; DELAY
dlp: dec hl
ld a,h
or l
jr nz,dlp
;
jr mloop
;
;------------------------------------------------------------------------------
; Play loop
;------------------------------------------------------------------------------
;
ploop: ld hl, wait ; HAVE WE REACHED THE
dec (hl) ; LAST FRAME
ret nz
ld hl, (ptr) ; POINT TO START OF SONG
ld a, (hl) ; GET NO OF FRAMES
and a ;
ret z
; jr nz, nolp
;
; ld a,'@'
; call PRTCHR
;
; ld hl, segno ; POINT TO CURRENT SEGMENT
; ld a, (hl) ; GET FRAME COUNT
nolp: ld (wait), a ; AND SAVE IT
inc hl
call PRTHEX
call PRTDOT
ld b, (hl) ; GET NUMBER OF REGISTER PAIRS TO WRITE
inc hl ; POINT TO REGISTER
ld a,b
call PRTHEX
call PRTDOT
rlp: ld a, (hl) ; SELECT REGISTER
out (YMSEL),a
call PRTHEX
inc hl ; GET VALUE
ld a, (hl)
call PRTHEX
inc hl
out (YMDAT),a ; WRITE THE VALUE
djnz rlp ; DO ALL THE PAIRS IN THIS SEGMENT
ld (ptr), hl ; SAVE WHERE WE ARE AT
call CRLF
ret
;
;------------------------------------------------------------------------------
; CTC initialization
;------------------------------------------------------------------------------
;
ctc_config:
; ld b,4 ; 4 channels
; ld c,ctcbase ; first channel port
;ctc_lp: ld a,ctc_defcfg ; ctc default config
; out (c),a ; ctc command
; inc c ; next channel port
; djnz ctc_lp
; ld hl,hb_timint ; TIMER INT HANDLER ADR
; ld (ivt(ctctivt)),hl
;
; ld a,int_ctc0a * 2
out (ctcbase),a ; SETUP CTC BASE INT VECTOR
;
ctcch0 .equ ctcbase
ctcch1 .equ ctcbase+1
ctcch2 .equ ctcbase+2
ctcch3 .equ ctcbase+3
ctccfg0 .equ %01010011
ctccfg1 .equ %01010111
ctccfg2 .equ %01010111
ctccfg3 .equ %01010111
ctcdiv0 .equ 1 ; 3.579545MHz input 60Hz timer tick
ctcdiv1 .equ 8
ctcdiv2 .equ 0
ctcdiv3 .equ 29
;ctcdiv0 .equ 1 ; 3.579545MHz input 50Hz timer tick
;ctcdiv1 .equ 8
;ctcdiv2 .equ 0
;ctcdiv3 .equ 34
;ctcdiv0 .equ 1 ; 3.579545MHz input 44100z timer tick
;ctcdiv1 .equ 1
;ctcdiv2 .equ 1
;ctcdiv3 .equ 81
ld a,ctccfg0 & $7f ; ; Channel 0
out (ctcch0),a
;
ld a,ctccfg1 & $7f ; Channel 1
out (ctcch1),a ;
ld a,ctcdiv1 & $ff ;
out (ctcch1),a ;
;
ld a,ctccfg2 & $7f ; Channel 2
out (ctcch2),a ;
ld a,ctcdiv2 & $ff ;
out (ctcch2),a ;
;
ld a,ctccfg3 & $7f ; Channel 3
out (ctcch3),a ;
ld a,ctcdiv3 & $ff ;
out (ctcch3),a ;
;
ret
;
ptr: .dw song
wait: .db $01
;
;------------------------------------------------------------------------------
; YM2612 initialization - not required if included in song data
;------------------------------------------------------------------------------
;
#DEFINE setreg(reg,val) \
#DEFCONT \ ld a,reg
#DEFCONT \ out (YMSEL),a
#DEFCONT \ ld a,val
#DEFCONT \ out (YMDAT),a
#DEFCONT \ ld b,0
#DEFCONT \ in a,(YMSEL)
#DEFCONT \ rlca
#DEFCONT \ jp nc,$+5
#DEFCONT \ djnz $-6
;
ym_init:
setreg($22,$00) ; lfo off
setreg($27,$00) ; note off ch 0
setreg($28,$01) ; note off ch 1
setreg($28,$02) ; note off ch 2
setreg($28,$03) ; note off ch 3
setreg($28,$04) ; note off ch 4
setreg($28,$05) ; note off ch 5
setreg($28,$06) ; note off ch 6
setreg($28,$01) ; note off ch 1
setreg($2b,$00) ; dac off
setreg($30,$71)
setreg($34,$0d)
setreg($38,$33)
setreg($3c,$01) ; dt1/mul
setreg($40,$23)
setreg($44,$2d)
setreg($48,$26)
setreg($4c,$00) ; total level
setreg($50,$5f)
setreg($54,$99)
setreg($58,$5f)
setreg($5c,$94) ; rs/ar
setreg($60,$05)
setreg($64,$05)
setreg($68,$05)
setreg($6c,$07) ; am/dir
setreg($70,$02)
setreg($74,$02)
setreg($78,$02)
setreg($7c,$02) ; d2r
setreg($80,$11)
setreg($84,$11)
setreg($88,$11)
setreg($8c,$a6) ; d1l/rr
setreg($90,$00)
setreg($94,$00)
setreg($98,$00)
setreg($9c,$00) ; proprietary
setreg($b0,$32) ; feedback/algorithm
setreg($b4,$c0) ; both speakers on
setreg($28,$00) ; key off
setreg($a4,$22)
setreg($a0,$69) ; set frequency
;
ret
;
;------------------------------------------------------------------------------
; Example breakdown of first section, which is initialization
;------------------------------------------------------------------------------
;
; BYTE NUMBER OF FRAMES
; BYTE NUMBER OF REGISTER WRITES
; BYTE REGISTER
; BYTE VALUE
;
; CNT $0D 13 frames
; $42 66 register writes (132 BYTES)
; 2 $30,$71 dac
; 4 $34,$0D dac
; 6 $38,$33 dac
; 8 $3C,$01 dt1/mul
; 10 $40,$23 dt1/mul
; 12 $44,$2D dt1/mul
; 14 $48,$26 dt1/mul
; 16 $4C,$00 total level
; 18 $50,$5F total level
; 20 $54,$99 total level
; 22 $58,$5F total level
; 24 $5C,$94 rs/ar
; 26 $60,$05 rs/ar
; 28 $64,$05 rs/ar
; 30 $68,$05 rs/ar
; 32 $6C,$07 am/dir
; 34 $70,$02 am/dir
; 36 $74,$02 am/dir
; 38 $78,$02 am/dir
; 40 $7c,$02 d2r
; 42 $80,$11 d2r
; 44 $84,$11 d2r
; 46 $88,$11 d2r
; 48 $8C,$A6
; 50 $90,$00
; 52 $94,$00
; 54 $98,$00
; 56 $9C,$00
; 58 $B0,$32
; 60 $B4,$C0
; 62 $31,$71
; 64 $35,$0D
; 66 $39,$33
; 68 $3D,$01
; 70 $41,$23
; 72 $45,$2D
; 74 $49,$26
; 76 $4D,$00
; 78 $51,$5F
; 80 $55,$99
; 82 $59,$5F
; 84 $5D,$94
; 86 $61,$05
; 88 $65,$05
; 90 $69,$05
; 92 $6D,$07
; 94 $71,$02
; 96 $75,$02
; 98 $79,$02
; 100 $7D,$02
; 102 $81,$11
; 104 $85,$11
; 106 $89,$11
; 108 $8D,$A6
; 110 $91,$00
; 112 $95,$00
; 114 $99,$00
; 116 $9D,$00
; 118 $B0,$32
; 120 $B4,$C0
; 122 $A4,$17
; 124 $A0,$89
; 126 $28,$F0
; 128 $A5,$0F
; 130 $A1,$89
; 132 $28,$F1
;
;------------------------------------------------------------------------------
; Song data created from Music Macro Language (mml) by makebach
;------------------------------------------------------------------------------
;
song:
segno: .db $0D,$42,$30,$71,$34,$0D,$38,$33,$3C,$01,$40,$23,$44,$2D,$48,$26
.db $4C,$00,$50,$5F,$54,$99,$58,$5F,$5C,$94,$60,$05,$64,$05,$68,$05
.db $6C,$07,$70,$02,$74,$02,$78,$02,$7C,$02,$80,$11,$84,$11,$88,$11
.db $8C,$A6,$90,$00,$94,$00,$98,$00,$9C,$00,$B0,$32,$B4,$C0,$31,$71
.db $35,$0D,$39,$33,$3D,$01,$41,$23,$45,$2D,$49,$26,$4D,$00,$51,$5F
.db $55,$99,$59,$5F,$5D,$94,$61,$05,$65,$05,$69,$05,$6D,$07,$71,$02
.db $75,$02,$79,$02,$7D,$02,$81,$11,$85,$11,$89,$11,$8D,$A6,$91,$00
.db $95,$00,$99,$00,$9D,$00,$B0,$32,$B4,$C0,$A4,$17,$A0,$89,$28,$F0
.db $A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF
.db $28,$F0,$02,$01,$28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01
.db $28,$00,$07,$03,$A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01
.db $02,$01,$28,$00,$0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D
.db $A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1
.db $02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0
.db $A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF
.db $28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89
.db $28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C
.db $A0,$BF,$28,$F0,$02,$01,$28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0
.db $02,$01,$28,$00,$07,$03,$A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01
.db $02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07
.db $A1,$89,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1
.db $02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0
.db $A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89
.db $28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89
.db $28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C
.db $A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$1A,$06,$A4,$1E
.db $A0,$56,$28,$F0,$A5,$0D,$A1,$08,$28,$F1,$04,$02,$28,$00,$28,$01
.db $1A,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$04,$02
.db $28,$00,$28,$01,$0D,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0D,$A1,$08
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$89,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0C
.db $A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06,$A4,$1D,$A0,$A5
.db $28,$F0,$A5,$0F,$A1,$89,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06
.db $A4,$1D,$A0,$A5,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1F,$A0,$89,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $1A,$06,$A4,$1D,$A0,$08,$28,$F0,$A5,$0C,$A1,$3B,$28,$F1,$04,$02
.db $28,$00,$28,$01,$0D,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0F,$A1,$1D
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1D,$A0,$08,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F
.db $A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1D,$A0,$08,$28,$F0
.db $02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0
.db $A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0E,$A1,$56
.db $28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0F,$A1,$1D,$28,$F1,$02,$01
.db $28,$01,$0D,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0D,$03
.db $A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$01,$03,$03,$A5,$0F,$A1,$1D
.db $28,$F1,$0A,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89
.db $28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C
.db $A0,$BF,$28,$F0,$02,$01,$28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0
.db $02,$01,$28,$00,$07,$03,$A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01
.db $02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07
.db $A1,$89,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1
.db $02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0
.db $A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89
.db $28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89
.db $28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C
.db $A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17
.db $A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01,$28,$00,$0D,$03
.db $A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$00,$0D,$03,$A4,$1D,$A0,$A5
.db $28,$F0,$02,$01,$28,$00,$07,$03,$A4,$1F,$A0,$89,$28,$F0,$06,$01
.db $28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D
.db $A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0
.db $02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1F,$A0,$89,$28,$F0
.db $A5,$07,$A1,$89,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF
.db $28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89
.db $28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0F
.db $A1,$89,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17
.db $A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03
.db $A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$1A,$06
.db $A4,$1E,$A0,$56,$28,$F0,$A5,$0D,$A1,$08,$28,$F1,$04,$02,$28,$00
.db $28,$01,$0D,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0E,$A1,$56,$28,$F1
.db $02,$01,$28,$00,$0B,$03,$A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01
.db $02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C,$A0,$3B,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0C
.db $A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1D,$A0,$08
.db $28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C
.db $A0,$BF,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C
.db $A0,$3B,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$17,$A0,$89,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$08,$06
.db $A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$08,$28,$F1,$02,$01,$28,$00
.db $08,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$00,$06,$03,$A4,$1D
.db $A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$15
.db $A0,$A5,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$04,$02,$28,$00,$28,$01
.db $1A,$06,$A4,$17,$A0,$1D,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$04,$02
.db $28,$00,$28,$01,$1A,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$04,$01,$28,$01,$1A,$03,$A5,$0D,$A1,$A5,$28,$F1,$04,$01
.db $28,$01,$12,$03,$A5,$07,$A1,$89,$28,$F1,$08,$01,$28,$00,$04,$01
.db $28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0F,$A1,$89,$28,$F1
.db $02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$00
.db $0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00,$07,$03,$A4,$1F
.db $A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C
.db $A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01,$28,$01
.db $0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01
.db $0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$07,$A1,$89
.db $28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01
.db $28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00,$07,$03
.db $A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$1A,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0D
.db $A1,$08,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06,$A4,$1E,$A0,$56
.db $28,$F0,$A5,$0F,$A1,$89,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06
.db $A4,$1E,$A0,$56,$28,$F0,$A5,$0D,$A1,$08,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1F,$A0,$89,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $1A,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02
.db $28,$00,$28,$01,$1A,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1D,$A0,$A5,$28,$F0
.db $A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$89
.db $28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1D,$A0,$08
.db $28,$F0,$A5,$0C,$A1,$3B,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06
.db $A4,$1D,$A0,$A5,$28,$F0,$A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0D,$03,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$01
.db $0D,$03,$A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0D
.db $A1,$A5,$28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0E,$A1,$56,$28,$F1
.db $02,$01,$28,$01,$03,$03,$A5,$0F,$A1,$1D,$28,$F1,$0A,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01
.db $28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00,$07,$03
.db $A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$07
.db $A1,$89,$28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0
.db $02,$01,$28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00
.db $07,$03,$A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D
.db $A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1
.db $02,$01,$28,$00,$02,$01,$28,$01,$1A,$06,$A4,$1E,$A0,$56,$28,$F0
.db $A5,$0D,$A1,$08,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1D
.db $A0,$A5,$28,$F0,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1C,$A0,$3B,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $1A,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02
.db $28,$00,$28,$01,$0D,$06,$A4,$1D,$A0,$08,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0F
.db $A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$17,$A0,$89,$28,$F0
.db $02,$01,$28,$01,$02,$01,$28,$00,$08,$06,$A4,$1C,$A0,$3B,$28,$F0
.db $A5,$0D,$A1,$08,$28,$F1,$02,$01,$28,$00,$08,$03,$A4,$1C,$A0,$BF
.db $28,$F0,$02,$01,$28,$00,$06,$03,$A4,$1D,$A0,$08,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$1A,$06,$A4,$15,$A0,$A5,$28,$F0,$A5,$0D
.db $A1,$A5,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06,$A4,$17,$A0,$1D
.db $28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06
.db $A4,$17,$A0,$89,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$04,$01,$28,$01
.db $1A,$03,$A5,$0D,$A1,$A5,$28,$F1,$04,$01,$28,$01,$12,$03,$A5,$07
.db $A1,$89,$28,$F1,$08,$01,$28,$00,$04,$01,$28,$01,$0D,$06,$A4,$17
.db $A0,$89,$28,$F0,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1C,$A0,$3B,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$BF,$28,$F0,$A5,$0D,$A1,$FB,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1C,$A0,$3B,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$17,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$1A,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0E,$A1,$56,$28,$F1
.db $04,$02,$28,$00,$28,$01,$1A,$06,$A4,$16,$A0,$56,$28,$F0,$A5,$0C
.db $A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06,$A4,$16,$A0,$56
.db $28,$F0,$A5,$06,$A1,$56,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06
.db $A4,$1F,$A0,$89,$28,$F0,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1F,$A0,$89,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1F,$A0,$1D,$28,$F0,$A5,$14,$A1,$BF,$28,$F1
.db $02,$01,$28,$00,$0B,$03,$A4,$1E,$A0,$56,$28,$F0,$02,$01,$28,$01
.db $02,$01,$28,$00,$0D,$06,$A4,$1F,$A0,$1D,$28,$F0,$A5,$0C,$A1,$BF
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$FB,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F
.db $A1,$1D,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$14,$A1,$BF,$28,$F1
.db $02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$1C,$A0,$BF,$28,$F0
.db $A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$FB
.db $28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$1F,$A0,$89
.db $28,$F0,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F
.db $A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1E
.db $A0,$56,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1F,$A0,$89,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1F,$A0,$1D,$28,$F0,$A5,$14,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1E,$A0,$56,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $1A,$06,$A4,$1F,$A0,$1D,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02
.db $28,$00,$28,$01,$1A,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$14,$A1,$3B
.db $28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06,$A4,$1E,$A0,$56,$28,$F0
.db $A5,$0F,$A1,$89,$28,$F1,$04,$02,$28,$00,$28,$01,$08,$06,$A4,$1F
.db $A0,$1D,$28,$F0,$A5,$14,$A1,$3B,$28,$F1,$02,$01,$28,$00,$08,$03
.db $A4,$1F,$A0,$89,$28,$F0,$02,$01,$28,$00,$06,$03,$A4,$24,$A0,$3B
.db $28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1C,$A0,$BF
.db $28,$F0,$A5,$14,$A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06
.db $A4,$1D,$A0,$FB,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02,$28,$00
.db $28,$01,$1A,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0E,$A1,$56,$28,$F1
.db $04,$01,$28,$00,$0D,$03,$A4,$1D,$A0,$FB,$28,$F0,$02,$01,$28,$00
.db $0D,$03,$A4,$1E,$A0,$56,$28,$F0,$02,$01,$28,$00,$12,$03,$A4,$1F
.db $A0,$1D,$28,$F0,$08,$01,$28,$01,$04,$01,$28,$00,$1A,$06,$A4,$1F
.db $A0,$89,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01
.db $0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0F,$A1,$89,$28,$F1
.db $02,$01,$28,$00,$0B,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$01
.db $02,$01,$28,$00,$1A,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0D,$A1,$08
.db $28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1E,$A0,$56,$28,$F0
.db $A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1D,$A0,$A5
.db $28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1D,$A0,$08
.db $28,$F0,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C
.db $A0,$BF,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1D
.db $A0,$08,$28,$F0,$A5,$0C,$A1,$3B,$28,$F1,$04,$02,$28,$00,$28,$01
.db $0D,$06,$A4,$1D,$A0,$08,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$08,$28,$F1
.db $02,$01,$28,$00,$0B,$03,$A4,$17,$A0,$89,$28,$F0,$02,$01,$28,$01
.db $02,$01,$28,$00,$1A,$06,$A4,$17,$A0,$1D,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$16,$A0,$56,$28,$F0
.db $A5,$0C,$A1,$3B,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$17,$A0,$1D
.db $28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$15,$A0,$A5
.db $28,$F0,$A5,$05,$A1,$A5,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06
.db $A4,$1C,$A0,$3B,$28,$F0,$A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$01
.db $0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01
.db $0D,$06,$A4,$15,$A0,$A5,$28,$F0,$A5,$0F,$A1,$1D,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$15,$A0,$A5,$28,$F0,$A5,$0F,$A1,$1D,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$15,$A0,$A5,$28,$F0,$A5,$0F
.db $A1,$89,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$15,$A0,$A5,$28,$F0
.db $A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$1A,$06,$A4,$1D,$A0,$08
.db $28,$F0,$A5,$0F,$A1,$1D,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06
.db $A4,$1D,$A0,$A5,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0D,$03,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$01
.db $0D,$03,$A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0D
.db $A1,$A5,$28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0E,$A1,$56,$28,$F1
.db $02,$01,$28,$01,$03,$03,$A5,$0F,$A1,$1D,$28,$F1,$0A,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01
.db $28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00,$07,$03
.db $A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$07
.db $A1,$89,$28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0
.db $02,$01,$28,$00,$0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00
.db $07,$03,$A4,$1F,$A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D
.db $A1,$A5,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1
.db $02,$01,$28,$00,$02,$01,$28,$01,$1A,$06,$A4,$1E,$A0,$56,$28,$F0
.db $A5,$0D,$A1,$08,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1D
.db $A0,$A5,$28,$F0,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1C,$A0,$3B,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $1A,$06,$A4,$1D,$A0,$A5,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02
.db $28,$00,$28,$01,$0D,$06,$A4,$1D,$A0,$08,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0F
.db $A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$17,$A0,$89,$28,$F0
.db $02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0
.db $A5,$0D,$A1,$08,$28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF
.db $28,$F0,$02,$01,$28,$00,$16,$03,$A4,$15,$A0,$A5,$28,$F0,$04,$01
.db $28,$01,$04,$01,$28,$00,$1A,$06,$A4,$17,$A0,$1D,$28,$F0,$A5,$0D
.db $A1,$A5,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06,$A4,$17,$A0,$89
.db $28,$F0,$A5,$0F,$A1,$89,$28,$F1,$04,$01,$28,$01,$1A,$03,$A5,$0D
.db $A1,$A5,$28,$F1,$04,$01,$28,$01,$12,$03,$A5,$07,$A1,$89,$28,$F1
.db $08,$01,$28,$00,$04,$01,$28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0
.db $A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C,$A0,$3B
.db $28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$BF
.db $28,$F0,$A5,$0D,$A1,$FB,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C
.db $A0,$3B,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$17
.db $A0,$89,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$17,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06
.db $A4,$17,$A0,$89,$28,$F0,$A5,$0E,$A1,$56,$28,$F1,$04,$02,$28,$00
.db $28,$01,$1A,$06,$A4,$16,$A0,$56,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1
.db $04,$02,$28,$00,$28,$01,$1A,$06,$A4,$16,$A0,$56,$28,$F0,$A5,$06
.db $A1,$56,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1F,$A0,$89
.db $28,$F0,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F
.db $A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1E
.db $A0,$56,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1F,$A0,$89,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1F,$A0,$1D,$28,$F0,$A5,$14,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1E,$A0,$56,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $0D,$06,$A4,$1F,$A0,$1D,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0D,$A1,$FB,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$1D,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$14,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$1D
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$FB,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$0D,$06,$A4,$1F,$A0,$89,$28,$F0,$A5,$0E
.db $A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$1D,$28,$F0
.db $02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1E,$A0,$56,$28,$F0
.db $A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F,$A0,$89
.db $28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1F,$A0,$1D
.db $28,$F0,$A5,$14,$A1,$BF,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1E
.db $A0,$56,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1F
.db $A0,$1D,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01
.db $1A,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$14,$A1,$3B,$28,$F1,$04,$02
.db $28,$00,$28,$01,$1A,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$04,$02,$28,$00,$28,$01,$08,$06,$A4,$1F,$A0,$1D,$28,$F0
.db $A5,$14,$A1,$3B,$28,$F1,$02,$01,$28,$00,$08,$03,$A4,$1F,$A0,$89
.db $28,$F0,$02,$01,$28,$00,$06,$03,$A4,$24,$A0,$3B,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$14
.db $A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06,$A4,$1D,$A0,$FB
.db $28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01,$1A,$06
.db $A4,$1E,$A0,$56,$28,$F0,$A5,$0E,$A1,$56,$28,$F1,$04,$01,$28,$00
.db $0D,$03,$A4,$1D,$A0,$FB,$28,$F0,$02,$01,$28,$00,$0D,$03,$A4,$1E
.db $A0,$56,$28,$F0,$02,$01,$28,$00,$12,$03,$A4,$1F,$A0,$1D,$28,$F0
.db $08,$01,$28,$01,$04,$01,$28,$00,$1A,$06,$A4,$1F,$A0,$89,$28,$F0
.db $A5,$0C,$A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1F
.db $A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1E,$A0,$56,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $1A,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0D,$A1,$08,$28,$F1,$04,$02
.db $28,$00,$28,$01,$0D,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0D,$A1,$A5
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1D,$A0,$08,$28,$F0,$A5,$0E
.db $A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C,$A0,$BF,$28,$F0
.db $02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1D,$A0,$08,$28,$F0
.db $A5,$0C,$A1,$3B,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1D
.db $A0,$08,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$08,$28,$F1,$02,$01,$28,$00
.db $0B,$03,$A4,$17,$A0,$89,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00
.db $1A,$06,$A4,$17,$A0,$1D,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$04,$02
.db $28,$00,$28,$01,$0D,$06,$A4,$16,$A0,$56,$28,$F0,$A5,$0C,$A1,$3B
.db $28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$17,$A0,$1D,$28,$F0,$02,$01
.db $28,$01,$02,$01,$28,$00,$1A,$06,$A4,$15,$A0,$A5,$28,$F0,$A5,$05
.db $A1,$A5,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1C,$A0,$3B
.db $28,$F0,$A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D
.db $A1,$A5,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06,$A4,$15
.db $A0,$A5,$28,$F0,$A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$01,$0B,$03
.db $A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06
.db $A4,$15,$A0,$A5,$28,$F0,$A5,$0F,$A1,$1D,$28,$F1,$02,$01,$28,$01
.db $0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01
.db $0D,$06,$A4,$1C,$A0,$BF,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$15,$A0,$A5,$28,$F0,$A5,$0F,$A1,$89,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$0D,$06,$A4,$15,$A0,$A5,$28,$F0,$A5,$0F,$A1,$89
.db $28,$F1,$02,$01,$28,$01,$0B,$03,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$00,$02,$01,$28,$01,$1A,$06,$A4,$1D,$A0,$08,$28,$F0,$A5,$0F
.db $A1,$1D,$28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1D,$A0,$A5
.db $28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1D
.db $A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C
.db $A0,$BF,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1D,$A0,$08,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01
.db $0D,$03,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0F
.db $A1,$1D,$28,$F1,$02,$01,$28,$01,$0D,$03,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0D,$03,$A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$01
.db $03,$03,$A5,$0F,$A1,$1D,$28,$F1,$0A,$01,$28,$00,$02,$01,$28,$01
.db $0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01
.db $28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$00,$0D,$03
.db $A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00,$07,$03,$A4,$1F,$A0,$89
.db $28,$F0,$06,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B
.db $28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1F
.db $A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1F
.db $A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01,$28,$01,$0B,$03
.db $A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01,$0D,$06
.db $A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$01
.db $0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01
.db $0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1
.db $02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$00
.db $0D,$03,$A4,$1D,$A0,$A5,$28,$F0,$02,$01,$28,$00,$07,$03,$A4,$1F
.db $A0,$89,$28,$F0,$06,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C
.db $A0,$3B,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01,$28,$00,$0B,$03
.db $A4,$1F,$A0,$1D,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06
.db $A4,$1F,$A0,$89,$28,$F0,$A5,$07,$A1,$89,$28,$F1,$02,$01,$28,$01
.db $0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00,$02,$01,$28,$01
.db $0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$01,$0B,$03,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$02,$01
.db $28,$01,$0D,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $02,$01,$28,$01,$0B,$03,$A5,$0C,$A1,$BF,$28,$F1,$02,$01,$28,$00
.db $02,$01,$28,$01,$1A,$06,$A4,$1E,$A0,$56,$28,$F0,$A5,$0D,$A1,$08
.db $28,$F1,$04,$02,$28,$00,$28,$01,$0D,$06,$A4,$1D,$A0,$A5,$28,$F0
.db $A5,$0E,$A1,$56,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1D,$A0,$08
.db $28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$BF
.db $28,$F0,$A5,$0F,$A1,$89,$28,$F1,$02,$01,$28,$00,$0B,$03,$A4,$1C
.db $A0,$3B,$28,$F0,$02,$01,$28,$01,$02,$01,$28,$00,$1A,$06,$A4,$1D
.db $A0,$A5,$28,$F0,$A5,$0C,$A1,$BF,$28,$F1,$04,$02,$28,$00,$28,$01
.db $0D,$06,$A4,$1D,$A0,$08,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1,$02,$01
.db $28,$00,$0B,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01,$28,$01,$02,$01
.db $28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0F,$A1,$89,$28,$F1
.db $02,$01,$28,$00,$0B,$03,$A4,$17,$A0,$89,$28,$F0,$02,$01,$28,$01
.db $02,$01,$28,$00,$0D,$06,$A4,$1C,$A0,$3B,$28,$F0,$A5,$0D,$A1,$08
.db $28,$F1,$02,$01,$28,$00,$0D,$03,$A4,$1C,$A0,$BF,$28,$F0,$02,$01
.db $28,$00,$16,$03,$A4,$15,$A0,$A5,$28,$F0,$04,$01,$28,$01,$04,$01
.db $28,$00,$1A,$06,$A4,$17,$A0,$1D,$28,$F0,$A5,$0D,$A1,$A5,$28,$F1
.db $04,$02,$28,$00,$28,$01,$1A,$06,$A4,$17,$A0,$89,$28,$F0,$A5,$0F
.db $A1,$89,$28,$F1,$04,$01,$28,$01,$1A,$03,$A5,$0D,$A1,$A5,$28,$F1
.db $04,$01,$28,$01,$12,$03,$A5,$07,$A1,$89,$28,$F1,$08,$01,$28,$00
.db $04,$01,$28,$01,$00
;; 7045 bytes in song
#include "printing.inc"
.end

View File

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

View File

@@ -432,7 +432,7 @@ end
# New format: 1024 dir entries, 16,384 sectors / slice
# Pure filesystem image, no MBR prefix
diskdef wbw_hd1024
diskdef wbw_hd1k
seclen 512
tracks 1024
sectrk 16
@@ -443,11 +443,11 @@ diskdef wbw_hd1024
os 2.2
end
# First 4 slices of wbw_hd1024
# First 4 slices of wbw_hd1k
# Assumes standard 1MB prefix
# Offset of any slice (in tracks) = 128 + (1024 * <slice_num)
diskdef wbw_hd1024_0
diskdef wbw_hd1k_0
seclen 512
tracks 1024
sectrk 16
@@ -459,7 +459,7 @@ diskdef wbw_hd1024_0
os 2.2
end
diskdef wbw_hd1024_1
diskdef wbw_hd1k_1
seclen 512
tracks 1024
sectrk 16
@@ -471,7 +471,7 @@ diskdef wbw_hd1024_1
os 2.2
end
diskdef wbw_hd1024_2
diskdef wbw_hd1k_2
seclen 512
tracks 1024
sectrk 16
@@ -483,7 +483,7 @@ diskdef wbw_hd1024_2
os 2.2
end
diskdef wbw_hd1024_3
diskdef wbw_hd1k_3
seclen 512
tracks 1024
sectrk 16

View File

@@ -8,7 +8,7 @@ call BuildShared || exit /b
call BuildImages || exit /b
call BuildROM %* || exit /b
call BuildZRC || exit /b
call BuildZZR || exit /b
call BuildZZRC || exit /b
if "%1" == "dist" (
call Clean || exit /b

View File

@@ -9,6 +9,7 @@ pushd ZCPR-DJ && call Build || exit /b & popd
pushd ZSDOS && call Build || exit /b & popd
pushd CPM3 && call Build || exit /b & popd
pushd ZPM3 && call Build || exit /b & popd
pushd pSys && call Build || exit /b & popd
pushd Apps && call Build || exit /b & popd
pushd Forth && call Build || exit /b & popd
pushd TastyBasic && call Build || exit /b & popd

View File

@@ -1,4 +0,0 @@
@echo off
setlocal
pushd ZZR && call Build || exit /b & popd

4
Source/BuildZZRC.cmd Normal file
View File

@@ -0,0 +1,4 @@
@echo off
setlocal
pushd ZZRC && call Build || exit /b & popd

BIN
Source/CPM22/License.pdf Normal file

Binary file not shown.

View File

@@ -167,11 +167,56 @@ STR_ERR .DB " Read Error!",0
;
.FILL PT_LOC - $,0 ; FILL TO START OF PARTITION TABLE
;
; RESERVE SPACE FOR STANDARD IBM-PC PARTITION TABLE. ALTHOUGH A
; STANDARD IBM-PC PARTITION TABLE. ALTHOUGH A
; PARTITION TABLE IS NOT RELEVANT FOR A FLOPPY DISK, IT DOES NO HARM.
; THE CONTENTS OF THE PARTITION TABLE MUST BE MANAGED BY FDISK80.
; THE CONTENTS OF THE PARTITION TABLE CAN BE MANAGED BY FDISK80.
;
PARTTBL .FILL PT_SIZ,0 ; PARTITION TABLE, FILL WITH ZEROES
; BELOW WE ALLOW FOR 32 SLICES OF ROMWBW CP/M FILESYSTEMS
; FOLLOWED BY A FAT16 PARTITION. THE SLICES FOLLOW THE ORIGINAL
; HD512 ROMWBW FORMAT. IF THE DISK IS USING HD1K, A SEPARATE
; PARTITION TABLE WILL BE IN PLACE AND RENDER THIS PARTITION TABLE
; IRRELEVANT.
;
; THE CYL/SEC FIELDS ENCODE CYLINDER AND SECTOR AS:
; CCCCCCCC:CCSSSSSS
; 76543210:98543210
;
PART0:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW 0 ; CHS START ADDRESS (CYL/SEC)
.DB 0 ; PART TYPE ID
.DB 0 ; CHS LAST ADDRESS (HEAD)
.DW 0 ; CHS LAST ADDRESS (CYL/SEC)
.DW 0,0 ; LBA FIRST (DWORD)
.DW 0,0 ; LBA COUNT (DWORD)
PART1:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW %1111111111000001 ; CHS START ADDRESS (CYL/SEC)
.DB 6 ; PART TYPE ID
.DB 15 ; CHS LAST ADDRESS (HEAD)
.DW %1111111111010000 ; CHS LAST ADDRESS (CYL/SEC)
.DW $4000,$0010 ; LBA FIRST (DWORD)
.DW $0000,$000C ; LBA COUNT (DWORD)
PART2:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW 0 ; CHS START ADDRESS (CYL/SEC)
.DB 0 ; PART TYPE ID
.DB 0 ; CHS LAST ADDRESS (HEAD)
.DW 0 ; CHS LAST ADDRESS (CYL/SEC)
.DW 0,0 ; LBA FIRST (DWORD)
.DW 0,0 ; LBA COUNT (DWORD)
PART3:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW 0 ; CHS START ADDRESS (CYL/SEC)
.DB 0 ; PART TYPE ID
.DB 0 ; CHS LAST ADDRESS (HEAD)
.DW 0 ; CHS LAST ADDRESS (CYL/SEC)
.DW 0,0 ; LBA FIRST (DWORD)
.DW 0,0 ; LBA COUNT (DWORD)
;
; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT SIGNATURE.
;

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

@@ -9,7 +9,7 @@ BNKSWT = Y
COMBAS = 80
LERROR = Y
NUMSEGS = 04
MEMSEG00 = 01,43,00
MEMSEG00 = 01,17,00
MEMSEG01 = 0E,72,02
MEMSEG02 = 01,7F,03
MEMSEG03 = 01,7F,04

View File

@@ -171,11 +171,56 @@ STR_ERR .DB " Read Error!",0
;
.FILL PT_LOC - $,0 ; FILL TO START OF PARTITION TABLE
;
; RESERVE SPACE FOR STANDARD IBM-PC PARTITION TABLE. ALTHOUGH A
; STANDARD IBM-PC PARTITION TABLE. ALTHOUGH A
; PARTITION TABLE IS NOT RELEVANT FOR A FLOPPY DISK, IT DOES NO HARM.
; THE CONTENTS OF THE PARTITION TABLE MUST BE MANAGED BY FDISK80.
; THE CONTENTS OF THE PARTITION TABLE CAN BE MANAGED BY FDISK80.
;
PARTTBL .FILL PT_SIZ,0 ; PARTITION TABLE, FILL WITH ZEROES
; BELOW WE ALLOW FOR 32 SLICES OF ROMWBW CP/M FILESYSTEMS
; FOLLOWED BY A FAT16 PARTITION. THE SLICES FOLLOW THE ORIGINAL
; HD512 ROMWBW FORMAT. IF THE DISK IS USING HD1K, A SEPARATE
; PARTITION TABLE WILL BE IN PLACE AND RENDER THIS PARTITION TABLE
; IRRELEVANT.
;
; THE CYL/SEC FIELDS ENCODE CYLINDER AND SECTOR AS:
; CCCCCCCC:CCSSSSSS
; 76543210:98543210
;
PART0:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW 0 ; CHS START ADDRESS (CYL/SEC)
.DB 0 ; PART TYPE ID
.DB 0 ; CHS LAST ADDRESS (HEAD)
.DW 0 ; CHS LAST ADDRESS (CYL/SEC)
.DW 0,0 ; LBA FIRST (DWORD)
.DW 0,0 ; LBA COUNT (DWORD)
PART1:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW %1111111111000001 ; CHS START ADDRESS (CYL/SEC)
.DB 6 ; PART TYPE ID
.DB 15 ; CHS LAST ADDRESS (HEAD)
.DW %1111111111010000 ; CHS LAST ADDRESS (CYL/SEC)
.DW $4000,$0010 ; LBA FIRST (DWORD)
.DW $0000,$000C ; LBA COUNT (DWORD)
PART2:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW 0 ; CHS START ADDRESS (CYL/SEC)
.DB 0 ; PART TYPE ID
.DB 0 ; CHS LAST ADDRESS (HEAD)
.DW 0 ; CHS LAST ADDRESS (CYL/SEC)
.DW 0,0 ; LBA FIRST (DWORD)
.DW 0,0 ; LBA COUNT (DWORD)
PART3:
.DB 0 ; ACTIVE IF $80
.DB 0 ; CHS START ADDRESS (HEAD)
.DW 0 ; CHS START ADDRESS (CYL/SEC)
.DB 0 ; PART TYPE ID
.DB 0 ; CHS LAST ADDRESS (HEAD)
.DW 0 ; CHS LAST ADDRESS (CYL/SEC)
.DW 0,0 ; LBA FIRST (DWORD)
.DW 0,0 ; LBA COUNT (DWORD)
;
; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT SIGNATURE.
;

View File

@@ -10,6 +10,7 @@ pushd ZSDOS && call Clean.cmd & popd
pushd CBIOS && call Clean.cmd & popd
pushd CPM3 && call Clean.cmd & popd
pushd ZPM3 && call Clean.cmd & popd
pushd pSys && call Clean.cmd & popd
pushd Forth && call Clean.cmd & popd
pushd TastyBasic && call Clean & popd
pushd Fonts && call Clean.cmd & popd
@@ -19,3 +20,5 @@ pushd Images && call Clean & popd
pushd Prop && call Clean & popd
pushd RomDsk && call Clean & popd
pushd Doc && call Clean & popd
pushd ZRC && call Clean & popd
pushd ZZRC && call Clean & popd

View File

@@ -1,5 +1,5 @@
$define{doc_title}{Applications}$
$include{"Common.h"}$
$include{"Book.h"}$
# Summary

File diff suppressed because it is too large Load Diff

65
Source/Doc/Basic.h Normal file
View File

@@ -0,0 +1,65 @@
$define{doc_ver}{Version 3.1 Pre-release}$
$define{doc_product}{RomWBW}$
$define{doc_root}{https://github.com/wwarthen/RomWBW/raw/dev/Doc}$
$ifndef{doc_title}$ $define{doc_title}{Document Title}$ $endif$
$ifndef{doc_author}$ $define{doc_author}{Wayne Warthen}$ $endif$
$define{doc_date}{$date{%d %b %Y}$}$
$ifndef{doc_authmail}$ $define{doc_authmail}{wwarthen@gmail.com}$ $endif$
$define{doc_orgname}{RetroBrew Computers Group}$
$define{doc_orgurl}{www.retrobrewcomputers.org}$
$define{doc_user}{[RomWBW User Guide]($doc_root$/RomWBW User Guide.pdf)}$
$define{doc_sys}{[RomWBW System Guide]($doc_root$/RomWBW System Guide.pdf)}$
$define{doc_apps}{[RomWBW Applications]($doc_root$/RomWBW Applications.pdf)}$
$define{doc_romapps}{[RomWBW ROM Applications]($doc_root$/RomWBW ROM Applications.pdf)}$
$define{doc_catalog}{[RomWBW Disk Catalog]($doc_root$/RomWBW Disk Catalog.pdf)}$
$define{doc_errata}{[RomWBW Errata]($doc_root$/RomWBW Errata.pdf)}$
---
title: $doc_product$ $doc_title$
subtitle: $doc_ver$
author: $doc_author$ ([$doc_authmail$](mailto:$doc_authmail$))
date: $doc_date$
institution: $doc_orgname$
papersize: letter
geometry:
- top=1.5in
- bottom=1.5in
- left=1.5in
- right=1.5in
# - showframe
# - pass
fontsize: 12pt
# linestretch: 1.25
colorlinks: true
# sansfont: helvetic
sansfont: roboto
# sansfont: bera
# sansfont: DejaVuSans
# sansfont: arial
monofont: roboto-mono
# monofont: bera
# monofont: inconsolata
# monofont: DejaVuSansMono
monofontoptions: 'Scale=0.75'
header-includes:
- |
```{=latex}
\renewcommand*{\familydefault}{\sfdefault}
```
---
```{=gfm}
**$doc_product$ $doc_title$** \
$doc_ver$ \
$doc_author$ ([$doc_authmail$](mailto:$doc_authmail$)) \
$doc_date$
```
```{=dokuwiki}
**$doc_product$ $doc_title$**\\
$doc_ver$\\
$doc_author$ <$doc_authmail$>\\
$doc_date$\\
```

View File

@@ -1,38 +1,15 @@
$define{doc_ver}{3.1 Pre-release}$
$define{doc_product}{RomWBW}$
$ifndef{doc_title}$ $define{doc_title}{Document Title}$ $endif$
$ifndef{doc_author}$ $define{doc_author}{Wayne Warthen}$ $endif$
$define{doc_date}{$date{%d %b %Y}$}$
$ifndef{doc_authmail}$ $define{doc_authmail}{wwarthen@gmail.com}$ $endif$
$define{doc_orgname}{RetroBrew Computers Group}$
$define{doc_orgurl}{www.retrobrewcomputers.org}$
$include{"Basic.h"}$
---
# Force pandoc to enable graphics for Logo in title page!
graphics: true
title: $doc_product$ $doc_title$
author: $doc_author$ (mailto:$doc_authmail$)
date: $doc_date$
institution: $doc_orgname$
documentclass: book
classoption:
- oneside
toc: true
toc-depth: 1
toc-depth: 2
numbersections: true
secnumdepth: 1
papersize: letter
geometry:
- top=1.5in
- bottom=1.5in
- left=1.5in
- right=1.5in
# - showframe
# - pass
linestretch: 1.25
colorlinks: true
fontfamily: helvet
fontsize: 12pt
secnumdepth: 2
header-includes:
- \setlength{\headheight}{15pt}
- |
@@ -52,7 +29,7 @@ header-includes:
{\scshape \bfseries \fontsize{48pt}{56pt} \selectfont $doc_product$ \par}
{\bfseries \fontsize{32pt}{36pt} \selectfont $doc_title$ \par}
\vspace{24pt}
{\huge Version $doc_ver$ \\ $doc_date$ \par}
{\huge $doc_ver$ \\ $doc_date$ \par}
\vspace{24pt}
{\large \itshape $doc_orgname$ \\ \href{http://$doc_orgurl$}{$doc_orgurl$} \par}
\vspace{12pt}
@@ -62,7 +39,7 @@ header-includes:
\pagestyle{empty}
```
include-before:
- \renewcommand{\chaptername}{Section}
# - \renewcommand{\chaptername}{Section}
- |
```{=latex}
\pagestyle{fancyplain}
@@ -75,5 +52,5 @@ include-before:
```{=latex}
\clearpage
\pagenumbering{arabic}
\lhead{\fancyplain{}{\nouppercase{\footnotesize \bfseries \leftmark \hfill $doc_product$ $doc_title$}}}
\lhead{\fancyplain{}{\nouppercase{\bfseries \leftmark \hfill $doc_product$ $doc_title$}}}
```

View File

@@ -7,26 +7,26 @@ setlocal
::
set TOOLS=..\..\Tools
set PATH=%TOOLS%\m4;%TOOLS%\gpp;%PATH%
set PATH=%TOOLS%\gpp;%PATH%
if not "%1"=="" (call :GenDoc %1 & goto :eof)
call :GenDoc GettingStarted
:: call :GenDoc UserGuide
call :GenDoc ReadMe
call :GenDoc UserGuide
call :GenDoc SystemGuide
call :GenDoc Applications
:: call :GenDoc Errata
:: call :GenDoc ZSystem
call :GenDoc Architecture
call :GenDoc Catalog
call :GenDoc ROM_Applications
call :GenDoc Catalog
call :GenDoc Errata
if exist GettingStarted.pdf copy GettingStarted.pdf "..\..\Doc\RomWBW Getting Started.pdf" || exit /b
if exist GettingStarted.gfm copy GettingStarted.gfm ..\..\ReadMe.md || exit /b
if exist GettingStarted.txt copy GettingStarted.txt ..\..\ReadMe.txt || exit /b
if exist ReadMe.gfm copy Readme.gfm ..\..\ReadMe.md || exit /b
if exist ReadMe.txt copy ReadMe.txt ..\..\ReadMe.txt || exit /b
if exist UserGuide.pdf copy UserGuide.pdf "..\..\Doc\RomWBW User Guide.pdf" || exit /b
if exist SystemGuide.pdf copy SystemGuide.pdf "..\..\Doc\RomWBW System Guide.pdf" || exit /b
if exist Applications.pdf copy Applications.pdf "..\..\Doc\RomWBW Applications.pdf" || exit /b
if exist Architecture.pdf copy Architecture.pdf "..\..\Doc\RomWBW Architecture.pdf" || exit /b
if exist ROM_Applications.pdf copy ROM_Applications.pdf "..\..\Doc\RomWBW ROM Applications.pdf" || exit /b
if exist Catalog.pdf copy Catalog.pdf "..\..\Doc\RomWBW Disk Catalog.pdf" || exit /b
if exist ROM_Applications.pdf copy ROM_Applications.pdf "..\..\Doc\ROM Applications.pdf" || exit /b
if exist Errata.pdf copy Errata.pdf "..\..\Doc\RomWBW Errata.pdf" || exit /b
echo.
goto :eof
@@ -35,23 +35,23 @@ goto :eof
echo.
echo Processing document %1.md...
echo Processing document %1...
::gpp -o %1.tmp %1.md
::gpp -o %1.tmp -U "\\" "" "{" "}{" "}" "{" "}" "#" "" %1.md
::gpp -o %1.tmp -U "" "" "(" "," ")" "(" ")" "#" "" -M "#" "\n" " " " " "\n" "(" ")" %1.md
gpp -o %1.tmp -U "$" "$" "{" "}{" "}$" "{" "}" "@@@" "" -M "$" "$" "{" "}{" "}$" "{" "}" %1.md
gpp -o %1.tmp -U "$" "$" "{" "}{" "}$" "{" "}" "@@@" "" -M "$" "$" "{" "}{" "}$" "{" "}" %1.md || exit /b
:: pandoc %1.tmp -f markdown -s -o %1.tex --default-image-extension=pdf || exit /b
:: pause
:: rem texify --pdf --clean %1.ltx || exit /b
:: texify --pdf %1.tex || exit /b
:: goto :eof
::pandoc %1.tmp -f markdown -t latex -s -o %1.tex --default-image-extension=pdf || exit /b
::::rem texify --pdf --clean %1.ltx || exit /b
::texify --pdf --clean --engine=luatex --verbose %1.tex || exit /b
::goto :eof
pandoc %1.tmp -f markdown -t pdf -s -o %1.pdf --default-image-extension=pdf || exit /b
pandoc %1.tmp -f markdown -t html -s -o %1.html --default-image-extension=png || exit /b
pandoc %1.tmp -f markdown -t pdf -s -o %1.pdf --default-image-extension=pdf --pdf-engine=lualatex || exit /b
pandoc %1.tmp -f markdown -t html -s -o %1.html --default-image-extension=png --css pandoc.css --embed-resources || exit /b
pandoc %1.tmp -f markdown -t dokuwiki -s -o %1.dw --default-image-extension=png || exit /b
pandoc %1.tmp -f markdown -t gfm -o %1.gfm --default-image-extension=png || exit /b
pandoc %1.tmp -f markdown -t plain -s -o %1.txt --default-image-extension=png || exit /b
pandoc %1.tmp -f markdown -t gfm-yaml_metadata_block -s -o %1.gfm --default-image-extension=png || exit /b
::pandoc %1.tmp -f markdown -t gfm-yaml_metadata_block -s -o %1.txt --markdown-headings=setext --default-image-extension=png || exit /b
pandoc %1.tmp -f markdown -t plain+gutenberg -s -o %1.txt || exit /b
goto :eof

View File

@@ -1,7 +1,7 @@
$define{doc_title}{Disk Catalog}$
$define{doc_author}{Mykl Orders}$
$define{doc_authmail}{}$
$include{"Common.h"}$
$include{"Book.h"}$
# RomWBW Distribution File Catalog

19
Source/Doc/Errata.md Normal file
View File

@@ -0,0 +1,19 @@
$define{doc_title}{Errata}$
$include{"Book.h"}$
# Errata
The following errata apply to $doc_product$ $doc_ver$:
* The use of high density floppy disks requires a CPU speed of 8 MHz or
greater.
* The PropIO support is based on RomWBW specific firmware. Be sure to
program/update your PropIO firmware with the corresponding firmware
image provided in the Binary directory of the RomWBW distribution.
* Reading bytes from the video memory of the VDU board (not Color
VDU) appears to be problematic. This is only an issue when the driver
needs to scroll a portion of the screen which is done by applications
such as WordStar or ZDE. You are likely to see screen corruption in
this case.

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
# and available on commandline for this build to work!!!
# Typically "sudo apt install pandoc, texlive-latex-extra, gpp"
#
OBJECTS = GettingStarted.pdf GettingStarted.gfm GettingStarted.txt Applications.pdf Architecture.pdf Catalog.pdf ROM_Applications.pdf
OBJECTS = ReadMe.gfm ReadMe.txt UserGuide.pdf SystemGuide.pdf Applications.pdf ROM_Applications.pdf Catalog.pdf Errata.pdf
# DEST = ../../Doc
TOOLS = ../../Tools
OTHERS = *.tmp
@@ -13,7 +13,7 @@ include $(TOOLS)/Makefile.inc
all :: deploy
%.tmp : %.md
gpp -o $@ -U "$" "$" "{" "}{" "}$" "{" "}" "@@@" "" -M "$" "$" "{" "}{" "}$" "{" "}" $<
gpp -o $@ -U "$$" "$$" "{" "}{" "}$$" "{" "}" "@@@" "" -M "$$" "$$" "{" "}{" "}$$" "{" "}" $<
%.pdf : %.tmp
pandoc $< -f markdown -t latex -s -o $@ --default-image-extension=pdf
@@ -31,10 +31,11 @@ all :: deploy
pandoc $< -f markdown -t plain -s -o $@ --default-image-extension=pdf
deploy :
cp GettingStarted.pdf "../../Doc/RomWBW Getting Started.pdf"
cp GettingStarted.gfm "../../ReadMe.md"
cp GettingStarted.txt "../../ReadMe.txt"
cp Applications.pdf "../../Doc/RomWBW Applications.pdf"
cp Architecture.pdf "../../Doc/RomWBW Architecture.pdf"
cp Catalog.pdf "../../Doc/RomWBW Disk Catalog.pdf"
cp ROM_Applications.pdf "../../Doc/ROM Applications.pdf"
cp ReadMe.gfm "../../ReadMe.md"
cp ReadMe.txt "../../ReadMe.txt"
cp UserGuide.pdf "../../Doc/RomWBW User Guide.pdf"
cp SystemGuide.pdf "../../Doc/RomWBW System Guide.pdf"
cp Applications.pdf "../../Doc/RomWBW Applications.pdf"
cp ROM_Applications.pdf "../../Doc/RomWBW ROM Applications.pdf"
cp Catalog.pdf "../../Doc/RomWBW Disk Catalog.pdf"
cp Errata.pdf "../../Doc/RomWBW Errata.pdf"

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