Compare commits

...

308 Commits

Author SHA1 Message Date
Wayne Warthen
5f36cf9a12 Fix TUNE Delay Factor Handling 2023-04-03 13:44:52 -07:00
Wayne Warthen
d812066f2e Update Z80 Tests
Update Z80 CPU instruction test suite to v1.2.
2023-03-29 15:46:46 -07:00
Wayne Warthen
7563863be2 DOS/65 Refresh
- Refresh WIP files of DOS/65 from Dan Werner
- Another tweak to SURVEY
- Regen PDF docs
2023-03-27 14:44:54 -07:00
Wayne Warthen
9654d487ba Merge pull request #338 from b1ackmai1er/dev
VGMPLAY documentation and YM2151 support
2023-03-27 14:14:14 -07:00
b1ackmai1er
5b339aef3e Update vgmplay.txt 2023-03-27 23:39:26 +08:00
b1ackmai1er
47a7d81bb9 Update Applications.md
Add basic VGMPLAY information
2023-03-27 23:36:24 +08:00
b1ackmai1er
a92c44e53f ym2151 vgm files 2023-03-26 20:43:47 +08:00
b1ackmai1er
cc9f5dd516 Update vgmplay.asm
YM2151 updates
2023-03-26 19:31:52 +08:00
Wayne Warthen
6e34de0e02 Cosmetic
Minor cosmetic changes in source.
2023-03-25 12:05:57 -07:00
Wayne Warthen
5a6d7f853b Update HEXCOM.COM
Renamed HEXCOM.CPM -> HEXCOM.COM.
2023-03-25 11:57:26 -07:00
b1ackmai1er
a646f49866 Merge pull request #52 from wwarthen/dev
Dev
2023-03-24 17:06:35 +08:00
Wayne Warthen
98a33b8b50 CTC & CPU Speed
- Revamped CTC detection algorithm hoping to handle problem XRBR is having
- Fixed typo in dynamic CPU speed test that caused it to not be properly recorded/reported (credit XRBR)
- Allow use of DEL/RUBOUT keys as backspace in ROM Loader and Debug Monitor
2023-03-23 12:54:57 -07:00
Wayne Warthen
8aebaab3fe Fix SURVEY.COM (again)
- Previous fix to SURVEY.COM port survey broke the memory survey.  Everything should be OK now.
- Regenerated documentation.
2023-03-22 16:15:04 -07:00
Wayne Warthen
798d8c3ea3 Merge pull request #337 from wwarthen/master
Sync
2023-03-22 15:58:32 -07:00
Wayne Warthen
bbaf2b0714 Merge pull request #336 from elevendroids/master
Fix default ZETA V2 SBC configuration
2023-03-22 15:57:43 -07:00
Michal Potrzebicz
74a8283bba Fix default ZETA V2 SBC configuration
- Set the default CPUOSC to 8MHz (default value in the project's
  documentation), updated the User Guide
- Set the FDD controller to ZETA2 - regression introduced in bd664c3
2023-03-22 22:37:22 +00:00
Wayne Warthen
e869e55252 Prep v3.2.1 Development Branch 2023-03-21 14:48:28 -07:00
Wayne Warthen
e8a76817dc Merge pull request #335 from wwarthen/master
Catch-up
2023-03-18 20:09:02 -07:00
Wayne Warthen
e839c77844 Merge pull request #332 from wwarthen/dev
Fix Doc URL Path
2023-03-18 19:37:13 -07:00
Wayne Warthen
ada7254b84 Fix Doc URL Path 2023-03-18 19:20:48 -07:00
Wayne Warthen
cd96ea7e26 Merge pull request #331 from wwarthen/dev
Merge Final v3.2
2023-03-18 19:11:38 -07:00
Wayne Warthen
0098540cc9 Finalize 3.2.0 2023-03-18 18:50:46 -07:00
Wayne Warthen
b3e7e2ff62 Doc Updates 2023-03-18 17:57:44 -07:00
Wayne Warthen
582937de8e Merge branch 'dev' of https://github.com/wwarthen/RomWBW into dev 2023-03-18 17:13:01 -07:00
Wayne Warthen
5f5953edd8 Doc Tweaks 2023-03-18 17:12:46 -07:00
Wayne Warthen
50cd6ff955 Merge pull request #330 from b1ackmai1er/dev
Update dma.asm
2023-03-17 17:33:23 -07:00
Wayne Warthen
82c53bd20b Update to Small Computer Z50 Configurations
- Improve adherence to Z50 standard.
2023-03-17 15:53:58 -07:00
b1ackmai1er
0d0f5fb182 Update dma.asm
cp/m fails to boot with the dma driver included but no dma hardware installed. This is because the default "dma_fail_flag" indicates that the dma is good to go. But in safe mode the dma initialization never takes place to find no dma and set this flag, so the memory driver hangs. This change is to make the default status of the flag the failed state so the memory driver will fallback to software in recovery mode.
2023-03-18 02:13:00 +08:00
Wayne Warthen
3773c9c7fa Regen Docs
Regenerate pdf files based on Phil's updates.
2023-03-17 11:04:31 -07:00
Wayne Warthen
b7dc67b9c7 Merge pull request #329 from b1ackmai1er/dev
Update SystemGuide.md
2023-03-17 10:44:52 -07:00
b1ackmai1er
76c4209a5e Update ReadMe.md 2023-03-17 20:49:46 +08:00
b1ackmai1er
76d9a99758 Update SystemGuide.md 2023-03-17 20:15:55 +08:00
b1ackmai1er
1db858027e Update ROM_Applications.md
spelling and grammar
2023-03-17 20:11:14 +08:00
b1ackmai1er
d3fb3710ff Update UserGuide.md 2023-03-17 20:05:57 +08:00
b1ackmai1er
170cecd112 Update UserGuide.md 2023-03-17 20:04:12 +08:00
b1ackmai1er
f469699449 Update UserGuide.md
Spelling
2023-03-17 19:58:46 +08:00
b1ackmai1er
c4ff7315c9 Update Applications.md
Spelling corrections.
2023-03-17 19:20:14 +08:00
b1ackmai1er
ddbd338b6f Update SystemGuide.md
Spelling and grammer fixes
2023-03-17 19:02:38 +08:00
Wayne Warthen
77c6f934dc More Documentation Cleanup 2023-03-16 20:48:49 -07:00
Wayne Warthen
f72bf4e4c5 Documentation Cleanup 2023-03-16 16:23:14 -07:00
Wayne Warthen
dcc6bd2b62 Documentation Cleanup 2023-03-16 16:22:04 -07:00
Wayne Warthen
01fac79902 Merge pull request #328 from b1ackmai1er/dev
Some driver documentation updates and corrections
2023-03-15 10:56:26 -07:00
b1ackmai1er
70d3f54834 Some driver documentation updates and corrections 2023-03-15 20:57:51 +08:00
b1ackmai1er
650dcdb35f Merge pull request #51 from wwarthen/dev
Dev
2023-03-15 20:07:46 +08:00
Wayne Warthen
b27e14826a Allow Inaccurate CTC Divisor for Tick Frequency
See Issue #327.  This change makes an inaccurate CTC divisor a warning instead of an error.  Credit to Phillip Summers.
2023-03-14 12:53:15 -07:00
Wayne Warthen
d2b9333288 Merge pull request #326 from b1ackmai1er/dev
uart4 writing to port when not enabled. dmamon updates
2023-03-14 11:58:27 -07:00
b1ackmai1er
cbd60d02d9 Merge pull request #50 from wwarthen/dev
Dev
2023-03-14 20:49:19 +08:00
b1ackmai1er
93a1eade2a Update uart.asm
Make sure when UART4 is disabled, that the driver does not access the UART4 I/O ports.
2023-03-14 19:21:08 +08:00
Wayne Warthen
5073a9c506 Fix for Issue #324 ZPM Named Directory Handling Error
Credit to Jose Luis for discovering this bug and bringing it to my attention.  The fix is a small patch on top of the patches previously applied from Jon Saxton.  See the ZPM3 directory in Sources for  more information.
2023-03-12 21:02:08 -07:00
Wayne Warthen
86f8df03b6 Update release.yml 2023-03-11 15:13:36 -08:00
b1ackmai1er
a7ef76b9c4 Update dmamon.asm 2023-03-11 10:51:21 +08:00
Wayne Warthen
0a6719cf24 Minor Doc Updates 2023-03-10 16:33:05 -08:00
Wayne Warthen
0b0f68d579 GitHub Automation Tweaks 2023-03-10 14:55:27 -08:00
Wayne Warthen
c2d58ebe3a GitHub Automation Updates 2023-03-10 14:42:27 -08:00
Wayne Warthen
894898a75d Merge pull request #323 from wwarthen/master
Catch Up w/ Master Branch
2023-03-09 14:50:39 -08:00
Wayne Warthen
5da1f70b6c Update release.yml 2023-03-09 14:36:22 -08:00
Wayne Warthen
15e90c628a Update FLASH.DOC 2023-03-09 14:31:27 -08:00
Wayne Warthen
bc0d1ed5e8 Update release.yml 2023-03-08 16:15:15 -08:00
Wayne Warthen
fa12858bd3 Minor 2023-03-07 13:08:35 -08:00
Wayne Warthen
2f733ff1aa Merge pull request #322 from b1ackmai1er/dev
DMA updates
2023-03-07 12:39:16 -08:00
b1ackmai1er
ee0369c553 Update dmamon.asm 2023-03-06 17:01:59 +08:00
b1ackmai1er
d17f531d19 Update dmamon.asm 2023-03-06 15:56:44 +08:00
b1ackmai1er
0c4400920c Update dmamon.asm 2023-03-06 15:54:51 +08:00
b1ackmai1er
15b2dcb6b6 Update dbgmon.asm 2023-03-06 15:40:00 +08:00
b1ackmai1er
39f51a9620 Update fdu.doc 2023-03-06 15:32:37 +08:00
b1ackmai1er
632cc0e7db dma updates
Tidy up driver, standardize terminology half/full
Update dmamon so port address is not hardcoded.
2023-03-06 15:26:56 +08:00
Wayne Warthen
f5cb22da8f Minor Cosmetic Cleanup
No functional changes.
2023-03-05 07:10:22 -08:00
Wayne Warthen
7f186df54d Merge pull request #321 from b1ackmai1er/dev
Update dmamon.asm
2023-03-05 07:00:28 -08:00
b1ackmai1er
590f5cff9a Update dmamon.asm
Additional test enhancements
2023-03-05 14:18:04 +08:00
Wayne Warthen
e6908ee259 Merge pull request #320 from b1ackmai1er/dev
Minors
2023-02-26 06:56:45 -08:00
b1ackmai1er
5b7ca9d9e6 Update dmamon.asm
Stripped out all the speed selection stuff added an option for the velesoft datagear.
Speed selection can now be done from the command line. May add it back in later but will use HBIOS function call.
2023-02-26 14:58:32 +08:00
b1ackmai1er
93ac0ba5d0 Update SystemGuide.md
To match hbios
2023-02-26 14:09:49 +08:00
b1ackmai1er
5d3c1e2d4a Update util.asm 2023-02-26 11:42:23 +08:00
b1ackmai1er
f080f5b80a Merge pull request #49 from wwarthen/dev
Config File Fixes
2023-02-26 09:52:19 +08:00
Wayne Warthen
f1382b75ec Config File Fixes
I had accidentally set CRTACT to TRUE in a few standard configs inadvertently.
2023-02-25 12:56:44 -08:00
b1ackmai1er
d175981c71 Merge pull request #48 from wwarthen/dev
Dev
2023-02-24 16:00:37 +08:00
Wayne Warthen
5e42066874 Release Candidate for v3.2 2023-02-23 17:24:07 -08:00
Wayne Warthen
52a41663eb Regen Doc, Bump Version 2023-02-21 14:01:03 -08:00
Wayne Warthen
f0183bdd8a Merge pull request #319 from b1ackmai1er/dev
Update hbios.asm
2023-02-21 13:42:16 -08:00
b1ackmai1er
2398805617 Update HBIOS 2023-02-21 20:44:31 +08:00
b1ackmai1er
08168681b6 Update hbios.asm 2023-02-21 19:37:43 +08:00
b1ackmai1er
fa3874ec45 Update hbios.asm
Device display list improvements
2023-02-20 22:20:33 +08:00
Wayne Warthen
fc634380b0 Merge pull request #317 from b1ackmai1er/dev
vgmplay updates, romldr baud improvements, hbios/cbios low memory handling and other minors
2023-02-19 18:25:52 -08:00
b1ackmai1er
6b84dd36b0 Update vgmplay.asm
Cleanup, move init code so that memory can be reused.
2023-02-19 21:52:11 +08:00
b1ackmai1er
93245434c0 Device display optimizations 2023-02-19 21:47:51 +08:00
b1ackmai1er
06913144f8 Create ay-test.asm
From the archives ...
2023-02-19 18:52:19 +08:00
b1ackmai1er
04947015aa Update config.asm 2023-02-19 15:44:03 +08:00
b1ackmai1er
e7ab778929 Slightly better handling of low HBIOS heap memory
CBIOS reports *** HBIOS Heap Overflow, when the HBIOS is big (i.e. lots of included drivers)

Trigger build failure when CCP will not fit in heap.
Slightly more informative CBIOS error message
2023-02-19 15:42:59 +08:00
b1ackmai1er
147ab2ce4c minors 2023-02-19 13:55:07 +08:00
b1ackmai1er
af2a025cff AY-3-8910 MINORS 2023-02-19 13:06:45 +08:00
b1ackmai1er
2da5ba80ba Merge pull request #47 from wwarthen/dev
Dev
2023-02-19 10:53:10 +08:00
b1ackmai1er
d4700d0cdd Update vgmplay.asm 2023-02-19 10:50:37 +08:00
b1ackmai1er
e2426eff08 Update vgmplay.asm
Resync
2023-02-19 10:47:31 +08:00
Wayne Warthen
2b16617ea3 Fix Missing Files 2023-02-17 19:06:01 -08:00
Wayne Warthen
816234f0fa More Cleanup 2023-02-17 18:07:44 -08:00
b1ackmai1er
d960efdc4d Merge pull request #46 from wwarthen/dev
Dev
2023-02-17 17:57:18 +08:00
Wayne Warthen
bd664c3a1f More Cleanup 2023-02-16 13:59:15 -08:00
Wayne Warthen
dc151ad1a7 Rename PORTSWP -> PORTSCAN 2023-02-16 11:09:05 -08:00
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
b1ackmai1er
29c7f3a920 Merge pull request #45 from wwarthen/dev
Fix SURVEY.COM (again)
2023-02-15 17:46:24 +08:00
Wayne Warthen
36fe842bec Fix SURVEY.COM (again)
See Issue #316
2023-02-14 18:47:09 -08:00
b1ackmai1er
3a8a503c8e Merge pull request #44 from wwarthen/dev
Dev
2023-02-14 19:12:29 +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
b1ackmai1er
975656ef6f Merge pull request #43 from wwarthen/dev
Dev
2023-02-08 18:59:48 +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
b1ackmai1er
00158b0107 Merge pull request #42 from wwarthen/dev
Continuing Doc Update
2023-02-06 19:27:27 +08:00
Wayne Warthen
146826b142 Continuing Doc Update
Mostly done with User Guide now.
2023-02-05 16:36:23 -08:00
b1ackmai1er
979276e0b5 Merge pull request #41 from wwarthen/dev
Another Iteration of Documentation Updates
2023-01-31 19:38:47 +08:00
Wayne Warthen
0a6009b38f Another Iteration of Documentation Updates
... still a lot left to go.
2023-01-29 17:40:59 -08:00
b1ackmai1er
8656cf992e Merge pull request #40 from wwarthen/dev
First Round of Clean-up for Stable Release
2023-01-29 11:06:48 +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
b1ackmai1er
6dac01102d Merge pull request #39 from wwarthen/dev
Update CF Card Detection
2023-01-22 17:51:11 +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
b1ackmai1er
a9173c076b Update ReadMe.txt 2023-01-20 00:37:03 +08:00
b1ackmai1er
8ffe53ea68 Merge pull request #38 from wwarthen/dev
Support Serial Keyboard with Video Displays
2023-01-20 00:34:38 +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
b1ackmai1er
83ff343186 Merge pull request #37 from wwarthen/dev
Finalize p-System Implementation
2023-01-17 17:05:23 +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
b1ackmai1er
c51963529d Merge pull request #36 from wwarthen/dev
Introducing p-System IV.0 for RomWBW
2023-01-14 21:54:27 +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
b1ackmai1er
834f2d7682 Merge pull request #35 from wwarthen/dev
Audio Driver Cleanup
2023-01-10 21:37:21 +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
b1ackmai1er
ec5b19acad Merge pull request #34 from wwarthen/dev
Enable WAIT Signal for 9958 Video
2023-01-09 17:50:09 +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
b1ackmai1er
3603ef9c9d Update unlzsa2s.asm 2023-01-07 08:02:32 +08:00
b1ackmai1er
3aed60afe2 Merge pull request #33 from wwarthen/dev
Minor IDE/CF/SD Disk Handling Updates
2023-01-06 23:27:14 +08:00
b1ackmai1er
e1e2c2efa9 Update unlzsa2s.asm
ver.07 by spke (04-05/04/2022, 134(-5) bytes, +1% speed, using self-modifying code by default)
2023-01-06 23:24:53 +08:00
b1ackmai1er
55b4e1e26d Use new hbios routine for speed setting. 2023-01-05 20:56: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
b1ackmai1er
cb336c9ba5 Update vgmplay.asm
Reorganize and clarify some configuration settings
2023-01-03 19:50:59 +08:00
b1ackmai1er
ad0a6af047 Update romldr.asm
Rorder table to eliminate need for translation
2023-01-03 19:14:34 +08:00
b1ackmai1er
22afb8333c Merge pull request #32 from wwarthen/dev
Dev
2023-01-02 10:27:44 +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
Wayne Warthen
b82ff327cf CBIOS Fixes for UNA
Development in the dev branch on CBIOS had broken basic UNA functionality.  These fixes seem to correct the problems.  A full regression test of UNA has **not** yet been performed.
2022-06-26 16:54:46 -07:00
Wayne Warthen
44b17ccc3a Improve Centronics Compatibility
- Renamed Centronics driver from "CEN" to "LPT" based on input that LPT is the more recognized name for IBM compatible Centronics interfaces.
- Modified LPT hardware detection to be more generic (no longer depends on MBC-specific hardware implementation).
- Fix to CPU speed display for SBC v2 (004 and above) speed selection mechanism.
2022-06-26 14:25:32 -07:00
Wayne Warthen
b2e1294452 Correct AY38910 Off By 1 Octave Issue
I think this update corrects a long-standing issue in which the AY38910 driver played notes off by one octave.
2022-06-20 20:07:06 -07:00
b1ackmai1er
23a10343ca Merge pull request #15 from wwarthen/dev
Dev
2022-06-18 12:58:19 +08:00
Wayne Warthen
5805f13a62 Add Utilities to DOS65 Disk Image 2022-06-17 11:13:11 -07:00
Wayne Warthen
d39f0201f4 Bootable QP/M Disk
- Put a preconfigured image of QP/M on the system tracks of the QP/M disk images.
- Minor adjustment to dbgmon.asm for compatibility with UNA.
2022-06-17 10:25:48 -07:00
Wayne Warthen
94cf9a209e Merge pull request #290 from b1ackmai1er/dev
Build fixup (rtcdefval), recovery mode message, fixup for 3 sound devices
2022-06-17 10:21:29 -07:00
b1ackmai1er
691842c1bc Fix default 2022-06-17 21:49:08 +08:00
b1ackmai1er
eb255e7016 Add bank unset. Fix xmodem transfer bios call 2022-06-17 21:37:23 +08:00
b1ackmai1er
fe19472a2c Fixup restore of rtcval in ay-3-8910 driver 2022-06-17 18:39:18 +08:00
b1ackmai1er
526a1a5d33 Fixup restore of rtcval in ay-3-8910 driver 2022-06-17 18:35:46 +08:00
b1ackmai1er
719c993a60 MBC6502 support in dbgmon
Add an option in the monitor to switch to MBC6502. Excluded by default.
2022-06-17 18:30:35 +08:00
b1ackmai1er
70697a762c Merge pull request #14 from wwarthen/dev
Dev
2022-06-15 21:42:34 +08:00
Wayne Warthen
a62f5805ca Add BOOT_DELAY Configuration Variable
Some systems use terminal devices (Raspberry Pi, etc.) that take a few seconds to be ready to display console text.  The BOOT_DELAY setting can be used to introduce an arbitrary delay (in seconds) in the boot process just prior to text output.  This can be used to avoid missing some of the boot messages.
2022-06-09 15:36:36 -07:00
Wayne Warthen
87a6701464 Refresh DOS65 Disk Contents
- Updated DOS65 disk contents with latest binaries from Dan Werner.
2022-06-04 19:43:31 -07:00
Wayne Warthen
3f3a13bff6 Add QP/M Disk Image & Miscellaneous
- Minimal support for QP/M by adding a disk image.
- Disk image is not included in combo image, it must be added separately.
- Disk image boots into CP/M 2.2.  You must run QINSTALL to configure it and make the disk boot into QP/M.
- It is critical to review the ReadMe.txt file -- default QP/M configuration conflicts with RomWBW use of Page Zero.
- Added some stack space to SYSGEN.  It was failing when run with extra CBIOS debugging enabled.
- Cleanup of diskdefs file.
- Updated SIMH executable.
2022-06-04 19:21:35 -07:00
Wayne Warthen
982906757e Support QP/M TIMDAT Routine
QP/M is a CP/M 2.2 replacement for BDOS/CCP.  However, it adds it's own concept of date/time stamping.  Support for the QP/M date/time routine has been added.  You can configure QP/M to find the vector at address 0x0010.

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

View File

@@ -3,10 +3,9 @@ name: Commit Build
on:
push:
branches:
- master
- dev
- '**'
tags-ignore:
- v*
- '**'
jobs:
buildLinux:
@@ -14,17 +13,20 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v3.3.0
- name: Get Commit Ref
run: |
COMMIT_REF=$(git rev-parse --short $GITHUB_SHA)
echo "COMMIT_REF: $COMMIT_REF"
echo "COMMIT_REF=$COMMIT_REF" >>$GITHUB_ENV
- name: Build
run: |
export TZ='America/Los_Angeles'
sudo apt-get install libncurses-dev
sudo apt-get install srecord
make dist
make clean
rm -rf .git*
- name: List Output
@@ -34,37 +36,29 @@ 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}}
name: RomWBW-${{env.COMMIT_REF}}-Linux
path: .
- name: Create Package Archive
run: |
zip -r RomWBW-SnapShot-Package.zip .
- name: Post SnapShot
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "SnapShot"
prerelease: true
title: "RomWBW Development SnapShot Build"
files: |
RomWBW-SnapShot-Package.zip
buildMacOS:
runs-on: macos-latest
runs-on: macOS-latest
steps:
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v3.3.0
- name: Get Commit Ref
run: |
COMMIT_REF=$(git rev-parse --short $GITHUB_SHA)
echo "COMMIT_REF: $COMMIT_REF"
echo "COMMIT_REF=$COMMIT_REF" >>$GITHUB_ENV
- name: Build
run: |
export TZ='America/Los_Angeles'
brew install srecord
make dist
make clean
rm -rf .git*
- name: List Output
@@ -74,7 +68,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
name: RomWBW-${{env.COMMIT_REF}}-MacOS
path: .

View File

@@ -1,8 +1,9 @@
name: Release Build
on:
release:
types: published
push:
tags:
- '**'
jobs:
build:
@@ -10,42 +11,99 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Create Package Label
run: |
LABEL=`echo "$GITHUB_REF" | sed "s|^refs/tags/||"`
echo "::set-env name=PKGLBL::$LABEL"
- name: Display Diagnostics
run: |
echo PKGLBL: "$PKGLBL"
echo Upload URL: "${{github.event.release.upload_url}}"
echo GITHUB_TOKEN: "${{secrets.GITHUB_TOKEN}}"
- name: Checkout
uses: actions/checkout@v3.3.0
- name: Build
run: |
export TZ='America/Los_Angeles'
sudo apt-get install libncurses-dev
sudo apt-get install srecord
make dist
make clean
rm -rf .git*
- name: Upload Artifact
uses: actions/upload-artifact@v1
with:
name: RomWBW-${{env.PKGLBL}}-Package
path: .
- name: Create Package Archive
run: |
zip -r Package.zip .
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
zip -r RomWBW-${{github.ref_name}}-Package.zip .
- name: Set Title
run: |
echo "Tag: ${{github.ref_name}}"
if grep -q "dev" <<< "${{github.ref_name}}"; then
TITLE="RomWBW Development Snapshot"
elif grep -q "pre" <<< "${{github.ref_name}}"; then
TITLE="RomWBW Prerelease"
elif grep -q "rc" <<< "${{github.ref_name}}"; then
TITLE="RomWBW Release Candidate"
else
TITLE="RomWBW"
fi
echo "Title: $TITLE"
echo "TITLE=$TITLE" >>$GITHUB_ENV
- name: Attach Package Archive
uses: wwarthen/actions/packages/automatic-releases@built-packages
with:
upload_url: ${{github.event.release.upload_url}}
asset_path: Package.zip
asset_name: RomWBW-${{env.PKGLBL}}-Package.zip
asset_content_type: application/zip
repo_token: "${{secrets.GITHUB_TOKEN}}"
draft: true
prerelease: true
title: "${{env.TITLE}} ${{github.ref_name}}"
files: |
RomWBW-${{github.ref_name}}-Package.zip
# - name: Upload Package Archive
# uses: AButler/upload-release-assets@v2.0.2
# with:
# repo-token: ${{secrets.github_token}}
# files: |
# RomWBW-${{env.PKGLBL}}-Package.zip
# - name: Post SnapShot
# uses: docker://antonyurchenko/git-release:latest
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# RELEASE_NAME_PREFIX: "${{env.TITLE}} "
# CHANGELOG_FILE: "none"
# with:
# args: |
# RomWBW-SnapShot-Package.zip
# - name: Post SnapShot
# uses: cb80/pubrel@latest
# with:
# replace: true
# files: |
# RomWBW-SnapShot-Package.zip
# - name: Post SnapShot
# uses: wwarthen/actions/packages/automatic-releases@built-packages
# with:
# repo_token: "${{ secrets.GITHUB_TOKEN }}"
# prerelease: true
# title: "RomWBW Development SnapShot ${{env.GITHUB_REF_SLUG}}"
# files: |
# RomWBW-SnapShot-Package.zip
# - name: Remove Older Releases
# uses: wwarthen/delete-release-action@v1.2
# with:
# release-drop: true
# release-keep-count: 0
# release-drop-tag: true
# pre-release-drop: false
# pre-release-keep-count: 0
# pre-release-drop-tag: true
# draft-drop: true
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: Remove Older Releases
# uses: s00d/delete-older-releases@0.2.1
# with:
# keep_latest: 1
## delete_tag_pattern: beta # defaults to ""
# delete_type: 'release'
# delete_branch: 'main'
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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

@@ -1,173 +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.
RomWBW includes a set of disk images that are ready to copy onto
a floppy or hard/CF/SD disk. You can use your modern computer
(Windows/Linux/Mac) to copy the disk image file onto your disk
media. The disk media will then be ready to use in your RomWBW
System.
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.
A description of the disk images is provided later in this file.
For more information on the creatioin of these images including
instructions for customizing them or creating your own, refer to
the ReadMe.txt file in the Source\Images directory.
Installing Images
-----------------
The following instructions apply to Windows computers. Alternatively,
you can use the "dd" command on Linux or Mac.
First of all, a MAJOR WARNING!!!! The tools described below are
quite capable of obliterating your running Windows system drive. Use
with extreme caution and make sure you have backups.
To install a floppy image on floppy media, you can use the tool
called RaWriteWin. This tool is included in the Tools directory of
the distribution. This tool will write your floppy image (fd_xxx.img)
to a floppy disk using a raw block transfer. The tool is GUI based
and it's operation is self explanatory.
To install a hard disk image on a CF card or SD card, you must have
the appropriate media card slot on your computer. If you do, you can
use the tool called Win32DiskImager. This tool is also included in
the Tools directory of the distribution. It will write your
hard disk image (hd_xxx.img) to the designated media card. This tool
is also GUI based and self explanatory.
The use of the SIMH emulator is outside of the scope of this document.
However, if you use SIMH, you will find that you can attach the hard
disk images to the emulator with lines such as the following in your
SIMH configuration file:
| attach hdsk0 hd_cpm22.img
| set hdsk0 format=HDSK
| set hdsk0 geom=T:2048/N:256/S:512
| set hdsk0 wrtenb
Making Disk Images Bootable
---------------------------
The Operating System disk images below are ready to boot by the
RomWBW Boot Loader. However, if you update your RomWBW ROM, then
you should also update the system tracks of your bootable disk
images. You would use SYSCOPY to do this. SYSCOPY can also be
used to make a disk bootable if it is not already bootable.
You would use a command like the following to make drive C bootable:
| B>SYSCOPY C:=CPM.SYS
The system file to use depends on the operating system you are trying
to boot from the slice you are initializing with SYSCOPY:
CP/M 2.2 - cpm.sys
ZSDOS 1.1 - zsys.sys
CP/M 3 - cpmldr.sys
ZPM3 - cpmldr.sys
Slices
------
A RomWBW CP/M filesystem is fixed at 8MB. This is because it is the
largest size filesystem supported by all common CP/M variants. Since
all modern hard disks (including SD Cards and CF Cards) are much
larger than 8MB, RomWBW supports the concept of "slices". This
simply means that you can concatenate multiple CP/M filesystems (up
to 256 of them) on a single physical hard disk and RomWBW will allow
you to assign drive letters to them and treat them as multiple
independent CP/M drives.
With the exception of the hd_combo image, each of the disk images
includes a single CP/M file system (i.e., a single slice). However,
you can easily create a multi-slice disk image by merely concatenating
multiple images together. For example, if you wanted to create a 2
slice disk image that has ZSDOS in the first slice and Wordstar in
the second slice, you could use the following command from a Windows
command prompt:
| C:\RomWBW\Binary>copy /b hd_zsdos.img + hd_ws.img hd_multi.img
You can now write hd_multi.img onto your SD or CF Card and you will
have ZSDOS in the first slice and Wordstar in the second slice.
The hd_combo disk image is an example of this. It contains several
slices in one image file. The contents of this special disk image
are described below.
The concept of slices applies ONLY to hard disks. Floppy disks are
not large enough to support multiple slices.
Disk Image Contents
-------------------
What follows is a brief description of the contents of the
disk images automatically provided in the RomWBW distribution.
Note that all of the OS images include the RomWBW custom
support apps.
cpm22 - DRI CP/M 2.2 (Bootable Floppy and Hard Disk)
Standard DRI CP/M 2.2 distribution files along with a few commonly
used utilities.
zsdos - ZCPR1 + ZSDOS 1.1 (Bootable Floppy and Hard Disk)
Contains ZCPR1 and ZSDOS 1.1. This is roughly equivalent to the
ROM boot contents, but provides a full set of the applications
and related files that would not all fit on the ROM drive.
nzcom - NZCOM (Bootable Floppy and Hard Disk)
Standard NZCOM distribution. Note that you will need to run the
NZCOM setup before this will run properly. You will need
to refer to the NZCOM documentation.
cpm3 - DRI CP/M3 (Bootable Floppy and Hard Disk)
Standard DRI CP/M 3 adaptation for RomWBW that is ready to run.
It can be started by running CPMLDR.
zpm3 - ZPM3 (Bootable Floppy and Hard Disk)
Simeon Cran's ZCPR 3 compatible OS for CP/M 3 adapted for RomWBW and
ready to run. It can be started by running CPMLDR (which seems
wrong, but ZPMLDR is somewhat broken).
ws4 - WordStar 4 (Floppy and Hard Disk)
Micropro Wordstar 4 full distribution. This image is not bootable
and is intended to be added as an additional slice to an OS image.
bp - BPBIOS (Hard Disk only)
Adaptation of BPBIOS for RomWBW. This is NOT complete and NOT
useable in it's current state.
combo - Multi-Boot Combination (Bootable Hard Disk)
A pre-created combo image that contains the following slices. The
slices are identical to the individual images listed above.
Slice 0: cpm22 (bootable)
Slice 1: zsdos (bootable)
Slice 2: nzcom (bootable)
Slice 3: cpm3 (bootable)
Slice 4: zpm3 (bootable)
Slice 5: ws4 (not bootable)

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

@@ -49,7 +49,7 @@ The files with a ".upd" extension are binary images identical to the
.rom files, but they only have the first 128K bytes. The first 128K
is the system image without the ROM disk contents. These files can be
used to update the system image without modifying the ROM disk
contents. Refer to the Getting Started document for more information.
contents. Refer to the RomWBW User Guide for more information.
ROM Executable Images (<plt>_<cfg>.com)
---------------------------------------
@@ -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

@@ -1,3 +1,15 @@
Version 3.2.1
-------------
- M?P: Fixed Zeta 2 FDD and CPUSPD config settings
- WBW: Fixed SURVEY.COM (again)
- DDW: Updates to DOS/65 binaries in disk images
- PMS: Updates to VGMPLAY including support for YM2151
- WBW: Fix for quark delay adjustment being trashed
Version 3.2
-----------
- WBW: Version bump for release
Version 3.1.1
-------------
- WBW: Version bumped due to pervasive changes
@@ -9,7 +21,7 @@ Version 3.1.1
- HCS: ZRC memory manager support
- S?K: Support for Tiny Z80 by Sergey
- E?B: Support for v6 YM/AY sound card
- C?M: Support for RC2014 bus PropIO V2
- C?M: Support for RCBus bus PropIO V2
- W?S: Updated FLASH software to v1.3.4
- PMS: Preliminary support for writing to FLASH ROMs
- PMS: Creation of process to update ROM system area w/o updating ROM disk contents
@@ -62,13 +74,20 @@ 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
-----------
- WBW: Refactored ROM Loader
- WBW: INTRTC periodic timer based clock
- WBW: FDISK80 updated to allow reserving up to 256 slices
- WBW: Added support dual 16C550 UART on RC2014 platform
- WBW: Added support dual 16C550 UART on RCBus platform
- WBW: Made .com images smaller (contain only Z-System now)
- WBW: Support automatic clock hardware detection and fallback
- WBW: Support use of CTC for SIO baud rate divisors
@@ -106,8 +125,8 @@ Version 2.9.2
- WBW: Support two SIO modules w/ auto-detection
- PMS: Support ECB USB-FIFO board
- WBW: Fixed ASSIGN issue with incorrect DPB selection
- WBW: Add RC2014 Z180 AY sound support to TUNE app
- WBW: Add RC2014 AY sound support to AY driver
- WBW: Add RCBus Z180 AY sound support to TUNE app
- WBW: Add RCBus AY sound support to AY driver
- WBW: Add SC126 platform
- WBW: Config files cleanup
- WBW: Add interrupt support to ASCI driver
@@ -126,7 +145,7 @@ Version 2.9.2
- PMS: Add sound support to NASCOM BASIC
- WBW: Updated FAT to add MD and FORMAT commands
- WBW: Add CP/M 3 (experimental)
- M?T: Support Shift register SPI WIZNET for RC2014
- M?T: Support Shift register SPI WIZNET for RCBus
- PLS: Added seconds register in HBIOS
- WBW: More flexible table-driven config in TUNE.COM
- PMS: Added timer support for Zilog Peripherals ECB Board
@@ -154,7 +173,7 @@ Version 2.9.2
Version 2.9.1
-------------
- E?B: Added support for RC2014 RTC
- E?B: Added support for RCBus RTC
- WBW: Converted PTXPLAY to TUNE (now plays PT2/PT3/MYM sounds files)
- WBW: Updated Win32DiskImager to v1.0
- WBW: Implemented character attributes on Propeller based consoles
@@ -164,7 +183,7 @@ Version 2.9.1
- WBW: Update default IOBYTE so that LST:=LPT: by default
- WBW: Fixed missing drive/head setup for writes in PPIDE
- WBW: Fixed XModem HBIOS console driver for file send operations
- WBW: Preliminary support for RC180 platform (Z180 module in RC2014)
- WBW: Preliminary support for RC180 platform (Z180 module in RCBus)
- WBW: Added NZCOM distribution files to third slice of hard disk image
- WBW: Fixed getnum32 bug in MODE command (found by Phil Summers)
- PMS: Added serial support for Zilog Peripherals Baord
@@ -182,26 +201,26 @@ Version 2.9.1
- WBW: Added timer interrupt support for CTC under Zeta 2 and Easy Z80
- WBW: Support LBA style access in floppy driver
- WBW: Added beta version of FAT filesystem utility (copy, dir, del, ren)
- SCC: Added support for native memory addressing on Z180-based RC2014
- SCC: Added support for native memory addressing on Z180-based RCBus
- PMS: Dynamically discover and display processor type at boot
- J?L: Added German keyboard support to PPK and KBD drivers
Version 2.9.0
-------------
- WBW: Implemented multi-sector I/O in all disk drivers
- WBW: Added support for RC2014 SMB Floppy controller modules (SMC and WDC)
- WBW: Added support for RCBus SMB Floppy controller modules (SMC and WDC)
- WBW: New function dispatching for character/disk/video drivers
- WBW: Updated FDU app to support RC2014 floppy controllers
- WBW: Updated FDU app to support RCBus floppy controllers
- WBW: Added TIMER app to display system timer value
- WBW: Refactored interrupt management code
- WBW: Added PTXPLAY application and sample tunes
Version 2.8.6
-------------
- WBW: Added support for RC2014 (SIO and ACIA drivers primarily)
- WBW: Added support for RCBus (SIO and ACIA drivers primarily)
- WBW: Automatically detect and run PROFILE.SUB on boot drive if it exists
- WBW: Fixed Dual SD Board detection
- WBW: Added console support to XModem (for RC2014 primarily)
- WBW: Added console support to XModem (for RCBus primarily)
- E?B: Fixed IDE/PPIDE when used with non-CF drives
- WBW: Patched SUBMIT.COM so that it always puts temp file on A: for immediate execution
- WBW: Accommodate spin up time for true IDE hard disks (IDE or PPIDE)

Binary file not shown.

View File

@@ -10,6 +10,26 @@ This directory ("Doc") is part of the RomWBW System Software
distribution archive. It contains documentation for components of
the system.
ChangeLog.txt
-------------
Log of changes in RomWBW by version.
RomWBW User Guide ("RomWBW User Guide.pdf")
RomWBW System Guide ("RomWBW System Guide.pdf")
RomWBW Applications ("RomWBW Applications.pdf")
RomWBW ROM Applications ("RomWBW ROM Applications.pdf")
RomWBW Disk Catalog ("RomWBW Disk Catalog.pdf")
RomWBW Errata ("RomWBW Errata.pdf")
-------------------------------------------------------
Documentation set for RomWBW. The primary document is the
User Guide. The System Guide explains internal system operation
and has a reference for the HBIOS API. Use of included tools
and utilities are detailed in the Applications and
ROM Applications documents.
CPM Manual ("CPM Manual.pdf")
-----------------------------
@@ -43,12 +63,6 @@ The operational manual for John Coffman's hard disk partitioning
program. This program is included in RomWBW as FDISK80.
Floppy Disk Utility Documentation ("FDU.tst")
---------------------------------------------
Operational documentation for the RomWBW FDU application.
Hard Disk Anatomy ("Hard Disk Anatomy.pdf")
-------------------------------------------
@@ -61,17 +75,47 @@ NZCOM User's Manual ("NZCOM Users Manual.pdf")
NZCOM operating system operation manual.
RomWBW Architecture ("RomWBW Architecture.pdf")
-----------------------------------------------
ZCPR Manual ("ZCPR Manual.pdf")
-------------------------------
Document describing the architecture of the RomWBW HBIOS. It
includes reference information for the HBIOS calls.
ZCPR is the command proccessor portion of Z-System. This is the
manual for ZCPR 1.x as included in RomWBW. The installation
instructions can be ignored since that work has already been
completed as part of the RomWBW distribution.
ROM Applications ("ROM Applications.pdf")
-----------------------------------------
ZCPR D&J Manual ("ZCPR-DJ.doc")
-------------------------------
Breif instructions for the ROM based applications included in
in the boot ROM.
ZCPR D&J User Manual. This manual supplements the ZCPR Manual.
ZSDOS Manual ("ZSDOS Manual.pdf")
---------------------------------
ZSDOS is the DOS portion of Z-System. This is the manual for ZSDOS
1.x as included in RomWBW. The installation instructions can be
ignored since that work has already been completed as part of the
RomWBW distribution.
Microsoft Basic-80 Reference Manual v5.0 (Microsoft Basic-80 Reference Manual v5.0.pdf)
---------------------------------------------------------------------------------------
Official manual for Microsoft BASIC as included in RomWBW.
QP/M 2.7 Installation Guide and Supplements ("qpm27.pdf")
QP/M 2.7 Interface Guide ("qdos27.pdf")
QP/M 2.7 Features and Facilities ("qcp27.pdf")
--------------------------------------------
Official documentation set for QP/M 2.7 from original QP/M distribution.
SIO+CTC Baud Rate Options (SIO+CTC Baud Rate Options.pdf)
---------------------------------------------------------
Documents possible baud rates available based on different baud
clock rates for Zilog SIO using CTC for baud rate clock generation.
Z180 ASCI Baud Rate Options ("Z180 ASCI Baud Rate Options.pdf")
@@ -83,19 +127,10 @@ clock rate. This document provides a list of the possible
baud rates for typical CPU clock rates.
ZCPR Manual ("ZCPR Manual.pdf")
-------------------------------
UCSD p-System Users Manual ("UCSD p-System Users Manual.pdf")
-------------------------------------------------------------
ZCPR is the command proccessor portion of Z-System. This is the
manual for ZCPR 1.x as included in RomWBW. The installation
instructions can be ignored since that work has already been
completed as part of the RomWBW distribution.
Official user manual for p-System operating system included with
RomWBW.
ZSDOS Manual ("ZSDOS Manual.pdf")
---------------------------------
ZSDOS is the DOS portion of Z-System. This is the manual fo ZSDOS
1.x as included in RomWBW. The installation instructions can be
ignored since that work has already been completed as part of the
RomWBW distribution.
--WBW 5:18 PM 3/16/2023

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.

View File

@@ -23,7 +23,7 @@ Zeta 2 (X)
- Test FD driver
- Test FDU app
RC2014 (X)
RCBus (X)
------
- Test SIO driver (Serial Module)
- Test ACIA driver (Dual Serial Module)
@@ -40,7 +40,7 @@ N8-2312 (X)
- Test FDU app
- Test TMS driver (video & kbd)
N8-2511 ( )
N8-2511 (X)
-------
- Test ASCI driver
- Test SD driver (Juha mode)
@@ -139,27 +139,6 @@ GENERAL (X)
- ASSIGN app
- MODE app
- SYSCOPY app
- OSLDR app
- FDU app
- FDISK80 app
- TUNE app
RESULTS
-------
- Missing HBIOS startup banner (X)
- PANIC while printing Serial device inventory (X)
- Unexpected interrupt signals not handled well (X)
- Fix IT_??? usage (X)
- Fix HB_DI/HB_EI in PEEK/POKE/BNKCPY (X)
- Fix SIMH timer interrupt setup (X)
- Move DI/EI in PEEK/POKE/BNKCPY to API layer? (X)
- RETI vs. JP in page zero when INTMODE = 0 (X)
- Check interrupt stack space (X)
- If an early INT fires, we return with INTs enabled (not good) (X)
- PPPCON init should display ANSI 80x25 or similar (X)
- Add INT MODE X message to early boot messages (X)
- OSLDR fails when LDDS is loaded (X)
- Add "!!!" to force assembly error as needed ( )
- TIMER app should check for HBIOS active (X)
- Halt system after bad interrupt??? ( )
- Adapt and bundle PLAYER.COM (X)

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

1429
ReadMe.md

File diff suppressed because it is too large Load Diff

1412
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

@@ -38,7 +38,7 @@
; DYNAMIC FDC SELECTION AT STARTUP
; DYNAMIC CPU SPEED ADJUSTMENT
; 2017-12-16: V5.1 IMPROVED POLLING READ/WRITE PERFORMANCE
; 2018-01-08: V5.2 ADDED RC2014 SUPPORT FOR:
; 2018-01-08: V5.2 ADDED RCBUS SUPPORT FOR:
; - SCOTT BAKER (SMB) SMC 9266 FDC
; - SCOTT BAKER (SMB) WDC 37C65 FDC
; 2018-09-05: v5.3 ADDED SUPPORT FOR SMALLZ80
@@ -91,7 +91,7 @@ FDC_MBC .EQU 11
_DIO .EQU $01 ; CUSTOM FOR DIO BOARD
_DIO3 .EQU $02 ; CUSTOM FOR DIO3 BOARD
_ZETA .EQU $04 ; CUSTOM FOR ZETA
_RCSMC .EQU $08 ; CUSTOM FOR RC2014 SMB SMC MODULE
_RCSMC .EQU $08 ; CUSTOM FOR RCBUS SMB SMC MODULE
_PCAT .EQU $10 ; PC/AT MODE IN NEWER CONTROLLERS
;
;===============================================================================
@@ -465,11 +465,11 @@ FSS_MENU:
.TEXT " (D) Zeta 2 SBC Onboard FDC\r\n"
.TEXT " (E) Dual IDE ECB Board\r\n"
.TEXT " (F) N8 Onboard FDC\r\n"
.TEXT " (G) RC2014 SMC (SMB)\r\n"
.TEXT " (H) RC2014 WDC (SMB)\r\n"
.TEXT " (G) RCBus SMC (SMB)\r\n"
.TEXT " (H) RCBus WDC (SMB)\r\n"
.TEXT " (I) SmallZ80 Expansion\r\n"
.TEXT " (J) Dyno-Card FDC, D1030\r\n"
.TEXT " (K) RC2014 EPFDC\r\n"
.TEXT " (K) RCBus EPFDC\r\n"
.TEXT " (L) Multi-Board Computer FDC\r\n"
.TEXT " (X) Exit\r\n"
.TEXT "=== OPTION ===> $\r\n"

View File

@@ -1,6 +1,6 @@
================================================================
Floppy Disk Utility (FDU) v5.3 for RetroBrew Computers
Disk IO / Zeta / Dual-IDE / N8 / RC2014 / SmallZ80 / Dyno
Disk IO / Zeta / Dual-IDE / N8 / RCBus / SmallZ80 / Dyno
================================================================
Updated January 5, 2020
@@ -33,7 +33,7 @@ like to acknowledge that much was derived from the previous
work of Andrew Lynch and Dan Werner. I also want to credit
Sergio Gimenez with testing the 5.25" drive support and Jim
Harre with testing the 8" drive support. Support for Zeta 2
comes from Segey Kiselev. Thanks!
comes from Sergey Kiselev. Thanks!
General Usage
-------------
@@ -74,7 +74,7 @@ supported:
- Zeta 2
- N8
- Mark IV
- RC2014
- RCBus
- SmallZ80
- Dyno
- MBC
@@ -89,8 +89,8 @@ You must have one of the following floppy disk controllers:
- Zeta SBC onboard FDC
- Zeta 2 SBC onboard FDC
- N8 SBC onboard FDC
- RC2014 Scott Baker SMC-based Floppy Module
- RC2014 Scott Baker WDC-based Floppy Module
- RCBus Scott Baker SMC-based Floppy Module
- RCBus Scott Baker WDC-based Floppy Module
- SmallZ80 FDC
- Dyno FDC
- MBC FDC
@@ -99,7 +99,7 @@ Finally, you will need a floppy drive connected via an
appropriate cable:
Disk IO - no twist in cable, drive unit 0/1 must be selected by jumper on drive
DISK IO 3, Zeta, Zeta 2, RC2014, Dyno - cable with twist, unit 0 after twist, unit 1 before twist
DISK IO 3, Zeta, Zeta 2, RCBus, Dyno - cable with twist, unit 0 after twist, unit 1 before twist
DIDE, N8, Mark IV, SmallZ80 - cable with twist, unit 0 before twist, unit 1 after twist
Note that FDU does not utilize your systems ROM or OS to
@@ -147,15 +147,15 @@ P5 (bd ID): 1-2, 3-4 (for $20-$3F port range)
There are no specific N8 jumper settings, but the default
I/O range starting at $80 is assumed in the published code.
The RC2014 Scott Baker SMC-based floppy module should be jumpered
The RCBus Scott Baker SMC-based floppy module should be jumpered
for I/O base address 0x50 (SV1: 11-12), JP1 (TS) shorted,
JP2 (/FAULT) shorted, JP3 (MINI): 2-3, JP4 (/DC/RDY): 2-3.
The RC2014 Scott Baker WDC-based floppy module should be jumpered
The RCBus Scott Baker WDC-based floppy module should be jumpered
for I/O base address 0x50 (SV1: 11-12), JP1 (/DACK): 1-2,
JP2 (TC): 2-3.
The RC2014 FDC by Alan Cox (Etched Pixels) needs to be strapped
The RCBus FDC by Alan Cox (Etched Pixels) needs to be strapped
for base I/O address 0x48.
SmallZ80 does not have any relevant jumper settings. The
@@ -506,7 +506,7 @@ Improved polling version of read/write to fix occasional overrun errors.
WW 1/8/2018: v5.2
Added support for RC2014 hardware:
Added support for RCBus hardware:
- Scott Baker SMC 9266 FDC module
- Scott Baker WDC 37C65 FDC module

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,17 @@
;
;VERSION LIST - Most recent version first.
;
;21/Mar/23 - Previous hack was worthless because it broke
; the memory survey. Rehacked to use HBIOS to
; detect if N8VEM SBC MPCL memory management is
; in use and bypass MPCL ports if so. HBIOS check
; should allow use in non-RomWBW systems again.
; Wayne Warthen
;
;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 +245,7 @@ TABS EQU 9 ; Tab columns
; MAIN PROGRAM ;
;***********************;
;
ORG 100H
;ORG 100H
;
START:
LXI H,0 ; Save stack pointer
@@ -242,9 +253,39 @@ 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 (Mar 2023) ***'
DW CRLF,CRLFE
;
; Are we running an N8VEM SBC w/ MPCL on RomWBW???
;
.Z80
XOR A ; assume not
LD (ISMPCL),A ; save it
; Check for RomWBW (HBIOS)
LD HL,(0FFFEH) ; HL := HBIOS ident location
LD A,'W' ; First byte of ident
CP (HL) ; Compare
JR NZ,NOTMPCL ; Not HBIOS
INC HL ; Next byte of ident
LD A,NOT 'W' ; Second byte of ident
CP (HL) ; Compare
JR NZ,NOTMPCL ; Not HBIOS
;
LD B,0F1H ; HBIOS: VER function
LD C,0 ; required reserved value
RST 08 ; DE := version, L := platform id
LD A,L ; Platform ID
CP 01H ; SBC?
JR NZ,NOTMPCL ; Not SBC
LD A,0FFH ; Flag
LD (ISMPCL),A ; Set flag
;
.8080
;
NOTMPCL:
;
;DISK SURVEY
LXI H,8 ; Init drive counter
MVI C,24 ; Get login vector
@@ -426,20 +467,19 @@ MSURV:
ENDM
DB '|'
DW CRLF
db ' ' ; dmb 31-May-82
DB 'T'+EOL
DB 'TT','T'+EOL
LXI H,RAM
MVI M,LOW 1023 ; Init RAM counter
MVI M,LOW 2047 ; Init RAM counter
INX H
MVI M,HIGH 1023
MVI M,HIGH 2047
MVI B,4 ; Clear ROM, EMP
CLREG:
INX H
MVI M,0
DCR B
JNZ CLREG
LXI H,1024 ; Init memory pointer
MVI C,63 ; K to be checked
LXI H,2048 ; Init memory pointer
MVI C,62 ; K to be checked
;Start of analysis loop
BEGANA:
@@ -473,7 +513,7 @@ NOTEM:
INXI ROM
NEXT:
INX H ; Index next byte
DCX D ; Decrement K counter
DCX D ; DEC DE; Decrement K counter
XRA A
ORA D
ORA E
@@ -526,8 +566,19 @@ NEXTK:
; contents of first page
call type
db 'BIOS at',' '+eol
hexout bios+2
hexout bios+1
;hexout bios+2
;hexout bios+1
.z80
ld hl,(bios+1)
ld de,-3
add hl,de
push hl
ld a,h
call hexprn
pop hl
ld a,l
call hexprn
.8080
call type
db tab,'iobyte',' '+eol
hexout bios+3
@@ -536,8 +587,19 @@ NEXTK:
hexout bios+4
call type
db tab,'BDOS at',' '+eol
hexout bdos+2
hexout bdos+1
;hexout bdos+2
;hexout bdos+1
.z80
ld hl,(bdos+1)
ld de,-6
add hl,de
push hl
ld a,h
call hexprn
pop hl
ld a,l
call hexprn
.8080
call type
dw crlf,crlfe
;
@@ -553,6 +615,8 @@ NEXTK:
CALL TYPE
DB ' Bytes ROM',TAB,TAB+EOL
LHLD BDOS+1
LXI D,-6
DAD D
CALL BINDEC
CALL TYPE
DB ' Bytes in TPA'
@@ -586,6 +650,21 @@ PDLY:
MOV A,H ; ON CONSOLE STATUS PORT
ORA L
JNZ PDLY
;
.Z80
; 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 +675,83 @@ PORTLP:
CPI SKIPORT
JZ ISPORT ; Print mask port
ENDIF
;
.Z80
;
ld a,(ISMPCL) ; MPCL?
or a ; set flags
jr z,PCONT ; if not, skip ahead
ld a,d ; get port to test
and 0F8H ; range of 8 ports
cp 078H ; starting at 78H
jr z,ISPORT ; if in range, assume real port
;
PCONT:
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
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:
;
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 +853,6 @@ BITSHF:
JNZ BITSHF
RET
;***********************;
; DATA STORAGE ;
;***********************;
@@ -722,6 +866,9 @@ 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
IS180: DS 1 ; non-zero for Z180 CPU
ISMPCL: DS 1 ; non-zero for N8VEM SBC MPCL
FINIS EQU $ ; End of program
;
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 portscan && 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 portscan && call Clean || exit /b 1 & popd

File diff suppressed because it is too large Load Diff

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 portscan
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,563 @@
;===============================================================================
; 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
;
restart .equ $0000 ; CP/M restart vector
;
#include "../../../ver.inc"
;
#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 portscan.asm portscan.com portscan.lst || exit /b
copy /Y portscan.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 = portscan.com
DEST = ../../../../Binary/Apps/Test
TOOLS =../../../../Tools
USETASM=1
include $(TOOLS)/Makefile.inc
TASM=$(BINDIR)/uz80as -t hd64180

View File

@@ -0,0 +1,602 @@
;===============================================================================
; PORTSCAN - Sweep Ports
;
;===============================================================================
;
; Author: Wayne Warthen (wwarthen@gmail.com)
;_______________________________________________________________________________
;
; Usage:
; PORTSCAN
;
; 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
;
restart .equ $0000 ; CP/M restart vector
;
;
#include "../../../ver.inc"
;
#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 (pnum0),a ; modify IN instruction
nop ; defeat Z280 pipeline
nop
in a,($FF) ; read the port
pnum0 .equ $-1
ld (hl),a ; save it
inc hl ; bump value list pointer
jr portread1
;
portread_z180: ; use "IN0"
; read port using IN <portnum>
ld a,(curport) ; get current port
ld (pnum1),a ; modify IN instruction
in0 a,($FF) ; read the port
pnum1 .equ $-1
ld (hl),a ; save it
inc hl ; bump value list pointer
;
portread1:
; 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 "PORTSCAN v1.0, 16-Feb-2023",13,10
.db "Copyright (C) 2023, Wayne Warthen, GNU GPL v3",0
msguse .db "Usage: PORTSCAN",13,10
msgprm .db "Parameter error (PORTSCAN /? 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

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

View File

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

View File

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

@@ -0,0 +1,201 @@
;*****************************************************************************
;*****************************************************************************
;** **
;** AY-3-8910 Sound Test Program **
;** Author: Wayne Warthen -- 10/8/2017 **
;** **
;*****************************************************************************
;*****************************************************************************
;
;=============================================================================
; Constants Section
;=============================================================================
;
; Hardware port addresses
;
rsel .equ $9A ; Register seelection port address
rdat .equ $9B ; Register data port address
acr .equ $9C ; Aux control register port address
;
; CPU speed for delay scaling
;
cpuspd .equ 4 ; CPU speed in MHz
;
; BDOS invocation constants
;
bdos .equ $0005 ; BDOS invocation vector
print .equ 9 ; BDOS print function number
conwrt .equ 2 ; BDOS console write char
;
;=============================================================================
; Code Section
;=============================================================================
;
.org $100
;
ld (stksav),sp ; save incoming stack frame
ld sp,stack ; setup our private stack
;
ld de,banner ; load banner string address
ld c,print ; BDOS print function number
call bdos ; do it
;
ld a,$FF ; SCG board activation value
out (acr),a ; write value to ACR
;
xor a ; zero accum
ld (chan),a ; init channel number
;
chloop:
; Test each channel
call tstchan ; test the current channel
ld hl,chan ; point to channel number
ld a,(chan) ; get current channel
inc a ; bump to next
ld (chan),a ; save it
cp 3 ; end of channels?
jr nz,chloop ; loop if not done
;
ld de,crlf ; newline
ld c,print ; BDOS print function
call bdos ; do it
;
ld sp,(stksav) ; restore stack
;
ret ; end of program
;
tstchan:
; Display channel being tested
ld de,chmsg ; point to channel message
ld c,print ; BDOS print function number
call bdos ; do it
ld a,(chan) ; get current channel number
add a,'A' ; offset to print as alpha
ld e,a ; put in E
ld c,conwrt ; BDOS console out function number
call bdos ; do it
ld de,chmsg2 ; point to channel message
ld c,print ; BDOS print function number
call bdos ; do it
;
ld hl,0 ; initial pitch value
ld (pitch),hl ; save it
;
; Setup mixer register
ld a,(chan) ; get channel num (0-2)
inc a ; adjust index (1-3)
ld b,a ; and use as loop counter
xor a ; clear accum
scf ; set carry
mixloop:
rla ; rotate bit
djnz mixloop ; loop based on channel num
cpl ; invert bits
and $FF ; so only target bit is cleared
push af ; save value
ld a,7 ; mixer register
out (rsel),a ; select it
pop af ; recover value
out (rdat),a ; and set register value
;
; Set channel volume to max
ld a,(chan) ; get channel
add a,8 ; adjust for start of vol regs
out (rsel),a ; select register
ld a,$0F ; max volume
out (rdat),a ; write it
;
pitloop:
; Pitch loop
ld a,(chan) ; get channel
sla a ; A := channel pitch reg, 2 bytes per chan
out (rsel),a ; select low byte register
push af ; save register
ld a,l ; get low byte of pitch value
out (rdat),a ; and write it to register
pop af ; recover register index
inc a ; inc to high byte pitch register
out (rsel),a ; select high byte register
ld a,h ; get high byte of pitch value
out (rdat),a ; and write it to register
;
; Delay
ld b,cpuspd ; cpu speed scalar
dlyloop:
call dly64 ; arbitrary delay
djnz dlyloop ; loop based on cpu speed
;
; Next pitch value
ld hl,(pitch) ; get current pitch
inc hl ; increment
ld (pitch),hl ; save new value
ld a,h ; get high byte
;cp 16 ; end of max range?
cp 4 ; end of max range?
jr nz,pitloop ; loop till done
;
; Clean up
call clrpsg ; shut down psg
;
ret ; done
;
; Clear PSG registers to default
;
clrpsg:
ld b,16 ; loop for 18 registers
ld c,0 ; init register index
clrpsg1:
ld a,c ; register num to accum
out (rsel),a ; select it
xor a ; clear accum
out (rdat),a ; and write to register
inc c ; next register
djnz clrpsg1 ; loop through all registers
ret ; return
;
; Program PSG registers from list at HL
;
setpsg:
ld a,(hl) ; get psg reg number
inc hl ; bump index
cp $FF ; check for end
ret z ; return if end marker $FF
out (rsel),a ; select psg register
ld a,(hl) ; get register value
inc hl ; bump index
out (rdat),a ; set register value
jr setpsg ; loop till done
;
; 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
;
dly256: call dly128
dly128: call dly64
dly64: call dly32
dly32: call dly16
dly16: call dly8
dly8: call dly4
dly4: call dly2
dly2: call dly1
dly1: ret
;
;=============================================================================
; Data Section
;=============================================================================
;
chan .db 0 ; active audio channel
pitch .dw 0 ; current pitch
;
banner .text "\r\nRetroBrew Computers SCG AY-3-8910 Sound Test\r\n"
.text "Set SCG board base I/O address to 0x98\r\n$"
chmsg .text "\r\nPlaying descending tones on channel $"
chmsg2 .text "...$"
crlf .text "\r\n$"
;
stksav .dw 0 ; saved stack frame
.fill 80,$FF ; 40 level private stack
stack .equ $ ; start of stack
;
.end

View File

@@ -1,8 +1,5 @@
IDENT .EQU $FFFE ; loc of RomWBW HBIOS ident ptr
;
RMJ .EQU 3 ; intended CBIOS version - major
RMN .EQU 1 ; intended CBIOS version - minor
;
BF_SYSVER .EQU $F1 ; BIOS: VER function
BF_SYSGET .EQU $F8 ; HBIOS: SYSGET function
;

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

@@ -45,6 +45,7 @@
; 2021-08-13 [WBW] Add support for LiNC Z50 Sound Card
; 2021-08-17 [WBW] When playing via HBIOS, call BF_SNDRESET at end
; 2022-03-20 [DDW] Add support for MBC PSG module
; 2023-03-30 [WBW] Fix for quark delay adjustment being trashed
;_______________________________________________________________________________
;
; ToDo:
@@ -55,6 +56,7 @@
; Main program
;===============================================================================
;
#include "../../ver.inc"
#include "hbios.inc"
#include "cpm.inc"
#include "tune.inc"
@@ -300,6 +302,11 @@ GOPT3 LD A,0 ; SETUP value to PT3 sound files
JR GOPTX ; Play PTx file
GOPTX
LD HL,(QDLY) ; Get basic quark delay
OR A ; Clear carry
SBC HL,DE ; Adjust for file type
LD (QDLY),HL ; Save updated quark delay factor
CALL CRLF2
LD DE, MSGSONGNAME ; Print song name message
CALL PRTSTR
@@ -321,10 +328,6 @@ GOPTX2 LD A,(DE)
CALL CRLF2 ; Formatting
LD DE,MSGPLY ; Playing message
CALL PRTSTR ; Print message
LD HL,(QDLY) ; Get basic quark delay
OR A ; Clear carry
SBC HL,DE ; Adjust for file type
LD (QDLY),HL ; Save updated quark delay factor
CALL START ; Do initialization
PTXLP CALL START+5 ; Play one quark
LD A,(START+10) ; Get setup byte
@@ -654,8 +657,8 @@ TMP .DB 0 ; work around use of undocumented Z80
HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE
OCTAVEADJ .DB 0 ; AMOUNT TO ADJUST OCTAVE UP OR DOWN
MSGBAN .DB "Tune Player for RomWBW v3.5, 20-Mar-2022",0
MSGUSE .DB "Copyright (C) 2021, Wayne Warthen, GNU GPL v3",13,10
MSGBAN .DB "Tune Player for RomWBW v3.5a, 30-Mar-2023",0
MSGUSE .DB "Copyright (C) 2023, Wayne Warthen, GNU GPL v3",13,10
.DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10
.DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM] [--hbios] [+tn|-tn]",0
@@ -674,9 +677,9 @@ MSGERR .DB "App Error", 0
;
HWSTR_SCG .DB "SCG ECB Board",0
HWSTR_N8 .DB "N8 Onboard Sound",0
HWSTR_RCEB .DB "RC2014 Sound Module (EB)",0
HWSTR_RCEB6 .DB "RC2014 Sound Module (EBv6)",0
HWSTR_RCMF .DB "RC2014 Sound Module (MF)",0
HWSTR_RCEB .DB "RCBus Sound Module (EB)",0
HWSTR_RCEB6 .DB "RCBus Sound Module (EBv6)",0
HWSTR_RCMF .DB "RCBus Sound Module (MF)",0
HWSTR_LINC .DB "Z50 LiNC Sound Module",0
HWSTR_MBC .DB "NHYODYNE Sound Module",0

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.

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,72 @@ 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,YM2151 2xSN76489) board.
It can be configured to run with other hardware such as RCBus, 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
SURE.VGM - YM2151 - Martial Age: Sure?? : 36K
SABERDAN.VGM - YM2151 - Road Runner: Sabre Dance (Attract Mode - Stage 4) : 28K
* Included in disk images
Original Source by J.B Langston, Marco Maccaferri
ROMWBW + YM2612/YM3484 version by Phil Summers
VGM sources
===========
https://www.smspower.org/forums/15359-VGMPacksGameGearMegaCollection
https://vgmrips.net/packs/chip/ym2612
https://vgmrips.net/packs/chip/ym2151
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 RCBus 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 RCBus & 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

@@ -4,7 +4,7 @@
;
; Wayne Warthen - wwarthen@gmail.com
;
; 2018-06-06 WBW Added support for RC2014 w/ Z180
; 2018-06-06 WBW Added support for RCBus w/ Z180
; 2019-08-17 WBW Refactored and merged Phil's ECB-FIFO support
; 2019-08-28 WBW Refactored ASCI support
;
@@ -575,7 +575,7 @@ A_SPEED:
;=======================================================================
;
; Currently assumes the port address and ordering conventions of the
; official RC2014 SIO module. Will not work with others such as EZZ80
; official RCBus SIO module. Will not work with others such as EZZ80
; or ZP.
;
; SIO port constants

View File

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

View File

@@ -10,6 +10,8 @@
;
#include "../../HBIOS/hbios.inc"
;
#include "../../ver.inc"
;
; General operational equates (should not requre adjustment)
;
stksiz .equ $40 ; Working stack size
@@ -23,9 +25,6 @@ bdos .equ $0005 ; BDOS invocation vector
;
ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr
;
rmj .equ 3 ; intended CBIOS version - major
rmn .equ 1 ; intended CBIOS version - minor
;
;=======================================================================
;
.org $100 ; standard CP/M executable
@@ -192,7 +191,7 @@ show_spd:
rst 08
jp nz,err_not_sup
call crlf2
push de ; save CPU speed for now
ld (cpu_spd),de ; save CPU speed for now
push bc ; Oscillator speed to HL
pop hl
ld de,str_spacer
@@ -204,7 +203,7 @@ show_spd:
ld c,BF_SYSGET_CPUSPD
rst 08
jp nz,err_not_sup
push de
push de ; save wait states for now
ld a,l
ld de,str_slow
cp 0
@@ -219,9 +218,7 @@ show_spd:
show_spd1:
call crlf
call prtstr
pop bc ; recover wait states
pop hl ; recover CPU speed
push bc ; resave wait states
ld hl,(cpu_spd) ; recover CPU speed
call prtd3m
ld de,str_cpuspd
call prtstr
@@ -696,6 +693,7 @@ stack .equ $ ; stack top
;
;
tmpstr .fill 9,0 ; temp string (8 chars, 0 term)
cpu_spd .dw 0 ; current cpu speed
new_cpu_spd .db $FF ; new CPU speed
new_ws_mem .db $FF ; new memory wait states
new_ws_io .db $FF ; new I/O wait states

View File

@@ -37,6 +37,8 @@
; 1) Implement flow control settings
;_______________________________________________________________________________
;
#include "../ver.inc"
;
;===============================================================================
; Definitions
;===============================================================================
@@ -48,9 +50,6 @@ bdos .equ $0005 ; BDOS invocation vector
;
ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr
;
rmj .equ 3 ; intended CBIOS version - major
rmn .equ 1 ; intended CBIOS version - minor
;
bf_cioinit .equ $04 ; HBIOS: CIOINIT function
bf_cioquery .equ $05 ; HBIOS: CIOQUERY function
bf_ciodevice .equ $06 ; HBIOS: CIODEVICE function

View File

@@ -19,7 +19,7 @@
;
;[2018/11/8] v1.2 PMS Add boot option. Code optimization.
;
;[2019/06/21] v1.3 Finalized RC2014 Z180 support.
;[2019/06/21] v1.3 Finalized RCBus Z180 support.
;
;[2019/08/11] v1.4 Support SCZ180 platform.
;
@@ -29,6 +29,8 @@
;
;[2021/07/10] v1.7 Support MBC (AJL)
;
;[2022/03/27] v1.8 Support RHYOPHYRE
;
; Constants
;
mask_data .EQU %10000000 ; RTC data line
@@ -39,13 +41,14 @@ mask_rst .EQU %00010000 ; De-activate RTC reset line
PORT_SBC .EQU $70 ; RTC port for SBC/ZETA
PORT_N8 .EQU $88 ; RTC port for N8
PORT_MK4 .EQU $8A ; RTC port for MK4
PORT_RCZ80 .EQU $C0 ; RTC port for RC2014
PORT_RCZ180 .EQU $0C ; RTC port for RC2014
PORT_RCZ80 .EQU $C0 ; RTC port for RCBus
PORT_RCZ180 .EQU $0C ; RTC port for RCBus
PORT_EZZ80 .EQU $C0 ; RTC port for EZZ80 (actually does not have one!!!)
PORT_SCZ180 .EQU $0C ; RTC port for SCZ180
PORT_DYNO .EQU $0C ; RTC port for DYNO
PORT_RCZ280 .EQU $C0 ; RTC port for RCZ280
PORT_MBC .EQU $70 ; RTC port for MBC
PORT_RPH .EQU $84 ; RTC port for RHYOPHYRE
BDOS .EQU 5 ; BDOS invocation vector
@@ -1094,12 +1097,12 @@ HINIT:
;
LD C,PORT_RCZ80
LD DE,PLT_RCZ80
CP $07 ; RC2014 w/ Z80
CP $07 ; RCBus w/ Z80
JR Z,RTC_INIT2
;
LD C,PORT_RCZ180
LD DE,PLT_RCZ180
CP $08 ; RC2014 w/ Z180
CP $08 ; RCBus w/ Z180
JR Z,RTC_INIT2
;
LD C,PORT_EZZ80
@@ -1126,6 +1129,11 @@ HINIT:
LD DE,PLT_MBC
CP 13 ; MBC
JR Z,RTC_INIT2
;
LD C,PORT_RPH
LD DE,PLT_RPH
CP 14 ; RHYOPHYRE
JR Z,RTC_INIT2
;
; Unknown platform
LD DE,PLTERR ; BIOS error message
@@ -1622,7 +1630,7 @@ TESTING_BIT_DELAY_OVER:
RTC_HELP_MSG:
.DB 0Ah, 0Dh ; line feed and carriage return
.TEXT "RTC: Version 1.7"
.TEXT "RTC: Version 1.8"
.DB 0Ah, 0Dh ; line feed and carriage return
.TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot W)arm-start H)elp"
.DB 0Ah, 0Dh ; line feed and carriage return
@@ -1744,13 +1752,14 @@ BOOTMSG .TEXT "\r\n\r\nRebooting...$"
PLT_SBC .TEXT ", SBC/Zeta RTC Latch Port 0x70\r\n$"
PLT_N8 .TEXT ", N8 RTC Latch Port 0x88\r\n$"
PLT_MK4 .TEXT ", Mark 4 RTC Latch Port 0x8A\r\n$"
PLT_RCZ80 .TEXT ", RC2014 Z80 RTC Module Latch Port 0xC0\r\n$"
PLT_RCZ180 .TEXT ", RC2014 Z180 RTC Module Latch Port 0x0C\r\n$"
PLT_RCZ80 .TEXT ", RCBus Z80 RTC Module Latch Port 0xC0\r\n$"
PLT_RCZ180 .TEXT ", RCBus Z180 RTC Module Latch Port 0x0C\r\n$"
PLT_EZZ80 .TEXT ", Easy Z80 RTC Module Latch Port 0xC0\r\n$"
PLT_SCZ180 .TEXT ", SC Z180 RTC Module Latch Port 0x0C\r\n$"
PLT_DYNO .TEXT ", DYNO RTC Module Latch Port 0x0C\r\n$"
PLT_RCZ280 .TEXT ", RC2014 Z280 RTC Module Latch Port 0xC0\r\n$"
PLT_RCZ280 .TEXT ", RCBus Z280 RTC Module Latch Port 0xC0\r\n$"
PLT_MBC .TEXT ", MBC RTC Latch Port 0x70\r\n$"
PLT_RPH .TEXT ", RHYOPHYRE RTC Latch Port 0x84\r\n$"
;
; Generic FOR-NEXT loop algorithm

View File

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

View File

@@ -25,6 +25,8 @@
; ToDo:
;_______________________________________________________________________________
;
#include "../ver.inc"
;
;===============================================================================
; Definitions
;===============================================================================
@@ -36,9 +38,6 @@ bdos .equ $0005 ; BDOS invocation vector
;
ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr
;
rmj .equ 3 ; intended CBIOS version - major
rmn .equ 1 ; intended CBIOS version - minor
;
bf_sysver .equ $F1 ; BIOS: VER function
bf_sysget .equ $F8 ; HBIOS: SYSGET function
bf_sysset .equ $F9 ; HBIOS: SYSGET function

View File

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

View File

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

View File

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

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