mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Compare commits
323 Commits
v3.1.1-pre
...
v3.5.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
61565bffd7 | ||
|
|
0bac6f32ea | ||
|
|
462545bfe7 | ||
|
|
cc4ad0d4b9 | ||
|
|
458b04404e | ||
|
|
4143cfa4cf | ||
|
|
438e59a05e | ||
|
|
7385d07b9a | ||
|
|
5bea1f400e | ||
|
|
1a9701e51d | ||
|
|
23e0b82112 | ||
|
|
b4b5ef19fc | ||
|
|
4dd46c3df6 | ||
|
|
17e3a95768 | ||
|
|
3529cdaa2f | ||
|
|
556b7074ae | ||
|
|
952489eac4 | ||
|
|
8f326fb081 | ||
|
|
2925ab3d42 | ||
|
|
cdb9f9b40a | ||
|
|
def84eded9 | ||
|
|
d89e055f18 | ||
|
|
62f9330de8 | ||
|
|
374ed7ab97 | ||
|
|
c7bee46f60 | ||
|
|
e9b9782ede | ||
|
|
af00df9182 | ||
|
|
e286a428bf | ||
|
|
f2fc049f07 | ||
|
|
d8a485a5fb | ||
|
|
ed53030de2 | ||
|
|
4b88986de8 | ||
|
|
3df34b4ce0 | ||
|
|
f230fb22da | ||
|
|
2225847212 | ||
|
|
edbe7d0781 | ||
|
|
1d3438fb29 | ||
|
|
a5de77438b | ||
|
|
b841705023 | ||
|
|
72cdbdd4ad | ||
|
|
b8ef50fad5 | ||
|
|
c7d22892c1 | ||
|
|
8b3deb057f | ||
|
|
df42cf544e | ||
|
|
55a41ec0a3 | ||
|
|
4417f871e5 | ||
|
|
1c10f734bd | ||
|
|
214182b514 | ||
|
|
08942fb944 | ||
|
|
5dc724785b | ||
|
|
ce17be9ba6 | ||
|
|
badca621ba | ||
|
|
291cdd2c03 | ||
|
|
888d9879c9 | ||
|
|
39446d5e4f | ||
|
|
af8385fba8 | ||
|
|
10ff97b6c6 | ||
|
|
7e9191f3ef | ||
|
|
a67b1ecd0a | ||
|
|
4012ee7775 | ||
|
|
150ca6b50c | ||
|
|
6af84e9ad8 | ||
|
|
6bcad122cd | ||
|
|
003481410f | ||
|
|
9a1c3f7929 | ||
|
|
ef536750ea | ||
|
|
347a15a3b6 | ||
|
|
1e5b38c251 | ||
|
|
29f93fb153 | ||
|
|
b0975745df | ||
|
|
163460856a | ||
|
|
3ce9246904 | ||
|
|
1a021e02b9 | ||
|
|
f2d304ef0d | ||
|
|
cbfbca8d92 | ||
|
|
b175808a92 | ||
|
|
3e86e79133 | ||
|
|
3247e67ed4 | ||
|
|
bbc84f0c2d | ||
|
|
872d51e9b6 | ||
|
|
b41f189a4c | ||
|
|
25fb2bd59e | ||
|
|
76867b8351 | ||
|
|
43745f8c90 | ||
|
|
ed4daf06a4 | ||
|
|
14cc41c3c4 | ||
|
|
0598d921bc | ||
|
|
93dcfe9610 | ||
|
|
d98547dea3 | ||
|
|
a157d9ba13 | ||
|
|
85783148be | ||
|
|
7bd930bc76 | ||
|
|
c1fa7b420a | ||
|
|
9072bc6d70 | ||
|
|
480dbe4f4c | ||
|
|
26fad23c3a | ||
|
|
883dab7e97 | ||
|
|
d3f5643791 | ||
|
|
5299d24379 | ||
|
|
a229db96a6 | ||
|
|
092e44c62e | ||
|
|
722bce819b | ||
|
|
2d470a2a90 | ||
|
|
b6700dfa4c | ||
|
|
cfc76d0659 | ||
|
|
7fce3277a0 | ||
|
|
2219e4c82d | ||
|
|
68e841e62c | ||
|
|
bb70c36b36 | ||
|
|
c391fd6d56 | ||
|
|
e69caf5059 | ||
|
|
8b7e71049b | ||
|
|
50e190c755 | ||
|
|
d0eccf026b | ||
|
|
39f796ce22 | ||
|
|
5610e79db4 | ||
|
|
e782b78b16 | ||
|
|
c0d3969244 | ||
|
|
c62af3df33 | ||
|
|
6d736996fd | ||
|
|
8bc801d0a4 | ||
|
|
2c6b7f7fb1 | ||
|
|
c3503f56d1 | ||
|
|
d4c87996f0 | ||
|
|
9f5b3a8b1c | ||
|
|
d06e1e2a5c | ||
|
|
22a0c52af3 | ||
|
|
85aa7e89c2 | ||
|
|
59d04f2446 | ||
|
|
9cc52e30d6 | ||
|
|
e1a4e815dc | ||
|
|
3c340d1ab9 | ||
|
|
138248fafc | ||
|
|
834eefb0bb | ||
|
|
7835eb5deb | ||
|
|
d1a5c66147 | ||
|
|
b184ccfb78 | ||
|
|
4776b32cd3 | ||
|
|
2bc5333f2b | ||
|
|
a5575456e2 | ||
|
|
bdb8dc020b | ||
|
|
faaba69554 | ||
|
|
0395bba4f5 | ||
|
|
14ac7a917b | ||
|
|
7a209d4053 | ||
|
|
7e5b140c2f | ||
|
|
1f1952fb19 | ||
|
|
229bdaa308 | ||
|
|
5c0894b8c1 | ||
|
|
9cefcfb0bc | ||
|
|
5d34a5c5d5 | ||
|
|
f8c800e527 | ||
|
|
b90e4d932a | ||
|
|
5457a7e7fd | ||
|
|
8f5cc510ee | ||
|
|
0475f5e853 | ||
|
|
5b7dee0689 | ||
|
|
6532f61747 | ||
|
|
4bdae4eccb | ||
|
|
efb9840b86 | ||
|
|
308a11cb32 | ||
|
|
3a7421de33 | ||
|
|
21a58397b6 | ||
|
|
9ae61806dc | ||
|
|
87ac6f07f8 | ||
|
|
1cd5313259 | ||
|
|
04c1ff04ac | ||
|
|
0e1a0afa2c | ||
|
|
5227bb68b5 | ||
|
|
fb68941768 | ||
|
|
8747ec8d02 | ||
|
|
abd939625f | ||
|
|
69716abb25 | ||
|
|
1f526d440a | ||
|
|
84374c86e6 | ||
|
|
45ea46b105 | ||
|
|
1333d6a491 | ||
|
|
b7e865dbf1 | ||
|
|
1c411f5552 | ||
|
|
364e48a5d3 | ||
|
|
63cb89dcfc | ||
|
|
6e316b46f0 | ||
|
|
3f23396536 | ||
|
|
c628ba10f2 | ||
|
|
9358299f14 | ||
|
|
d445c4a015 | ||
|
|
e32002545b | ||
|
|
7ac88efac1 | ||
|
|
9f71fe05aa | ||
|
|
ad3c533145 | ||
|
|
e43a939f54 | ||
|
|
e5b7409f44 | ||
|
|
9100f199b1 | ||
|
|
bcc50a31a9 | ||
|
|
c891ba2bad | ||
|
|
2f9e77ca13 | ||
|
|
f346209c82 | ||
|
|
0742fb6188 | ||
|
|
94239866a5 | ||
|
|
2681b84a20 | ||
|
|
b5437c56e9 | ||
|
|
f640630a06 | ||
|
|
53e201bd28 | ||
|
|
51d962aeab | ||
|
|
5f36cf9a12 | ||
|
|
d812066f2e | ||
|
|
7563863be2 | ||
|
|
9654d487ba | ||
|
|
5b339aef3e | ||
|
|
47a7d81bb9 | ||
|
|
a92c44e53f | ||
|
|
cc9f5dd516 | ||
|
|
6e34de0e02 | ||
|
|
5a6d7f853b | ||
|
|
a646f49866 | ||
|
|
98a33b8b50 | ||
|
|
8aebaab3fe | ||
|
|
798d8c3ea3 | ||
|
|
bbaf2b0714 | ||
|
|
74a8283bba | ||
|
|
e869e55252 | ||
|
|
e8a76817dc | ||
|
|
e839c77844 | ||
|
|
ada7254b84 | ||
|
|
cd96ea7e26 | ||
|
|
0098540cc9 | ||
|
|
b3e7e2ff62 | ||
|
|
582937de8e | ||
|
|
5f5953edd8 | ||
|
|
50cd6ff955 | ||
|
|
82c53bd20b | ||
|
|
0d0f5fb182 | ||
|
|
3773c9c7fa | ||
|
|
b7dc67b9c7 | ||
|
|
76c4209a5e | ||
|
|
76d9a99758 | ||
|
|
1db858027e | ||
|
|
d3fb3710ff | ||
|
|
170cecd112 | ||
|
|
f469699449 | ||
|
|
c4ff7315c9 | ||
|
|
ddbd338b6f | ||
|
|
77c6f934dc | ||
|
|
f72bf4e4c5 | ||
|
|
dcc6bd2b62 | ||
|
|
01fac79902 | ||
|
|
70d3f54834 | ||
|
|
650dcdb35f | ||
|
|
b27e14826a | ||
|
|
d2b9333288 | ||
|
|
cbd60d02d9 | ||
|
|
93a1eade2a | ||
|
|
5073a9c506 | ||
|
|
86f8df03b6 | ||
|
|
a7ef76b9c4 | ||
|
|
0a6719cf24 | ||
|
|
0b0f68d579 | ||
|
|
c2d58ebe3a | ||
|
|
894898a75d | ||
|
|
5da1f70b6c | ||
|
|
15e90c628a | ||
|
|
bc0d1ed5e8 | ||
|
|
fa12858bd3 | ||
|
|
2f733ff1aa | ||
|
|
ee0369c553 | ||
|
|
d17f531d19 | ||
|
|
0c4400920c | ||
|
|
15b2dcb6b6 | ||
|
|
39f51a9620 | ||
|
|
632cc0e7db | ||
|
|
f5cb22da8f | ||
|
|
7f186df54d | ||
|
|
590f5cff9a | ||
|
|
e6908ee259 | ||
|
|
5b7ca9d9e6 | ||
|
|
93ac0ba5d0 | ||
|
|
5d3c1e2d4a | ||
|
|
f080f5b80a | ||
|
|
f1382b75ec | ||
|
|
d175981c71 | ||
|
|
5e42066874 | ||
|
|
52a41663eb | ||
|
|
f0183bdd8a | ||
|
|
2398805617 | ||
|
|
08168681b6 | ||
|
|
fa3874ec45 | ||
|
|
fc634380b0 | ||
|
|
6b84dd36b0 | ||
|
|
93245434c0 | ||
|
|
06913144f8 | ||
|
|
04947015aa | ||
|
|
e7ab778929 | ||
|
|
147ab2ce4c | ||
|
|
af2a025cff | ||
|
|
2da5ba80ba | ||
|
|
d4700d0cdd | ||
|
|
e2426eff08 | ||
|
|
2b16617ea3 | ||
|
|
816234f0fa | ||
|
|
d960efdc4d | ||
|
|
29c7f3a920 | ||
|
|
3a8a503c8e | ||
|
|
975656ef6f | ||
|
|
00158b0107 | ||
|
|
979276e0b5 | ||
|
|
8656cf992e | ||
|
|
6dac01102d | ||
|
|
a9173c076b | ||
|
|
8ffe53ea68 | ||
|
|
83ff343186 | ||
|
|
c51963529d | ||
|
|
834f2d7682 | ||
|
|
ec5b19acad | ||
|
|
3603ef9c9d | ||
|
|
3aed60afe2 | ||
|
|
e1e2c2efa9 | ||
|
|
55b4e1e26d | ||
|
|
cb336c9ba5 | ||
|
|
ad0a6af047 | ||
|
|
22afb8333c | ||
|
|
25382b01e2 | ||
|
|
d55587e341 | ||
|
|
7d9ff0599b |
11
.github/pull_request_template.md
vendored
Normal file
11
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<!--
|
||||
BEFORE YOU CREATE A PULL REQUEST:
|
||||
|
||||
- Please base all pull requests against the master branch
|
||||
- Include a clear description of your change
|
||||
- Reference related Issue(s) (e.g., "Resolves Issue #123")
|
||||
|
||||
Thank you for contributing to RomWBW! I will review your pull request as soon as possible.
|
||||
|
||||
DELETE EVERYTHING IN THIS COMMENT BLOCK AND REPLACE WITH YOUR COMMENTS
|
||||
-->
|
||||
50
.github/workflows/commit.yml
vendored
50
.github/workflows/commit.yml
vendored
@@ -3,10 +3,9 @@ name: Commit Build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- dev
|
||||
- '**'
|
||||
tags-ignore:
|
||||
- v*
|
||||
- '**'
|
||||
|
||||
jobs:
|
||||
buildLinux:
|
||||
@@ -14,16 +13,20 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: rlespinasse/github-slug-action@v4.4.0
|
||||
|
||||
- uses: actions/checkout@v3.1.0
|
||||
- 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 distlog
|
||||
rm -rf .git*
|
||||
|
||||
- name: List Output
|
||||
@@ -35,34 +38,27 @@ jobs:
|
||||
- name: Upload Artifact
|
||||
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: wwarthen/actions/packages/automatic-releases@built-packages
|
||||
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-12
|
||||
runs-on: macOS-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3.1.0
|
||||
- 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 distlog
|
||||
rm -rf .git*
|
||||
|
||||
- name: List Output
|
||||
@@ -74,5 +70,5 @@ jobs:
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
with:
|
||||
name: RomWBW_MacOS
|
||||
name: RomWBW-${{env.COMMIT_REF}}-MacOS
|
||||
path: .
|
||||
|
||||
123
.github/workflows/release.yml
vendored
123
.github/workflows/release.yml
vendored
@@ -1,8 +1,9 @@
|
||||
name: Release Build
|
||||
|
||||
on:
|
||||
release:
|
||||
types: published
|
||||
push:
|
||||
tags:
|
||||
- '**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -10,41 +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
|
||||
make dist
|
||||
sudo apt-get install srecord
|
||||
make distlog
|
||||
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
5
.gitignore
vendored
@@ -95,8 +95,9 @@ Tools/unix/zx/zx
|
||||
!Source/ZPM3/*.[Cc][Oo][Mm]
|
||||
!Source/ZSDOS/*.[Cc][Oo][Mm]
|
||||
!Source/ZRC/*.bin
|
||||
!Source/ZZRC/*.bin
|
||||
!Source/ZZRC/*.hex
|
||||
!Source/ZRC512/*.bin
|
||||
!Source/Z1RCC/*.bin
|
||||
!Source/ZZRCC/*.bin
|
||||
!Tools/cpm/**
|
||||
!Tools/unix/zx/*
|
||||
!Tools/zx/*
|
||||
|
||||
@@ -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)
|
||||
@@ -39,8 +39,8 @@ image for the Mark IV with the standard configuration. If a custom
|
||||
configuration called "custom" is created and built, a new file called
|
||||
MK4_custom.rom will be added to this directory.
|
||||
|
||||
Documentation of the pre-built ROM Images is contained in the
|
||||
RomList.txt file in this directory.
|
||||
Documentation of the pre-built ROM Images is contained in
|
||||
"RomWBW User Guide.pdf" in the Doc directory.
|
||||
|
||||
ROM Firmware Update Images (<plt>_<cfg>.upd)
|
||||
-------------------------------------
|
||||
@@ -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)
|
||||
---------------------------------------
|
||||
|
||||
42
CONTRIBUTING.md
Normal file
42
CONTRIBUTING.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Contributing to RomWBW
|
||||
|
||||
> **WARNING**: The `dev` branch of RomWBW has been deprecated as of v3.4. All Pull Requests should now target the `master` branch.
|
||||
|
||||
Contributions of all kinds to RomWBW are welcomed and greatly appreciated.
|
||||
|
||||
- Reporting bug(s) and suggesting new feature(s)
|
||||
- Discussing the current state of the code
|
||||
- Submitting a fixes and enhancements
|
||||
|
||||
## RomWBW GitHub Repository
|
||||
|
||||
The [RomWBW GitHub Repository](https://github.com/wwarthen/RomWBW) is the primary location for developing, supporting, and distributing RomWBW. Although input is gladly accepted from almost any channel, the GitHub Repository is preferred.
|
||||
|
||||
- Use **Issues** to report bugs, request enhancements, or ask usage questions.
|
||||
- Use **Discussions** to interact with others
|
||||
- Use **Pull Requests** to submit content (code, documentation, etc.)
|
||||
|
||||
## Submitting Content
|
||||
|
||||
This RomWBW Project uses the standard [GitHub Flow](https://docs.github.com/en/get-started/quickstart/github-flow). Submission of content changes (including code) are ideally done via Pull Requests.
|
||||
|
||||
- Submitters are advised to contact [Wayne Warthen](mailto:wwarthen@gmail.com) or start a GitHub Discussion prior to starting any significant work. This is simply to ensure that submissions are consistent
|
||||
with the overall goals and intentions of RomWBW.
|
||||
- All submissions should be based on the `master` branch. To create your submission, fork the RomWBW repository and create your branch from `master`. Make (and test) your changes in your personal fork.
|
||||
- Please update relevant documentation and the `ChangeLog` found in the `Doc` folder.
|
||||
- You are encouraged to comment your submissions to ensure your work is properly attributed.
|
||||
- When ready, submit a Pull Request to merge your forked branch into the RomWBW master branch.
|
||||
|
||||
## Coding Style
|
||||
|
||||
Due to the nature of the project, you will find a variety of coding styles. When making changes to existing code, please try to be consistent with the existing coding style. You may not like the current style, but no one likes mixed styles
|
||||
in one file/module.
|
||||
|
||||
Be careful with white space. RomWBW is primarily assembly langauge code. The use of tab stops at every 8 characters is pretty standard for assembler. If you use something else, then your code will look odd when viewed by others.
|
||||
|
||||
In most cases, the use of `<cr><lf>` line endings is preferred. This is standard for the operating systems of the era that RomWBW provides. Also note that CP/M text files should end with a ctrl-Z (0x1A). This is not magically added by the
|
||||
tools that generate the disk images.
|
||||
|
||||
## License
|
||||
|
||||
RomWBW is licensed under GPLv3. When you submit code changes, your submissions are understood to be under the same [GPLv3 License](https://www.gnu.org/licenses/gpl-3.0.html) that covers the project.
|
||||
BIN
Doc/Aztec_C_1.06_User_Manual_Mar84.pdf
Normal file
BIN
Doc/Aztec_C_1.06_User_Manual_Mar84.pdf
Normal file
Binary file not shown.
@@ -1,3 +1,79 @@
|
||||
Version 3.4
|
||||
-----------
|
||||
NOTE: Changes require HBIOS/CBIOS/Apps sync, version bump to 3.4 to ensure integrity
|
||||
- WBW: Device type number moved from upper nibble to full byte
|
||||
- A?C: Support for EP ITX-Mini Z180 Platform
|
||||
- M?R: Significant improvement in User Guide document
|
||||
- J?P: Preliminary support for Monsputer (MON)
|
||||
- JLC: Standardize TMS driver memory map for compatibility
|
||||
- WBW: Improved IDE device detection
|
||||
- WBW: Fixed decompression when run on Z280
|
||||
- K?B: WDATE generic HBIOS date/time utility
|
||||
- WBW: Create new DSKY framework with simple driver style interface
|
||||
- JBL: Added ColecoVision config in TMS driver
|
||||
- WBW: Added support for interrupt mode 1 on Z180
|
||||
- WBW: Added S100 platform
|
||||
- WBW: Added Duodyne platform
|
||||
- WBW: Incorporated John Monahan's S100 Monitor in S100 platform build
|
||||
- WBW: Support ESP32 on Duodyne
|
||||
- M?C: Fixed port specification when using XM.COM send transfers
|
||||
- PMS: Support for Duodyne DMA
|
||||
- WBW: Added Serial ROM (SROM.COM) utility
|
||||
- WBW: Support S100 Propeller Console
|
||||
- SCC: Added support for SC700
|
||||
- WBW: Added Heath H8 platform
|
||||
- D?J: Enhanced build to run on Raspberry Pi 4
|
||||
- WBW: Complete overhaul of ROMless boot operation
|
||||
- WBW: Prevent access to slices outside of partition
|
||||
- T?P: Contributed the HTALK utility
|
||||
- WBW: CTS stall detection
|
||||
- W?S: Updated FLASH utility to v1.3.7
|
||||
- L?N: Updated UNARC to new OS universal version
|
||||
- B?C: Added support for Z1RCC
|
||||
- M?R: User Guide enhancements and corrections
|
||||
- D?H: Added support for specification of secondary console
|
||||
- WBW: Added platform for Monsputer
|
||||
- WBW: Added FAT.COM to standard ROM Disk (removed RMAC.COM & LINK.COM)
|
||||
|
||||
Version 3.3
|
||||
-----------
|
||||
NOTE: v3.3 was never released
|
||||
- WBW: Support Front Panel switches
|
||||
- A?C: Preliminary support for Z80-Retro
|
||||
- A?C: Support for SD PIO
|
||||
- A?C: Support for Z80-Retro SD interface
|
||||
- WBW: Support per-drive floppy configuration
|
||||
- WBW: Support for Bill Shen's VGARC
|
||||
- WBW: Support for MG014 Parallel Port module + printer
|
||||
- WBW: Support for IMM Zip Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for PPA Zip Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for SyQuest SparQ Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for ATAPI Disk Drives (not CD-ROMs) on IDE and PPIDE interfaces
|
||||
- R?P: Added new disk images: Aztec C, MS BASIC Compiler, MS Fortran, Games, HiTech-C, Turbo Pascal, SLR Z80ASM
|
||||
- JBL: Added RCZ80 configuration for ColecoVision
|
||||
- WBW: Support for Z180 running interrupt mode 1
|
||||
- WBW: Preliminary support for S100 Computers Z180
|
||||
- WBW: Preliminary support for Dan Werner's ESP32 MBC Module
|
||||
- WBW: Early support for Duodyne base system (CPU/UART/ROM/RAM/RTC/SPK)
|
||||
- M?C: Fixed XM to allow specifying HBIOS port for send operations
|
||||
- WBW: Fix S100 Z180 LED operation (credit to Jay Cotton for finding this issue)
|
||||
- WBW: QPM system image is now combined with current CBIOS during build
|
||||
- WBW: Added framework for Heath platform
|
||||
- WBW: Support for USB Disks via CH375/CH376
|
||||
- D?J: Support for Raspberry Pi build process
|
||||
|
||||
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 +85,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
|
||||
@@ -75,7 +151,7 @@ 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
|
||||
@@ -113,8 +189,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
|
||||
@@ -133,7 +209,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
|
||||
@@ -161,7 +237,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
|
||||
@@ -171,7 +247,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
|
||||
@@ -189,26 +265,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)
|
||||
|
||||
11351
Doc/HI-TECH Z80 C Compiler Manual.txt
Normal file
11351
Doc/HI-TECH Z80 C Compiler Manual.txt
Normal file
File diff suppressed because it is too large
Load Diff
4090
Doc/Microsoft_FORTRAN-80_Users_Manual_1977.pdf
Normal file
4090
Doc/Microsoft_FORTRAN-80_Users_Manual_1977.pdf
Normal file
File diff suppressed because one or more lines are too long
131
Doc/ReadMe.txt
131
Doc/ReadMe.txt
@@ -6,17 +6,37 @@
|
||||
*** ***
|
||||
***********************************************************************
|
||||
|
||||
This directory ("Doc") is part of the RomWBW System Software
|
||||
distribution archive. It contains documentation for components of
|
||||
This directory ("Doc") is part of the RomWBW System Software
|
||||
distribution archive. It contains documentation for components of
|
||||
the system.
|
||||
|
||||
ChangeLog.txt
|
||||
-------------
|
||||
|
||||
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")
|
||||
-----------------------------
|
||||
|
||||
The original DRI CP/M 2.x Operating System Manual. This should be
|
||||
considered the primary reference for system operation. The section
|
||||
on CP/M 2 Alteration can be ignored since this work has already been
|
||||
The original DRI CP/M 2.x Operating System Manual. This should be
|
||||
considered the primary reference for system operation. The section
|
||||
on CP/M 2 Alteration can be ignored since this work has already been
|
||||
completed as part of the RomWBW distribution.
|
||||
|
||||
|
||||
@@ -39,16 +59,10 @@ Manual for the DDTZ v2.7 debug tool included on the ROM drive.
|
||||
FDisk Manual ("FDisk Manual.pdf")
|
||||
---------------------------------
|
||||
|
||||
The operational manual for John Coffman's hard disk partitioning
|
||||
The operational manual for John Coffman's hard disk partitioning
|
||||
program. This program is included in RomWBW as FDISK80.
|
||||
|
||||
|
||||
Floppy Disk Utility Documentation ("FDU.tst")
|
||||
---------------------------------------------
|
||||
|
||||
Operational documentation for the RomWBW FDU application.
|
||||
|
||||
|
||||
Hard Disk Anatomy ("Hard Disk Anatomy.pdf")
|
||||
-------------------------------------------
|
||||
|
||||
@@ -61,17 +75,46 @@ 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 +126,43 @@ 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")
|
||||
---------------------------------
|
||||
Z80 Assembler User Manual (z80asm (SLR Systems).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.
|
||||
Official user manual for the Z80 Macro Assembler by SLR Systems
|
||||
included in the z80asm disk image.
|
||||
|
||||
|
||||
HI-TECH C Compiler User Manual (HI-TECH Z80 C Compiler Manual.txt)
|
||||
------------------------------------------------------------------
|
||||
|
||||
Official user manual for the HI-TECH C Compiler included in the
|
||||
hitechc disk image.
|
||||
|
||||
|
||||
Borland TurboPascal User Manual (Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf)
|
||||
------------------------------------------------------------------------------------
|
||||
|
||||
Official user manual Borland TurboPascal included in the pascal disk image.
|
||||
|
||||
|
||||
Aztec C Compiler User Manual (Aztec_C_1.06_User_Manual_Mar84.pdf)
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Official user manual for the Aztec C Compiler included in the aztecc disk image.
|
||||
|
||||
|
||||
FORTRAN-80 User Manual (Microsoft_FORTRAN-80_Users_Manual_1977.pdf)
|
||||
---------------------------------------------------------------
|
||||
|
||||
Official user manual for Microsoft's FORTRAN-80 compiler included in the fortran
|
||||
disk image.
|
||||
|
||||
--WBW 5:18 PM 6/14/2023
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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)
|
||||
|
||||
49495
Doc/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf
Normal file
49495
Doc/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
BIN
Doc/z80asm (SLR Systems).pdf
Normal file
BIN
Doc/z80asm (SLR Systems).pdf
Normal file
Binary file not shown.
18
Makefile
18
Makefile
@@ -1,5 +1,14 @@
|
||||
all:
|
||||
.PHONY: tools source clean clobber diff dist
|
||||
|
||||
.ONESHELL:
|
||||
.SHELLFLAGS = -cex
|
||||
|
||||
all: tools source
|
||||
|
||||
tools:
|
||||
$(MAKE) --directory Tools
|
||||
|
||||
source:
|
||||
$(MAKE) --directory Source
|
||||
|
||||
clean:
|
||||
@@ -14,6 +23,9 @@ diff:
|
||||
$(MAKE) --directory Source diff
|
||||
|
||||
dist:
|
||||
$(MAKE) ROM_PLATFORM=dist 2>&1 | tee make.log
|
||||
$(MAKE) --directory Source clean
|
||||
$(MAKE) ROM_PLATFORM=dist
|
||||
$(MAKE) --directory Tools clean
|
||||
$(MAKE) --directory Source clean
|
||||
|
||||
distlog:
|
||||
$(MAKE) dist 2>&1 | tee make.log
|
||||
|
||||
116
ReadMe.md
116
ReadMe.md
@@ -1,9 +1,9 @@
|
||||
|
||||
|
||||
**RomWBW ReadMe** \
|
||||
Version 3.1 Pre-release \
|
||||
Version 3.5 \
|
||||
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
|
||||
16 Feb 2023
|
||||
12 Jan 2024
|
||||
|
||||
# Overview
|
||||
|
||||
@@ -14,15 +14,24 @@ platforms are supported including those produced by these developer
|
||||
communities:
|
||||
|
||||
- [RetroBrew Computers](https://www.retrobrewcomputers.org)
|
||||
- [RC2014](https://rc2014.co.uk),
|
||||
(<https://www.retrobrewcomputers.org>)
|
||||
- [RC2014](https://rc2014.co.uk) (<https://rc2014.co.uk>),
|
||||
[RC2014-Z80](https://groups.google.com/g/rc2014-z80)
|
||||
- [retro-comp](https://groups.google.com/forum/#!forum/retro-comp)
|
||||
(<https://groups.google.com/g/rc2014-z80>)
|
||||
- [Retro Computing](https://groups.google.com/g/retro-comp)
|
||||
(<https://groups.google.com/g/retro-comp>)
|
||||
- [Small Computer Central](https://smallcomputercentral.com/)
|
||||
(<https://smallcomputercentral.com/>)
|
||||
|
||||
A complete list of the currently supported platforms is found in the
|
||||
\[Installation\] section.
|
||||
|
||||
General features include:
|
||||
|
||||
- Z80 Family CPUs including Z80, Z180, and Z280
|
||||
- Banked memory services for several banking designs
|
||||
- Disk drivers for RAM, ROM, Floppy, IDE, CF, and SD
|
||||
- Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip,
|
||||
Iomega
|
||||
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO
|
||||
- Video drivers including TMS9918, SY6545, MOS8563, HD6445
|
||||
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces
|
||||
@@ -42,11 +51,11 @@ ROM firmware itself:
|
||||
|
||||
A dynamic disk drive letter assignment mechanism allows mapping
|
||||
operating system drive letters to any available disk media.
|
||||
Additionally, mass storage devices (IDE Disk, CF Card, SD Card) support
|
||||
the use of multiple slices (up to 256 per device). Each slice contains a
|
||||
complete CP/M filesystem and can be mapped independently to any drive
|
||||
letter. This overcomes the inherent size limitations in legacy OSes and
|
||||
allows up to 2GB of accessible storage on a single device.
|
||||
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.)
|
||||
support the use of multiple slices (up to 256 per device). Each slice
|
||||
contains a complete CP/M filesystem and can be mapped independently to
|
||||
any drive letter. This overcomes the inherent size limitations in legacy
|
||||
OSes and allows up to 2GB of accessible storage on a single device.
|
||||
|
||||
The pre-built ROM firmware images are generally suitable for most users.
|
||||
However, it is also very easy to modify and build custom ROM images that
|
||||
@@ -66,7 +75,7 @@ changing media.
|
||||
By design, RomWBW isolates all of the hardware specific functions in the
|
||||
ROM chip itself. The ROM provides a hardware abstraction layer such that
|
||||
all of the operating systems and applications on a disk will run on any
|
||||
RomWBW-based system. To put it simply, you can take a disk (or CF/SD
|
||||
RomWBW-based system. To put it simply, you can take a disk (or CF/SD/USB
|
||||
Card) and move it between systems transparently.
|
||||
|
||||
A tool is provided that allows you to access a FAT-12/16/32 filesystem.
|
||||
@@ -76,18 +85,19 @@ OSes such as Windows, MacOS, and Linux very easy.
|
||||
|
||||
# Acquiring RomWBW
|
||||
|
||||
The [RomWBW Repository](https://github.com/wwarthen/RomWBW) on GitHub is
|
||||
the official distribution location for all project source and
|
||||
documentation. The fully-built distribution releases are available on
|
||||
the [RomWBW Releases Page](https://github.com/wwarthen/RomWBW/releases)
|
||||
of the repository. On this page, you will normally see a Development
|
||||
Snapshot as well as recent stable releases. Unless you have a specific
|
||||
reason, I suggest you stick to the most recent stable release. Expand
|
||||
the “Assets” drop-down for the release you want to download, then select
|
||||
the asset named RomWBW-vX.X.X-Package.zip. The Package asset includes
|
||||
all pre-built ROM and Disk images as well as full source code. The other
|
||||
assets contain only source code and do not have the pre-built ROM or
|
||||
disk images.
|
||||
The [RomWBW Repository](https://github.com/wwarthen/RomWBW)
|
||||
(<https://github.com/wwarthen/RomWBW>) on GitHub is the official
|
||||
distribution location for all project source and documentation. The
|
||||
fully-built distribution releases are available on the [RomWBW Releases
|
||||
Page](https://github.com/wwarthen/RomWBW/releases)
|
||||
(<https://github.com/wwarthen/RomWBW/releases>) of the repository. On
|
||||
this page, you will normally see a Development Snapshot as well as
|
||||
recent stable releases. Unless you have a specific reason, I suggest you
|
||||
stick to the most recent stable release. Expand the “Assets” drop-down
|
||||
for the release you want to download, then select the asset named
|
||||
RomWBW-vX.X.X-Package.zip. The Package asset includes all pre-built ROM
|
||||
and Disk images as well as full source code. The other assets contain
|
||||
only source code and do not have the pre-built ROM or disk images.
|
||||
|
||||
All source code and distributions are maintained on GitHub. Code
|
||||
contributions are very welcome.
|
||||
@@ -128,8 +138,8 @@ contributions. The list below is probably missing many names – please
|
||||
let me know if I missed you!
|
||||
|
||||
- Andrew Lynch started it all when he created the N8VEM Z80 SBC which
|
||||
became the first platform RomWBW supported. Some of his code can still
|
||||
be found in RomWBW.
|
||||
became the first platform RomWBW supported. Some of his original code
|
||||
can still be found in RomWBW.
|
||||
|
||||
- Dan Werner wrote much of the code from which RomWBW was originally
|
||||
derived and he has always been a great source of knowledge and advice.
|
||||
@@ -140,23 +150,30 @@ let me know if I missed you!
|
||||
due to internal changes within RomWBW. As of RomWBW 2.6, these
|
||||
applications are no longer provided.
|
||||
|
||||
- Sergey Kiselev created several hardware platforms for RomWBW including
|
||||
the very popular Zeta.
|
||||
|
||||
- David Giles created support for the Z180 CSIO which is now included SD
|
||||
Card driver.
|
||||
|
||||
- Ed Brindley contributed some of the code that supports the RC2014
|
||||
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the
|
||||
AY-3-8910 sound driver, DMA support, and a long list of general code
|
||||
and documentation enhancements.
|
||||
|
||||
- Ed Brindley contributed some of the code that supports the RCBus
|
||||
platform.
|
||||
|
||||
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the
|
||||
AY-3-8910 sound driver as well as a long list of general code
|
||||
enhancements.
|
||||
|
||||
- Spencer Owen created the RC2014 series of hobbyist kit computers which
|
||||
has exponentially increased RomWBW usage.
|
||||
has exponentially increased RomWBW usage. Some of his kits include
|
||||
RomWBW.
|
||||
|
||||
- Stephen Cousins has likewise created a series of hobbyist kit
|
||||
computers at Small Computer Central and is distributing RomWBW with
|
||||
many of them.
|
||||
|
||||
- Alan Cox has contributed some driver code and has provided a great
|
||||
deal of advice.
|
||||
|
||||
- The CP/NET client files were developed by Douglas Miller.
|
||||
|
||||
- Phillip Stevens contributed support for FreeRTOS.
|
||||
@@ -176,6 +193,36 @@ let me know if I missed you!
|
||||
|
||||
- The RomWBW Disk Catalog document was produced by Mykl Orders.
|
||||
|
||||
- Rob Prouse has created many of the supplemental disk images including
|
||||
Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft BASIC Compiler,
|
||||
Microsoft Fortran Compiler, and a Games compendium.
|
||||
|
||||
- Martin R has provided substantial help reviewing and improving the
|
||||
User Guide.
|
||||
|
||||
- Jacques Pelletier has contributed the DS1501 RTC driver code.
|
||||
|
||||
- Jose Collado has contributed enhancements to the TMS driver including
|
||||
compatibility with standard TMS register configuration.
|
||||
|
||||
- Kevin Boone has contributed a generic HBIOS date/time utility (WDATE).
|
||||
|
||||
- Matt Carroll has contributed a fix to XM.COM that corrects the port
|
||||
specification when doing a send.
|
||||
|
||||
- Dean Jenkins enhanced the build process to accommodate the Raspberry
|
||||
Pi 4.
|
||||
|
||||
- Tom Plano has contributed a new utility (HTALK) to allow talking
|
||||
directly to HBIOS COM ports.
|
||||
|
||||
- Lars Nelson has contributed several generic utilities such as a
|
||||
universal (OS agnostic) UNARC application.
|
||||
|
||||
- Dylan Hall added support for specifying a secondary console.
|
||||
|
||||
- Bill Shen has contributed boot loaders for several of his systems.
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
|
||||
# Licensing
|
||||
@@ -197,14 +244,15 @@ Portions of RomWBW were created by, contributed by, or derived from the
|
||||
work of others. It is believed that these works are being used in
|
||||
accordance with the intentions and/or licensing of their creators.
|
||||
|
||||
If anyone feels their work is being used outside of it’s intended
|
||||
If anyone feels their work is being used outside of its intended
|
||||
licensing, please notify:
|
||||
|
||||
> Wayne Warthen wwarthen@gmail.com
|
||||
> Wayne Warthen
|
||||
> <wwarthen@gmail.com>
|
||||
|
||||
RomWBW is an aggregate work. It is composed of many individual,
|
||||
standalone programs that are distributed as a whole to function as a
|
||||
cohesive system. Each program may have it’s own licensing which may be
|
||||
cohesive system. Each program may have its own licensing which may be
|
||||
different from other programs within the aggregate.
|
||||
|
||||
In some cases, a single program (e.g., CP/M Operating System) is
|
||||
|
||||
113
ReadMe.txt
113
ReadMe.txt
@@ -1,6 +1,6 @@
|
||||
RomWBW ReadMe
|
||||
Wayne Warthen (wwarthen@gmail.com)
|
||||
16 Feb 2023
|
||||
12 Jan 2024
|
||||
|
||||
|
||||
|
||||
@@ -13,15 +13,21 @@ Z80/180/280 retro-computing hardware systems. A wide variety of
|
||||
platforms are supported including those produced by these developer
|
||||
communities:
|
||||
|
||||
- RetroBrew Computers
|
||||
- RC2014, RC2014-Z80
|
||||
- retro-comp
|
||||
- Small Computer Central
|
||||
- RetroBrew Computers (https://www.retrobrewcomputers.org)
|
||||
- RC2014 (https://rc2014.co.uk),
|
||||
RC2014-Z80 (https://groups.google.com/g/rc2014-z80)
|
||||
- Retro Computing (https://groups.google.com/g/retro-comp)
|
||||
- Small Computer Central (https://smallcomputercentral.com/)
|
||||
|
||||
A complete list of the currently supported platforms is found in the
|
||||
[Installation] section.
|
||||
|
||||
General features include:
|
||||
|
||||
- Z80 Family CPUs including Z80, Z180, and Z280
|
||||
- Banked memory services for several banking designs
|
||||
- Disk drivers for RAM, ROM, Floppy, IDE, CF, and SD
|
||||
- Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip,
|
||||
Iomega
|
||||
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO
|
||||
- Video drivers including TMS9918, SY6545, MOS8563, HD6445
|
||||
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces
|
||||
@@ -41,11 +47,11 @@ ROM firmware itself:
|
||||
|
||||
A dynamic disk drive letter assignment mechanism allows mapping
|
||||
operating system drive letters to any available disk media.
|
||||
Additionally, mass storage devices (IDE Disk, CF Card, SD Card) support
|
||||
the use of multiple slices (up to 256 per device). Each slice contains a
|
||||
complete CP/M filesystem and can be mapped independently to any drive
|
||||
letter. This overcomes the inherent size limitations in legacy OSes and
|
||||
allows up to 2GB of accessible storage on a single device.
|
||||
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.)
|
||||
support the use of multiple slices (up to 256 per device). Each slice
|
||||
contains a complete CP/M filesystem and can be mapped independently to
|
||||
any drive letter. This overcomes the inherent size limitations in legacy
|
||||
OSes and allows up to 2GB of accessible storage on a single device.
|
||||
|
||||
The pre-built ROM firmware images are generally suitable for most users.
|
||||
However, it is also very easy to modify and build custom ROM images that
|
||||
@@ -65,7 +71,7 @@ changing media.
|
||||
By design, RomWBW isolates all of the hardware specific functions in the
|
||||
ROM chip itself. The ROM provides a hardware abstraction layer such that
|
||||
all of the operating systems and applications on a disk will run on any
|
||||
RomWBW-based system. To put it simply, you can take a disk (or CF/SD
|
||||
RomWBW-based system. To put it simply, you can take a disk (or CF/SD/USB
|
||||
Card) and move it between systems transparently.
|
||||
|
||||
A tool is provided that allows you to access a FAT-12/16/32 filesystem.
|
||||
@@ -78,16 +84,18 @@ OSes such as Windows, MacOS, and Linux very easy.
|
||||
ACQUIRING ROMWBW
|
||||
|
||||
|
||||
The RomWBW Repository on GitHub is the official distribution location
|
||||
for all project source and documentation. The fully-built distribution
|
||||
releases are available on the RomWBW Releases Page of the repository. On
|
||||
this page, you will normally see a Development Snapshot as well as
|
||||
recent stable releases. Unless you have a specific reason, I suggest you
|
||||
stick to the most recent stable release. Expand the “Assets” drop-down
|
||||
for the release you want to download, then select the asset named
|
||||
RomWBW-vX.X.X-Package.zip. The Package asset includes all pre-built ROM
|
||||
and Disk images as well as full source code. The other assets contain
|
||||
only source code and do not have the pre-built ROM or disk images.
|
||||
The RomWBW Repository (https://github.com/wwarthen/RomWBW) on GitHub is
|
||||
the official distribution location for all project source and
|
||||
documentation. The fully-built distribution releases are available on
|
||||
the RomWBW Releases Page (https://github.com/wwarthen/RomWBW/releases)
|
||||
of the repository. On this page, you will normally see a Development
|
||||
Snapshot as well as recent stable releases. Unless you have a specific
|
||||
reason, I suggest you stick to the most recent stable release. Expand
|
||||
the “Assets” drop-down for the release you want to download, then select
|
||||
the asset named RomWBW-vX.X.X-Package.zip. The Package asset includes
|
||||
all pre-built ROM and Disk images as well as full source code. The other
|
||||
assets contain only source code and do not have the pre-built ROM or
|
||||
disk images.
|
||||
|
||||
All source code and distributions are maintained on GitHub. Code
|
||||
contributions are very welcome.
|
||||
@@ -129,8 +137,8 @@ contributions. The list below is probably missing many names – please
|
||||
let me know if I missed you!
|
||||
|
||||
- Andrew Lynch started it all when he created the N8VEM Z80 SBC which
|
||||
became the first platform RomWBW supported. Some of his code can
|
||||
still be found in RomWBW.
|
||||
became the first platform RomWBW supported. Some of his original
|
||||
code can still be found in RomWBW.
|
||||
|
||||
- Dan Werner wrote much of the code from which RomWBW was originally
|
||||
derived and he has always been a great source of knowledge and
|
||||
@@ -142,23 +150,30 @@ let me know if I missed you!
|
||||
due to internal changes within RomWBW. As of RomWBW 2.6, these
|
||||
applications are no longer provided.
|
||||
|
||||
- Sergey Kiselev created several hardware platforms for RomWBW
|
||||
including the very popular Zeta.
|
||||
|
||||
- David Giles created support for the Z180 CSIO which is now included
|
||||
SD Card driver.
|
||||
|
||||
- Ed Brindley contributed some of the code that supports the RC2014
|
||||
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the
|
||||
AY-3-8910 sound driver, DMA support, and a long list of general code
|
||||
and documentation enhancements.
|
||||
|
||||
- Ed Brindley contributed some of the code that supports the RCBus
|
||||
platform.
|
||||
|
||||
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the
|
||||
AY-3-8910 sound driver as well as a long list of general code
|
||||
enhancements.
|
||||
|
||||
- Spencer Owen created the RC2014 series of hobbyist kit computers
|
||||
which has exponentially increased RomWBW usage.
|
||||
which has exponentially increased RomWBW usage. Some of his kits
|
||||
include RomWBW.
|
||||
|
||||
- Stephen Cousins has likewise created a series of hobbyist kit
|
||||
computers at Small Computer Central and is distributing RomWBW with
|
||||
many of them.
|
||||
|
||||
- Alan Cox has contributed some driver code and has provided a great
|
||||
deal of advice.
|
||||
|
||||
- The CP/NET client files were developed by Douglas Miller.
|
||||
|
||||
- Phillip Stevens contributed support for FreeRTOS.
|
||||
@@ -178,6 +193,37 @@ let me know if I missed you!
|
||||
|
||||
- The RomWBW Disk Catalog document was produced by Mykl Orders.
|
||||
|
||||
- Rob Prouse has created many of the supplemental disk images
|
||||
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft
|
||||
BASIC Compiler, Microsoft Fortran Compiler, and a Games compendium.
|
||||
|
||||
- Martin R has provided substantial help reviewing and improving the
|
||||
User Guide.
|
||||
|
||||
- Jacques Pelletier has contributed the DS1501 RTC driver code.
|
||||
|
||||
- Jose Collado has contributed enhancements to the TMS driver
|
||||
including compatibility with standard TMS register configuration.
|
||||
|
||||
- Kevin Boone has contributed a generic HBIOS date/time utility
|
||||
(WDATE).
|
||||
|
||||
- Matt Carroll has contributed a fix to XM.COM that corrects the port
|
||||
specification when doing a send.
|
||||
|
||||
- Dean Jenkins enhanced the build process to accommodate the Raspberry
|
||||
Pi 4.
|
||||
|
||||
- Tom Plano has contributed a new utility (HTALK) to allow talking
|
||||
directly to HBIOS COM ports.
|
||||
|
||||
- Lars Nelson has contributed several generic utilities such as a
|
||||
universal (OS agnostic) UNARC application.
|
||||
|
||||
- Dylan Hall added support for specifying a secondary console.
|
||||
|
||||
- Bill Shen has contributed boot loaders for several of his systems.
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
|
||||
|
||||
@@ -202,14 +248,15 @@ Portions of RomWBW were created by, contributed by, or derived from the
|
||||
work of others. It is believed that these works are being used in
|
||||
accordance with the intentions and/or licensing of their creators.
|
||||
|
||||
If anyone feels their work is being used outside of it’s intended
|
||||
If anyone feels their work is being used outside of its intended
|
||||
licensing, please notify:
|
||||
|
||||
Wayne Warthen wwarthen@gmail.com
|
||||
Wayne Warthen
|
||||
wwarthen@gmail.com
|
||||
|
||||
RomWBW is an aggregate work. It is composed of many individual,
|
||||
standalone programs that are distributed as a whole to function as a
|
||||
cohesive system. Each program may have it’s own licensing which may be
|
||||
cohesive system. Each program may have its own licensing which may be
|
||||
different from other programs within the aggregate.
|
||||
|
||||
In some cases, a single program (e.g., CP/M Operating System) is
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=../../Tools
|
||||
set TOOLS=..\..\Tools
|
||||
set APPBIN=..\..\Binary\Apps
|
||||
|
||||
set PATH=%TOOLS%\tasm32;%TOOLS%\zxcc;%PATH%
|
||||
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
call :asm syscopy || exit /b
|
||||
@@ -32,6 +29,7 @@ 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
|
||||
pushd HTalk && call Build || exit /b & popd
|
||||
|
||||
copy *.com %APPBIN%\ || exit /b
|
||||
|
||||
|
||||
@@ -18,3 +18,4 @@ 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
|
||||
pushd HTalk && call Clean || exit /b 1 & popd
|
||||
|
||||
125
Source/Apps/FAT/ReadMe.md
Normal file
125
Source/Apps/FAT/ReadMe.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# RomWBW HBIOS CP/M FAT Utility ("FAT.COM")
|
||||
|
||||
Author: Wayne Warthen \
|
||||
Updated: 6-Jan-2024
|
||||
|
||||
This application allows copying files between CP/M filesystems and FAT
|
||||
filesystems (DOS, Windows, Mac, Linux, etc.). The application runs on
|
||||
RomWBW hosted CP/M (and compatible) operating systems. The application
|
||||
also has limited file management capabilities on FAT filesystems
|
||||
including directory listing, renaming, deleting, and sub-directory
|
||||
creation.
|
||||
|
||||
### Usage:
|
||||
|
||||
```
|
||||
FAT DIR <path>
|
||||
FAT COPY <src> <dst>
|
||||
FAT REN <from> <to>
|
||||
FAT DEL <path>[<file>|<dir>]
|
||||
FAT MD <path>
|
||||
FAT FORMAT <drv>
|
||||
```
|
||||
|
||||
CP/M filespec: \<d\>:FILENAME.EXT (\<d\> is CP/M drive letter A-P) \
|
||||
FAT filespec: \<u\>:/DIR/FILENAME.EXT (\<u\> is disk unit #)
|
||||
|
||||
### Notes:
|
||||
|
||||
- Partitioned or non-partitioned media is handled automatically.
|
||||
A floppy drive is a good example of a non-partitioned FAT
|
||||
filesystem and will be recognized. Larger media will typically
|
||||
have a partition table which will be recognized by the
|
||||
application to find the FAT filesystem.
|
||||
|
||||
- Although RomWBW-style CP/M media does not know anything about
|
||||
partition tables, it is entirely possible to have media that
|
||||
has both CP/M and FAT file systems on it. This is accomplished
|
||||
by creating a FAT filesystem on the media that starts on a track
|
||||
beyond the last track used by CP/M. Each CP/M slice can occupy
|
||||
up to 8MB. So, make sure to start your FAT partition beyond
|
||||
(slice count) * 9MB.
|
||||
|
||||
- The application infers whether you are attempting to reference
|
||||
a FAT or CP/M filesystem via the drive specifier (char before ':').
|
||||
A numeric drive character specifies the HBIOS disk unit number
|
||||
for FAT access. An alpha (A-P) character indicates a CP/M
|
||||
file system access targeting the specified drive letter. If there
|
||||
is no drive character specified, the current CP/M filesystem and
|
||||
current CP/M drive is assumed. For example:
|
||||
|
||||
`2:README.TXT` refers to FAT file README.TXT on disk unit #2 \
|
||||
`C:README.TXT` refers to CP/M file README.TXT on CP/M drive C: \
|
||||
`README.TXT` refers to CP/M file README.TXT on current CP/M drive
|
||||
|
||||
- FAT files with SYS, HIDDEN, or R/O attributes are not given
|
||||
any special treatment. Such files are found and processed
|
||||
like any other file. However, any attempt to write to a
|
||||
read-only file will fail and the application will abort.
|
||||
|
||||
- It is not currently possible to reference CP/M user areas other
|
||||
than the current user. To copy files to alternate user areas,
|
||||
you must switch to the desired user number first or use an
|
||||
additional step to copy the file to the desired user area.
|
||||
|
||||
- Accessing FAT filesystems on a floppy requires the use of
|
||||
RomWBW HBIOS v2.9.1-pre.13 or greater.
|
||||
|
||||
- Only the first 8 RomWBW disk units (0-7) can be referenced.
|
||||
|
||||
- Files written are not verified.
|
||||
|
||||
- Wildcard matching in FAT filesystems is a bit unusual as
|
||||
implemented by FatFs. See FatFs documentation.
|
||||
|
||||
### License:
|
||||
|
||||
GNU GPLv3 (see file LICENSE.txt)
|
||||
|
||||
### Build Notes:
|
||||
|
||||
- Source is maintained on GitHub at <https://github.com/wwarthen/FAT>.
|
||||
|
||||
- Application is based on FatFs. FatFs source is included. See
|
||||
<http://elm-chan.org/fsw/ff/>.
|
||||
|
||||
- SDCC compiler v4.3 or greater is required to build. New calling
|
||||
conventions introduced in v4.3 are assumed.
|
||||
|
||||
- See Build.cmd for sample build script under Windows. References
|
||||
to SDCC must be updated for your environment.
|
||||
|
||||
- Note that ff.c (core FatFs code) generates quite a few compiler
|
||||
warnings (all appear to be benign).
|
||||
|
||||
### To Do:
|
||||
|
||||
- Allow ^C to abort any operation in progress.
|
||||
|
||||
- Allow referencing more than the first 8 RomWBW disk units.
|
||||
|
||||
- Handle wildcards in destination, e.g.:
|
||||
|
||||
`FAT REN 2:/*.TXT 2:/*.BAK`
|
||||
|
||||
- Do something intelligent with R/O and SYS file attributes
|
||||
|
||||
- Support UNA
|
||||
|
||||
### History:
|
||||
|
||||
| Date | Version | Notes |
|
||||
|------------:|-------- |-------------------------------------------------------------|
|
||||
| 2-May-2019 | v0.9 | (beta) initial release |
|
||||
| 7-May-2019 | v0.9.1 | (beta) added REN and DEL |
|
||||
| 8-May-2019 | v0.9.2 | (beta) handle file collisions w/ user prompt |
|
||||
| 8-Oct-2019 | v0.9.3 | (beta) fixed incorrect filename buffer size (MAX_FN) |
|
||||
| 10-Oct-2019 | v0.9.4 | (beta) upgraded to FatFs R0.13c |
|
||||
| 10-Oct-2019 | v0.9.5 | (beta) added MD (make directory) |
|
||||
| 10-Oct-2019 | v0.9.6 | (beta) added FORMAT |
|
||||
| 11-Oct-2019 | v0.9.7 | (beta) fix FORMAT to use existing partition table entries |
|
||||
| | | add attributes to directory listing |
|
||||
| 12-Apr-2021 | v0.9.8 | (beta) support CP/NET drives |
|
||||
| 12-Oct-2023 | v0.9.9 | (beta) handle updated HBIOS Disk Device call |
|
||||
| 6-Jan-2024 | v1.0.0 | updated to latest FsFat (v0.15) |
|
||||
| | | updated to latest SDCC (v4.3) |
|
||||
@@ -1,104 +0,0 @@
|
||||
RomWBW HBIOS CP/M FAT Utility ("FAT.COM")
|
||||
|
||||
Author: Wayne Warthen
|
||||
Updated: 12-Apr-2021
|
||||
|
||||
Application to manipulate and exchange files with a FAT (DOS)
|
||||
filesystem. Runs on any HBIOS hosted CP/M implementation.
|
||||
|
||||
USAGE:
|
||||
FAT DIR <path>
|
||||
FAT COPY <src> <dst>
|
||||
FAT REN <from> <to>
|
||||
FAT DEL <path>[<file>|<dir>]
|
||||
FAT MD <path>
|
||||
FAT FORMAT <drv>
|
||||
|
||||
CP/M filespec: <d>:FILENAME.EXT (<d> is CP/M drive letter A-P)
|
||||
FAT filespec: <u>:/DIR/FILENAME.EXT (<u> is disk unit #)
|
||||
|
||||
LICENSE:
|
||||
GNU GPLv3 (see file LICENSE.txt)
|
||||
|
||||
NOTES:
|
||||
- Partitioned or non-partitioned media is handled automatically.
|
||||
A floppy drive is a good example of a non-partitioned FAT
|
||||
filesystem and will be recognized. Larger media will typically
|
||||
have a partition table which will be recognized by the
|
||||
application to find the FAT filesystem.
|
||||
|
||||
- Although RomWBW-style CP/M media does not know anything about
|
||||
partition tables, it is entirely possible to have media that
|
||||
has both CP/M and FAT file systems on it. This is accomplished
|
||||
by creating a FAT filesystem on the media that starts on a track
|
||||
beyond the last track used by CP/M. Each CP/M slice on a
|
||||
media will occupy a little over 8MB. So, make sure to start
|
||||
your FAT partition beyond (slice count) * 8MB.
|
||||
|
||||
- The application infers whether you are attempting to reference
|
||||
a FAT or CP/M filesystem via the drive specifier (char before ':').
|
||||
A numeric drive character specifies the HBIOS disk unit number
|
||||
for FAT access. An alpha (A-P) character indicates a CP/M
|
||||
file system access targeting the specified drive letter. If there
|
||||
is no drive character specified, the current CP/M filesystem and
|
||||
current CP/M drive is assumed. For example:
|
||||
|
||||
"2:README.TXT" refers to FAT file README.TXT on disk unit #2
|
||||
"C:README.TXT" refers to CP/M file README.TXT on CP/M drive C
|
||||
"README.TXT" refers to CP/M file README.TXT on current CP/M drive
|
||||
|
||||
- FAT files with SYS, HIDDEN, or R/O only attributes are not given
|
||||
any special treatment. Such files are found and processed
|
||||
like any other file. However, any attempt to write to a
|
||||
read-only file will fail and the application will abort.
|
||||
|
||||
- It is not currently possible to reference CP/M user areas other
|
||||
than the current user. To copy files to alternate user areas,
|
||||
you must switch to the desired user number first or use an
|
||||
additional step to copy the file to the desired user area.
|
||||
|
||||
- Accessing FAT filesystems on a floppy requires the use of
|
||||
RomWBW HBIOS v2.9.1-pre.13 or greater.
|
||||
|
||||
- Files written are not verified.
|
||||
|
||||
- Wildcard matching in FAT filesystems is a bit unusual as
|
||||
implemented by FatFs. See FatFs documentation.
|
||||
|
||||
BUILD NOTES:
|
||||
- Source is maintained on GitHub at https://github.com/wwarthen/FAT
|
||||
|
||||
- Application is based on FatFs. FatFs source is included.
|
||||
|
||||
- SDCC compiler is required to build (v4.0.0 known working).
|
||||
|
||||
- ZX CP/M emulator is required to build (from RomWBW distribution).
|
||||
|
||||
- See Build.cmd for sample build script under Windows. References
|
||||
to SDCC and ZX must be updated for your environment.
|
||||
|
||||
- Note that ff.c (core FatFs code) generates quite a few compiler
|
||||
warnings (all appear to be benign).
|
||||
|
||||
TO DO:
|
||||
- Allow ^C to abort any operation in progress.
|
||||
|
||||
- Handle wildcards in destination, e.g.:
|
||||
"FAT REN 2:/*.TXT 2:/*.BAK"
|
||||
|
||||
- Do something intelligent with R/O and SYS files on FAT
|
||||
|
||||
- Support UNA
|
||||
|
||||
HISTORY:
|
||||
2-May-2019: v0.9 (beta) initial release
|
||||
7-May-2019: v0.9.1 (beta) added REN and DEL
|
||||
8-May-2019: v0.9.2 (beta) handle file collisions w/ user prompt
|
||||
8-Oct-2019: v0.9.3 (beta) fixed incorrect filename buffer size (MAX_FN)
|
||||
10-Oct-2019: v0.9.4 (beta) upgraded to FatFs R0.13c
|
||||
10-Oct-2019: v0.9.5 (beta) added MD (make directory)
|
||||
10-Oct-2019: v0.9.6 (beta) added FORMAT
|
||||
11-Oct-2019: v0.9.7 (beta) fix FORMAT to use existing partition table entries
|
||||
add attributes to directory listing
|
||||
12-Apr-2021: v0.9.8 (beta) support CP/NET drives
|
||||
|
||||
Binary file not shown.
@@ -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
|
||||
@@ -48,7 +48,8 @@
|
||||
; 2020-04-29: v5.5 ADDED SUPPORT FOR ETCHED PIXELS FDC
|
||||
; 2020-12-12: v5.6 UPDATED SMALLZ80 TO NEW I/O ADDRESSES
|
||||
; 2021-03-24: v5.7 ADDED SOME SINGLE-SIDED FORMATS
|
||||
; 2021-07-26: v5.8 ADDED SUPPORT MBC FDC
|
||||
; 2021-07-26: v5.8 ADDED SUPPORT FOR NHYODYNE (MBC) FDC
|
||||
; 2023-12-10: v5.9 ADDED SUPPORT FOR DUODYNE (DUO) FDC
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
@@ -85,13 +86,14 @@ FDC_SMZ80 .EQU 8
|
||||
FDC_DYNO .EQU 9
|
||||
FDC_EPFDC .EQU 10
|
||||
FDC_MBC .EQU 11
|
||||
FDC_DUO .EQU 12
|
||||
;
|
||||
; FDC MODE
|
||||
;
|
||||
_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
|
||||
;
|
||||
;===============================================================================
|
||||
@@ -219,8 +221,8 @@ INIT5:
|
||||
XOR A
|
||||
RET
|
||||
|
||||
STR_BANNER .DB "Floppy Disk Utility (FDU) v5.8, 26-Jul-2021$"
|
||||
STR_BANNER2 .DB "Copyright (C) 2021, Wayne Warthen, GNU GPL v3","$"
|
||||
STR_BANNER .DB "Floppy Disk Utility (FDU) v5.9, 10-Dec-2023$"
|
||||
STR_BANNER2 .DB "Copyright (C) 2023, Wayne Warthen, GNU GPL v3","$"
|
||||
STR_HBIOS .DB " [HBIOS]$"
|
||||
STR_UBIOS .DB " [UBIOS]$"
|
||||
;
|
||||
@@ -292,6 +294,7 @@ FDCTBL: ; LABEL CONFIG DATA
|
||||
.DW STR_DYNO, CFG_DYNO
|
||||
.DW STR_EPFDC, CFG_EPFDC
|
||||
.DW STR_MBC, CFG_MBC
|
||||
.DW STR_DUO, CFG_DUO
|
||||
FDCCNT .EQU ($-FDCTBL)/4 ; FD CONTROLLER COUNT
|
||||
;
|
||||
; FDC LABEL STRINGS
|
||||
@@ -307,7 +310,8 @@ STR_RCWDC .TEXT "RC-WDC$"
|
||||
STR_SMZ80 .TEXT "SMZ80$"
|
||||
STR_DYNO .TEXT "DYNO$"
|
||||
STR_EPFDC .TEXT "EPFDC$"
|
||||
STR_MBC .TEXT "MBC$"
|
||||
STR_MBC .TEXT "NHYODYNE$"
|
||||
STR_DUO .TEXT "DUODYNE$"
|
||||
;
|
||||
; FDC CONFIGURATION BLOCKS
|
||||
;
|
||||
@@ -448,7 +452,18 @@ CFG_MBC:
|
||||
.DB 035H ; CONFIGURATION CONTROL REGISTER
|
||||
.DB 036H ; DACK (WHEN READ)
|
||||
.DB 037H ; TERMINAL COUNT (W/ DACK)
|
||||
.DB 0FFH ; NOT USED BY ZETA SBC V2
|
||||
.DB 0FFH ; NOT USED
|
||||
.DB _PCAT ; MODE=
|
||||
;
|
||||
CFG_DUO:
|
||||
.DB 080H ; FDC MAIN STATUS REGISTER
|
||||
.DB 081H ; FDC DATA PORT
|
||||
.DB 0FFH ; DATA INPUT REGISTER
|
||||
.DB 086H ; DIGITAL OUTPUT REGISTER (WHEN WRITTEN)
|
||||
.DB 085H ; CONFIGURATION CONTROL REGISTER
|
||||
.DB 086H ; DACK (WHEN READ)
|
||||
.DB 087H ; TERMINAL COUNT (W/ DACK)
|
||||
.DB 0FFH ; NOT USED
|
||||
.DB _PCAT ; MODE=
|
||||
;
|
||||
FDCID .DB 0 ; FDC IDENTIFIER (0 INDEXED)
|
||||
@@ -465,12 +480,13 @@ 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 " (L) Multi-Board Computer FDC\r\n"
|
||||
.TEXT " (K) RCBus EPFDC\r\n"
|
||||
.TEXT " (L) Nhyodyne FDC\r\n"
|
||||
.TEXT " (M) Duodyne FDC\r\n"
|
||||
.TEXT " (X) Exit\r\n"
|
||||
.TEXT "=== OPTION ===> $\r\n"
|
||||
;
|
||||
@@ -1561,6 +1577,7 @@ MD_MAP:
|
||||
.DB %00000001 ; DYNO POLL
|
||||
.DB %00000001 ; EPFDC POLL
|
||||
.DB %00000001 ; MBC POLL
|
||||
.DB %00000001 ; DUO POLL
|
||||
;
|
||||
; MEDIA DESCRIPTION BLOCK
|
||||
;
|
||||
@@ -2021,7 +2038,7 @@ FM_DRAW0B: ; ZETA, DIO3
|
||||
LD A,(FST_DOR)
|
||||
AND 00000010B
|
||||
JR FM_DRAW1
|
||||
FM_DRAW0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
FM_DRAW0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO
|
||||
LD A,(FST_DOR)
|
||||
AND 11110000B
|
||||
JR FM_DRAW1
|
||||
@@ -2174,7 +2191,7 @@ FM_MOTOR0B: ; ZETA, DIO3
|
||||
LD A,(FST_DOR)
|
||||
AND 00000010B
|
||||
JR FM_MOTOR1
|
||||
FM_MOTOR0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
FM_MOTOR0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO
|
||||
LD A,(FST_DOR)
|
||||
AND 11110000B
|
||||
JR FM_MOTOR1
|
||||
@@ -2913,7 +2930,7 @@ FC_INIT1: ; DIO
|
||||
FC_INIT2: ; ZETA, DIO3
|
||||
LD A,(FCD_DORB)
|
||||
JR FC_INIT5
|
||||
FC_INIT3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
FC_INIT3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO
|
||||
LD A,(FCD_DORC)
|
||||
JR FC_INIT5
|
||||
FC_INIT4: ; WDSMC
|
||||
@@ -2957,7 +2974,7 @@ FC_RESETFDC1: ; ZETA, DIO3, RCSMC
|
||||
POP AF
|
||||
OUT (C),A
|
||||
JR FC_RESETFDC3
|
||||
FC_RESETFDC2: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
FC_RESETFDC2: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO
|
||||
LD A,0
|
||||
OUT (C),A
|
||||
LD A,(FST_DOR)
|
||||
@@ -2984,7 +3001,7 @@ FC_PULSETC:
|
||||
;RES 0,A
|
||||
;OUT (C),A
|
||||
;JR FC_PULSETC2
|
||||
;FC_PULSETC1: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
;FC_PULSETC1: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO
|
||||
;LD C,(IY+CFG_TC)
|
||||
;IN A,(C)
|
||||
;JR FC_PULSETC2
|
||||
@@ -3016,7 +3033,7 @@ FC_MOTORON2: ; ZETA, DIO3
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
SET 1,(HL)
|
||||
JR FC_MOTORON5
|
||||
FC_MOTORON3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
FC_MOTORON3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
LD A,(HL) ; START WITH CURRENT DOR
|
||||
AND 11111100B ; GET RID OF ANY ACTIVE DS BITS
|
||||
@@ -3080,7 +3097,7 @@ FC_MOTOROFF2: ; ZETA, DIO3
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
RES 1,(HL)
|
||||
JR FC_MOTOROFF5
|
||||
FC_MOTOROFF3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
FC_MOTOROFF3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
LD A,DORC_INIT
|
||||
LD (HL),A
|
||||
@@ -3950,7 +3967,7 @@ DORB_BR500 .EQU 10100000B ; 500KBPS
|
||||
;
|
||||
DORB_INIT .EQU DORB_BR250
|
||||
;
|
||||
; *** DIDE/N8/ZETA2/RCWDC/SMZ80/DYNO/EPFDC/MBC ***
|
||||
; *** DIDE/N8/ZETA2/RCWDC/SMZ80/DYNO/EPFDC/MBC/DUO ***
|
||||
;
|
||||
DORC_INIT .EQU 00001100B ; SOFT RESET INACTIVE, DMA ENABLED
|
||||
;
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
================================================================
|
||||
Floppy Disk Utility (FDU) v5.3 for RetroBrew Computers
|
||||
Disk IO / Zeta / Dual-IDE / N8 / RC2014 / SmallZ80 / Dyno
|
||||
Floppy Disk Utility (FDU) v5.9 for RetroBrew Computers
|
||||
Disk IO / Zeta / Dual-IDE / N8 / RCBus / SmallZ80 / Dyno / Nhyodyne / Duodyne
|
||||
================================================================
|
||||
|
||||
Updated January 5, 2020
|
||||
Updated December 12, 2023
|
||||
by Wayne Warthen (wwarthen@gmail.com)
|
||||
|
||||
Application to test the hardware functionality of the Floppy
|
||||
Disk Controller (FDC) on the ECB DISK I/O, DISK I/O V3, ZETA
|
||||
SBC, Dual IDE w/ Floppy, or N8 board.
|
||||
SBC, Dual IDE w/ Floppy, N8, RCBus, SmallZ80, Dyno, Nhyodyne,
|
||||
Duodyne systems.
|
||||
|
||||
The intent is to provide a testbed that allows direct testing
|
||||
of all possible media types and modes of access. The
|
||||
@@ -33,7 +34,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,12 +75,13 @@ supported:
|
||||
- Zeta 2
|
||||
- N8
|
||||
- Mark IV
|
||||
- RC2014
|
||||
- RCBus
|
||||
- SmallZ80
|
||||
- Dyno
|
||||
- MBC
|
||||
- Nhyodyne (MBC)
|
||||
- Duodyne (DUO)
|
||||
|
||||
You must be using either a RomWBW or UBA based OS version.
|
||||
You must be using either a RomWBW or UNA based OS version.
|
||||
|
||||
You must have one of the following floppy disk controllers:
|
||||
|
||||
@@ -89,17 +91,18 @@ 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
|
||||
- Nhyodyne (MBC) FDC
|
||||
- Duodyne (DUO) FDC
|
||||
|
||||
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 +150,16 @@ 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.
|
||||
JP2 (TC): 2-3. Note that pin 1 of JPX jumpers is toward the bottom
|
||||
of the board.
|
||||
|
||||
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
|
||||
@@ -164,8 +168,11 @@ hardwired I/O ranges are assumed in the code.
|
||||
Dyno does not have any relevant jumper settings. The
|
||||
hardwired I/O ranges are assumed in the code.
|
||||
|
||||
The MBC FDC is expected to be strapped to use neither INT nor NMI. It
|
||||
is also not expected to use DMA.
|
||||
The Nhyodyne (MBC) FDC is expected to be strapped to use neither INT
|
||||
nor NMI. It is also not expected to use DMA.
|
||||
|
||||
The Duodyne (DUO) FDC is expected to be strapped to use neither INT
|
||||
nor NMI. It is also not expected to use DMA.
|
||||
|
||||
Modes of Operation
|
||||
------------------
|
||||
@@ -506,7 +513,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
|
||||
|
||||
@@ -532,4 +539,7 @@ WW 3/24/2021: v5.7
|
||||
- Added support for a few single-sided formats
|
||||
|
||||
WW 7/26/2021: v5.8
|
||||
- Added support for MBC FDC
|
||||
- Added support for Nhyodyne (MBC) FDC
|
||||
|
||||
WW 12/10/2023: v5.9
|
||||
- Added support for Duodyne (DUO) FDC
|
||||
|
||||
14
Source/Apps/HTalk/Build.cmd
Normal file
14
Source/Apps/HTalk/Build.cmd
Normal file
@@ -0,0 +1,14 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=../../../Tools
|
||||
set PATH=%TOOLS%\tasm32;%PATH%
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
echo Building HTalk...
|
||||
tasm -t80 -g3 -fFF htalk.asm htalk.com %htalk.lst || exit /b
|
||||
|
||||
copy /Y htalk.com ..\..\..\Binary\Apps\ || exit /b
|
||||
rem copy /Y *.ovr ..\..\..\Binary\Apps\ || exit /b
|
||||
rem copy /Y *.hlp ..\..\..\Binary\Apps\ || exit /b
|
||||
rem copy /Y *.doc ..\..\..\Binary\Apps\ || exit /b
|
||||
5
Source/Apps/HTalk/Clean.cmd
Normal file
5
Source/Apps/HTalk/Clean.cmd
Normal file
@@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.com del *.com
|
||||
if exist *.lst del *.lst
|
||||
10
Source/Apps/HTalk/Makefile
Normal file
10
Source/Apps/HTalk/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
OBJECTS = htalk.com
|
||||
#DOCS = htalk.txt
|
||||
DEST = ../../../Binary/Apps
|
||||
DOCDEST = ../../../Binary/Apps
|
||||
TOOLS = ../../../Tools
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
%.com: USETASM=1
|
||||
|
||||
|
||||
725
Source/Apps/HTalk/htalk.asm
Normal file
725
Source/Apps/HTalk/htalk.asm
Normal file
@@ -0,0 +1,725 @@
|
||||
;===============================================================================
|
||||
;HTALK - BARE MINIMUM TERMINAL INTERFACE
|
||||
;
|
||||
; CONSOLE TALKS TO ARBITRARY CHARACTER DEVICE.
|
||||
;===============================================================================
|
||||
;
|
||||
; AUTHOR: TOM PLANO (TOMPLANO@PROTON.ME)
|
||||
;
|
||||
; USAGE:
|
||||
; HTALK $<CHAR_DEVICE_NUM>
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; CHANGE LOG:
|
||||
; I'VE NOTATED SECTIONS OF CODE THAT ARNT REQUIRED IF THIS APP IS
|
||||
; INCORPORATED INTO DBGMOD WITH A <OPT> TAG
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; TODO:
|
||||
; SEE ENUM_DEV1 TODO
|
||||
;
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
;===============================================================================
|
||||
; DEFINITIONS
|
||||
;===============================================================================
|
||||
;
|
||||
STKSIZ .EQU $FF
|
||||
;
|
||||
; HBIOS SYSTEM CALLS AND ID STRING ADDRESS
|
||||
;
|
||||
ROMWBW_ID .EQU $FFFE ; ROMWBW ID STRING ADDRESS
|
||||
HBIOS_SYS .EQU $FFF0 ; HBIOS SYSCALL ADDRESS
|
||||
|
||||
H_SYSGET .EQU $F8 ; GET SYSTEM INFO
|
||||
H_CIOCNT .EQU $00 ; GET CHAR DEV COUNT SUBFUNCTION
|
||||
|
||||
BF_CIOIN .EQU $00 ; HBIOS CHAR INPUT
|
||||
BF_CIOOUT .EQU $01 ; HBIOS CHAR OUTPUT
|
||||
BF_CIOIST .EQU $02 ; HBIOS CHAR INPUT STATUS
|
||||
BF_CIOOST .EQU $03 ; HBIOS CHAR OUTPUT STATUS
|
||||
BF_CIOINIT .EQU $04 ; HBIOS CHAR I/O INIT
|
||||
BF_CIOQUERY .EQU $05 ; HBIOS CHAR I/O QUERY
|
||||
BF_CIODEVICE .EQU $06 ; HBIOS CHAR I/O DEVICE
|
||||
;
|
||||
; SUPPORTED HBIOS CIO DEVICE TYPES
|
||||
;
|
||||
CIODEV_UART .EQU $00 ; 16C550 FAMILY SERIAL INTERFACE UART.ASM
|
||||
CIODEV_ASCI .EQU $10 ; Z180 BUILT-IN SERIAL PORTS ASCI.ASM
|
||||
CIODEV_TERM .EQU $20 ; TERMINAL ANSI.ASM
|
||||
CIODEV_PRPCON .EQU $30 ; PROPIO SERIAL CONSOLE INTERFACE PRP.ASM
|
||||
CIODEV_PPPCON .EQU $40 ; PARPORTPROP SERIAL CONSOLE INTERFACE PPP.ASM
|
||||
CIODEV_SIO .EQU $50 ; ZILOG SERIAL PORT INTERFACE SIO.ASM
|
||||
CIODEV_ACIA .EQU $60 ; MC68B50 ASYNCHRONOUS INTERFACE ACIA.ASM
|
||||
CIODEV_PIO .EQU $70 ; ZILOG PARALLEL INTERFACE CONTROLLER PIO.ASM
|
||||
CIODEV_UF .EQU $80 ; FT232H-BASED ECB USB FIFO UF.ASM
|
||||
CIODEV_DUART .EQU $90 ; SCC2681 FAMILY DUAL UART DUART.ASM
|
||||
CIODEV_Z2U .EQU $A0 ; ZILOG Z280 BUILT-IN SERIAL PORTS Z2U.ASM
|
||||
CIODEV_LPT .EQU $B0 ; PARALLEL I/O CONTROLLER LPT.ASM
|
||||
|
||||
; HBIOS CURRENT CONSOLE NUMBER
|
||||
CIO_CONSOLE .EQU $80
|
||||
|
||||
; SPECIAL CHARS
|
||||
CTRLC .EQU $03
|
||||
CHR_BEL .EQU $07
|
||||
CHR_CR .EQU $0D
|
||||
CHR_LF .EQU $0A
|
||||
CHR_BS .EQU $08
|
||||
CHR_ESC .EQU $1B
|
||||
CHR_DEL .EQU $7F
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; BEGIN MAIN PROGRAM
|
||||
;===============================================================================
|
||||
;
|
||||
.ORG $0100
|
||||
;
|
||||
; SETUP STACK (SAVE OLD VALUE)
|
||||
; <OPT> HANDLED BY DBGMON
|
||||
LD (STKSAV),SP
|
||||
LD SP,STACK
|
||||
|
||||
|
||||
;
|
||||
; INITIALIZATION + STARTUP MESSAGE + HBIOS DETECT
|
||||
; <OPT> HANDLED BY DBGMON
|
||||
CALL INIT_PROG
|
||||
JP NZ,EXIT
|
||||
;
|
||||
; LIST HBIOS DEV OPTIONS FOR REFERENCE
|
||||
; ALSO GETS MAX CONN
|
||||
;
|
||||
; <OPT> THIS IS OPTIONAL BECAUSE IF A CHAR DEVICE DOESNT EXIST, WE NEVER READ OR
|
||||
; WRITE TO IT, WE SIMPLY CALL CIOIST AND CIOOST OVER AND OVER ON IT, WITHOUT
|
||||
; EVER PUSHING DATA TO IT
|
||||
CALL ENUM_DEV
|
||||
JP NZ,EXIT
|
||||
;
|
||||
; PARSE COMMAND LINE
|
||||
;
|
||||
CALL PARSE
|
||||
JP NZ,EXIT
|
||||
;
|
||||
; RUN CONVERSTION WITH CHAR DEVICE
|
||||
;
|
||||
CALL TALK
|
||||
;
|
||||
; DONE
|
||||
JP EXIT
|
||||
|
||||
|
||||
;
|
||||
; CLEAN UP AND RETURN TO CALLING PROCESS
|
||||
;
|
||||
EXIT:
|
||||
CALL NEWLINE ; ...
|
||||
LD HL,STR_EXITMSG ; LOAD EXIT STRING
|
||||
CALL PRTSTR ; PRINT IT
|
||||
CALL NEWLINE ; ...
|
||||
LD SP,(STKSAV) ; RESET STACK
|
||||
RET ; RETURN TO CALLER
|
||||
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; END MAIN PROGRAM
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; BEGIN MAIN PROGRAM SUBROUTINES
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
INIT_PROG:
|
||||
LD HL, STR_BANNER ; LOAD WELCOME BANNER
|
||||
CALL PRTSTR ; PRINT IT
|
||||
CALL NEWLINE ; ...
|
||||
LD HL,(ROMWBW_ID) ; GET FIRST BYTE OF ROMWBW MARKER
|
||||
LD A,(HL) ; ... THROUGH HL
|
||||
CP 'W' ; MATCH?
|
||||
JP NZ,NOTHBIOS ; ABORT WITH INVALID CONFIG BLOCK
|
||||
INC HL ; NEXT BYTE (MARKER BYTE 2)
|
||||
LD A,(HL) ; LOAD IT
|
||||
CP ~'W' ; MATCH?
|
||||
JP NZ,NOTHBIOS ; ABORT WITH INVALID CONFIG BLOCK
|
||||
LD HL,STR_HBIOS ; POINT TO HBIOS STR
|
||||
CALL PRTSTR ; PRINT IT
|
||||
CALL NEWLINE ; ...
|
||||
RET
|
||||
;
|
||||
; HBOIS NOT DETECTED, BAIL OUT W/ ERROR
|
||||
;
|
||||
NOTHBIOS:
|
||||
LD HL,STR_BIOERR ; LOAD HBIOS NOT FOUND STR
|
||||
CALL PRTSTR ; PRINT IT
|
||||
CALL NEWLINE ; ...
|
||||
AND $FF ; SET FLAGS
|
||||
RET
|
||||
|
||||
ENUM_DEV:
|
||||
;
|
||||
; CHAR COUNT HEADER
|
||||
;
|
||||
LD HL,STR_DEVS_FOUND
|
||||
CALL PRTSTR
|
||||
;
|
||||
;GET COUNT OF CHAR UNITS
|
||||
;
|
||||
LD B,H_SYSGET ; LOAD SYSGET HBIOS FUNCTION
|
||||
LD C,H_CIOCNT ; LOAD SYSGET CHAR DEV COUNT SUBFUNCTION
|
||||
CALL HBIOS_SYS ; JUMP TO HBIOS
|
||||
OR A ; SET FLAGS
|
||||
JP NZ, EXIT ; JUMP TO EXIT ON FAILED
|
||||
LD A,E ; NUM CHAR DEVICES NOW IN A
|
||||
|
||||
DEC A ; DEC NUM DEVICES TO BE 0 INDEXED
|
||||
LD (CIODEV_CNT), A ; STORE BEFORE PRINT
|
||||
LD (CIODEV_MAX), A ; STORE BEFORE PRINT
|
||||
INC A ; RESTORE NUM DEVICES VALUE
|
||||
|
||||
CALL PRTHEX ; PRINT NUMBER OF UNITS FOUND
|
||||
CALL NEWLINE ; ...
|
||||
|
||||
ENUM_DEV1:
|
||||
|
||||
LD IX, TGT_DEV
|
||||
; TODO: H AND L DONT ALWAYS GET SET BY THE DRIVERS. FIND SOME WAY TO MASK
|
||||
; THEM OUT IF THEY ARE THE SAME BEFORE AND AFTER THE CALL?
|
||||
LD B, BF_CIODEVICE ; LOAD HBIOS FUNCTION TO QUERRY DEVICE INFO
|
||||
LD HL, CIODEV_CNT ; REQUEST A CHAR DEVICE
|
||||
LD C, (HL) ; ...
|
||||
LD (IX), C ; REMEMBER WHAT DEVICE WE ASKED FOR BEFORE BE
|
||||
CALL HBIOS_SYS ; EXECUTE HBIOS SUBROUTINE
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; RETURN FAILED
|
||||
;
|
||||
; STORE RESULTS OF HBOIS DEVICE QUERRY
|
||||
;
|
||||
LD A,C ; MOVE C TO A
|
||||
LD (IX+1), A ; STORE A DEVICE ATTRIBUTES, SKIP FIRST ENTRY
|
||||
LD A,D
|
||||
LD (IX+2), A
|
||||
LD A,E
|
||||
LD (IX+3), A
|
||||
LD A,H
|
||||
LD (IX+4), A
|
||||
LD A,L
|
||||
LD (IX+5), A
|
||||
;
|
||||
; PRINT FORMATED DATA LOOP
|
||||
;
|
||||
LD B, $06 ; PRINT THE 5 ELEMENTS OF DEV_STR_TBL
|
||||
LD HL,DEV_STR_TBL ; TABLE BASE PTR
|
||||
|
||||
PLOOP_BASE:
|
||||
CALL PRTSTR ; PTRSTR INCREMENTS HL FOR US
|
||||
LD A, (IX)
|
||||
CALL PRTHEX
|
||||
LD A, '|'
|
||||
CALL COUT
|
||||
INC IX
|
||||
DJNZ PLOOP_BASE
|
||||
|
||||
CALL NEWLINE
|
||||
|
||||
LD A, (CIODEV_CNT)
|
||||
DEC A
|
||||
LD (CIODEV_CNT), A
|
||||
JP P, ENUM_DEV1 ; JUMP WHILE CIODEV_CNT >=0
|
||||
AND $00
|
||||
RET
|
||||
|
||||
|
||||
;
|
||||
; RUN CONVERSTION WITH CHAR DEVICE
|
||||
;
|
||||
TALK:
|
||||
;
|
||||
; INIT PING PONG DEVICE POINTERS
|
||||
;
|
||||
LD IX, USER_CON ; LOAD VALUE AT ADDR USER_CON
|
||||
LD A, (IX) ; LOAD VALUE AT ADDR USER_CON
|
||||
LD (RF_DEV), A ; STORE TO ADDR RF_DEV
|
||||
LD A, (IX+1) ; LOAD VALUE AT ADDR TARGET_CON
|
||||
LD (WT_DEV), A ; STORE TO ADDR WT_DEV
|
||||
;
|
||||
; READ FROM RF_DEV -> WRITE TO WT_DEV
|
||||
;
|
||||
TALK_LOOP:
|
||||
;
|
||||
; CHECK FOR DATA ON RF_DEV
|
||||
;
|
||||
LD B,BF_CIOIST ; SET HBIOS FUNCTION TO RUN
|
||||
LD HL, RF_DEV
|
||||
LD C,(HL)
|
||||
CALL HBIOS_SYS ; CHECK FOR CHAR PENDING ON INPUT BUFFER USING HBIOS
|
||||
OR A ; SET FLAGS
|
||||
JP Z,TALK_NEXT ; JUMP NO CHARACTERS READY
|
||||
JP M,TALK_NEXT ; JUMP ERROR ON READ
|
||||
;
|
||||
; EXEC READ FROM RF_DEV
|
||||
;
|
||||
LD B,BF_CIOIN ; SET FUNCTION TO RUN
|
||||
LD HL, RF_DEV
|
||||
LD C,(HL) ; RETRIEVE CON_DEV_NUM TO READ/WRITE FROM ACTIVE CONSOLE
|
||||
CALL HBIOS_SYS ; CHECK FOR CHAR PENDING USING HBIOS
|
||||
LD A,E ; MOVE RESULT TO A
|
||||
CP CTRLC ; CHECK FOR EXIT REQUEST (CTRL+C)
|
||||
RET Z ; IF SO, BAIL OUT
|
||||
PUSH AF ; SAVE THE CHAR WE READ
|
||||
;
|
||||
; CHECK FOR SPACE ON WT_DEV
|
||||
;
|
||||
LD B,BF_CIOOST ; SET HBIOS FUNCTION TO RUN
|
||||
LD HL, WT_DEV
|
||||
LD C,(HL)
|
||||
CALL HBIOS_SYS ; CHECK FOR SPACE IN OUTPUT BUFFER USING HBIOS
|
||||
|
||||
OR A ; 0 OR 1 IS A VALID RETURN
|
||||
JP Z,TALK_NEXT ; JUMP NO SPACE
|
||||
JP M,TALK_NEXT ; JUMP ERROR ON WRITE
|
||||
;
|
||||
; EXEC WRITE TO WT_DEV
|
||||
;
|
||||
LD B,BF_CIOOUT ; SET HBIOS FUNCTION TO RUN
|
||||
LD HL, WT_DEV
|
||||
LD C,(HL) ; RETRIEVE TGT_DEV_NUM TO READ/WRITE FROM TARGET CHAR DEVICE
|
||||
;
|
||||
POP AF ; RECOVER THE CHARACTER
|
||||
LD E,A ; MOVE CHARACTER TO E
|
||||
CALL HBIOS_SYS ; WRITE CHAR USING HBIOS
|
||||
|
||||
TALK_NEXT:
|
||||
;
|
||||
; SWAP RF_DEV AND WT_DEV
|
||||
;
|
||||
LD IX, RF_DEV ; LOAD VALUE AT ADDR USER_CON
|
||||
LD A, (IX) ; LOAD VALUE AT ADDR RF_DEV
|
||||
LD B, (IX+1) ; LOAD VALUE AT ADDR WT_DEV
|
||||
LD (IX+1), A ; STORE TO OLD RF_DEV TO ADDR WT_DEV
|
||||
LD A, B ; MOVE OLD WT_DEV TO A
|
||||
LD (IX), A ; STORE TO OLD WT_DEF TO ADDR RF_DEV
|
||||
JP TALK_LOOP ; LOOP
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; END MAIN PROGRAM SUBROUTINES
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; BEGIN ROUTINES THAT ARE NOT COMPATIBLE WITH DBGMON
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
|
||||
PARSE:
|
||||
;
|
||||
LD HL,$81 ; POINT TO START OF COMMAND TAIL (AFTER LENGTH BYTE)
|
||||
CALL NONBLANK ; SKIP LEADING BLANKS,
|
||||
CALL HEXBYTE
|
||||
JP C,ERRHEXRD ; IF NOT, ERR
|
||||
LD (TARGET_CON),A ; REQUESTED TARGET CONN
|
||||
|
||||
LD B,A ; MOVE TO B
|
||||
|
||||
LD HL,CIODEV_MAX ; GRAB MAX VALUE OF TARGETCON
|
||||
LD A,(HL)
|
||||
|
||||
CP B ; CHECK IF B<=A
|
||||
JP M, ERROOR ; IF B>A, and both are less then 80 then S SET, ERR
|
||||
JP C, ERROOR ; IF B> 80 carry set instead (signed numbers problem)
|
||||
; swap A and B
|
||||
|
||||
JP PE, ERROOR ; IF B>A, C SET, ERR
|
||||
|
||||
LD HL, MSGTALKING ; PRINT TARGET DEVICE
|
||||
CALL PRTSTR
|
||||
LD A, B ; RETRIEVE TARGET CON
|
||||
CALL PRTHEX
|
||||
CALL NEWLINE
|
||||
|
||||
AND $00
|
||||
RET
|
||||
|
||||
|
||||
|
||||
;
|
||||
;NOT COMPATIBLE WITH THE DBGMON FUNCTION OF THE SAME NAME
|
||||
;
|
||||
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
|
||||
|
||||
;
|
||||
;
|
||||
;===============================================================================
|
||||
; END ROUTINES THAT ARE NOT COMPATIBLE WITH DBGMON
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; BEGIN ROUTINES THAT ARE LIFTED FROM DBGMON
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
|
||||
;
|
||||
; PRINT THE VALUE IN A IN HEX WITHOUT DESTROYING ANY REGISTERS
|
||||
;
|
||||
PRTHEX:
|
||||
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 COUT ; PRINT IT
|
||||
LD A,E ; GET THE LOW ORDER HEX CHAR
|
||||
CALL COUT ; PRINT IT
|
||||
POP DE ; RESTORE DE
|
||||
RET ; DONE
|
||||
|
||||
;
|
||||
; 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
|
||||
;
|
||||
|
||||
|
||||
;
|
||||
; 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
|
||||
|
||||
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; UTILITY PROCS TO PRINT SINGLE CHARACTERS WITHOUT TRASHING ANY REGISTERS
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
PC_SPACE:
|
||||
PUSH AF
|
||||
LD A,' '
|
||||
JR PC_PRTCHR
|
||||
PC_COLON:
|
||||
PUSH AF
|
||||
LD A,':'
|
||||
JR PC_PRTCHR
|
||||
PC_CR:
|
||||
PUSH AF
|
||||
LD A,CHR_CR
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LF:
|
||||
PUSH AF
|
||||
LD A,CHR_LF
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_PRTCHR:
|
||||
CALL COUT
|
||||
POP AF
|
||||
RET
|
||||
|
||||
NEWLINE2:
|
||||
CALL NEWLINE
|
||||
NEWLINE:
|
||||
CALL PC_CR
|
||||
CALL PC_LF
|
||||
RET
|
||||
|
||||
PRTSTR:
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
CP '$'
|
||||
RET Z
|
||||
CALL COUT
|
||||
JR PRTSTR
|
||||
|
||||
;
|
||||
;__COUT_______________________________________________________________________
|
||||
;
|
||||
; OUTPUT CHARACTER FROM A
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
COUT:
|
||||
; SAVE ALL INCOMING REGISTERS
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; OUTPUT CHARACTER TO CONSOLE VIA HBIOS
|
||||
LD E,A ; OUTPUT CHAR TO E
|
||||
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR
|
||||
CALL HBIOS_SYS ; HBIOS OUTPUTS CHARACTER
|
||||
;
|
||||
; RESTORE ALL REGISTERS
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;__CIN________________________________________________________________________
|
||||
;
|
||||
; INPUT CHARACTER TO A
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
CIN:
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT)
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; INPUT CHARACTER FROM CONSOLE VIA HBIOS
|
||||
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR
|
||||
CALL HBIOS_SYS ; HBIOS READS CHARACTER
|
||||
LD A,E ; MOVE CHARACTER TO A FOR RETURN
|
||||
;
|
||||
; RESTORE REGISTERS (AF IS OUTPUT)
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
;__CST________________________________________________________________________
|
||||
;
|
||||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING)
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
CST:
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT)
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; GET CONSOLE INPUT STATUS VIA HBIOS
|
||||
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS
|
||||
CALL HBIOS_SYS ; HBIOS RETURNS STATUS IN A
|
||||
;
|
||||
; RESTORE REGISTERS (AF IS OUTPUT)
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
|
||||
|
||||
;
|
||||
;__ISHEX______________________________________________________________________
|
||||
;
|
||||
; CHECK BYTE AT (HL) FOR HEX CHAR, RET Z IF SO, ELSE NZ
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
ISHEX:
|
||||
LD A,(HL) ; CHAR TO AS
|
||||
CP '0' ; < '0'?
|
||||
JR C,ISHEX1 ; YES, NOT 0-9, CHECK A-F
|
||||
CP '9' + 1 ; > '9'
|
||||
JR NC,ISHEX1 ; YES, NOT 0-9, CHECK A-F
|
||||
XOR A ; MUST BE 0-9, SET ZF
|
||||
RET ; AND DONE
|
||||
ISHEX1:
|
||||
CP 'A' ; < 'A'?
|
||||
JR C,ISHEX2 ; YES, NOT A-F, FAIL
|
||||
CP 'F' + 1 ; > 'F'
|
||||
JR NC,ISHEX2 ; YES, NOT A-F, FAIL
|
||||
XOR A ; MUST BE A-F, SET ZF
|
||||
RET ; AND DONE
|
||||
ISHEX2:
|
||||
OR $FF ; CLEAR ZF
|
||||
RET ; AND DONE
|
||||
;
|
||||
;__HEXBYTE____________________________________________________________________
|
||||
;
|
||||
; GET ONE BYTE OF HEX DATA FROM BUFFER IN HL, RETURN IN A
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
HEXBYTE:
|
||||
LD C,0 ; INIT WORKING VALUE
|
||||
HEXBYTE1:
|
||||
CALL ISHEX ; DO WE HAVE A HEX CHAR?
|
||||
JR NZ,HEXBYTE3 ; IF NOT, WE ARE DONE
|
||||
LD B,4 ; SHIFT WORKING VALUE (C := C * 16)
|
||||
HEXBYTE2:
|
||||
SLA C ; SHIFT ONE BIT
|
||||
RET C ; RETURN W/ CF SET INDICATING OVERFLOW ERROR
|
||||
DJNZ HEXBYTE2 ; LOOP FOR 4 BITS
|
||||
CALL NIBL ; CONVERT HEX CHAR TO BINARY VALUE IN A & INC HL
|
||||
OR C ; COMBINE WITH WORKING VALUE
|
||||
LD C,A ; AND PUT BACK IN WORKING VALUE
|
||||
JR HEXBYTE1 ; DO ANOTHER CHARACTER
|
||||
HEXBYTE3:
|
||||
LD A,C ; WORKING VALUE TO A
|
||||
OR A ; CLEAR CARRY
|
||||
RET
|
||||
|
||||
;
|
||||
;__NIBL_______________________________________________________________________
|
||||
;
|
||||
; GET ONE BYTE OF HEX DATA FROM BUFFER IN HL, RETURN IN A
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
NIBL:
|
||||
LD A,(HL) ; GET K B. DATA
|
||||
INC HL ; INC KB POINTER
|
||||
CP 40H ; TEST FOR ALPHA
|
||||
JR NC,ALPH
|
||||
AND 0FH ; GET THE BITS
|
||||
RET
|
||||
ALPH:
|
||||
AND 0FH ; GET THE BITS
|
||||
ADD A,09H ; MAKE IT HEX A-F
|
||||
RET
|
||||
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; END ROUTINES THAT ARE LIFTED FROM DBGMON
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
;
|
||||
;===============================================================================
|
||||
; ERROR RESPONCES
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
ERROOR: ; REQUESTED DEV OUT OF RANGE (SYNTAX)
|
||||
CALL NEWLINE
|
||||
LD A, 'R'
|
||||
CALL COUT
|
||||
LD HL,TARGET_CON
|
||||
LD A,(HL)
|
||||
CALL PRTHEX
|
||||
|
||||
|
||||
LD A, ':'
|
||||
CALL COUT
|
||||
LD A, 'M'
|
||||
CALL COUT
|
||||
LD HL,CIODEV_MAX
|
||||
LD A,(HL)
|
||||
CALL PRTHEX
|
||||
|
||||
LD HL,MSGOOR
|
||||
JR ERROR
|
||||
ERRHEXRD: ; COMMAND HEX READ ERROR (SYNTAX)
|
||||
LD HL,MSGHEXRD
|
||||
JR ERROR
|
||||
ERRUSE: ; COMMAND USAGE ERROR (SYNTAX)
|
||||
LD HL,MSGUSE
|
||||
JR ERROR
|
||||
ERRPRM: ; COMMAND PARAMETER ERROR (SYNTAX)
|
||||
LD HL,MSGPRM
|
||||
JR ERROR
|
||||
ERROR: ; PRINT ERROR STRING AND RETURN ERROR SIGNAL
|
||||
CALL NEWLINE ; PRINT NEWLINE
|
||||
CALL PRTSTR ; PRINT ERROR STRING
|
||||
OR $FF ; SIGNAL ERROR
|
||||
RET ; DONE
|
||||
|
||||
;===============================================================================
|
||||
; STORAGE SECTION
|
||||
;===============================================================================
|
||||
;
|
||||
|
||||
; CHAR DEV COUNT
|
||||
CIODEV_CNT .DB $0
|
||||
CIODEV_MAX .DB $0
|
||||
|
||||
;TALK LOOP DATA, DEFAULT TO LOOPBACK
|
||||
USER_CON .DB $80
|
||||
TARGET_CON .DB $80
|
||||
|
||||
; PING PONG POINTERS
|
||||
RF_DEV .DB 0
|
||||
WT_DEV .DB 0
|
||||
|
||||
; TARGET CHARACTER DEVICE DATA
|
||||
TGT_DEV:
|
||||
.DB 0 ; HBIOS CHAR NUM
|
||||
.DB 0 ; C: DEVICE ATTRIBUTES
|
||||
.DB 0 ; D: DEVICE TYPE
|
||||
.DB 0 ; E: DEVICE NUMBER
|
||||
.DB 0 ; H: DEVICE MODE
|
||||
.DB 0 ; L: DEVICE I/O BASE ADDRESS
|
||||
|
||||
; STRING LITERALS
|
||||
MSGUSE .TEXT "USAGE: HTALK <CIO_DEV_ID>$"
|
||||
MSGPRM .TEXT "PARAMETER ERROR$"
|
||||
MSGOOR .TEXT "CIO VAL TOO LARGE$"
|
||||
MSGHEXRD .TEXT "HEX READ ERR$"
|
||||
MSGTALKING .TEXT "CONNECTING TO CHAR:$"
|
||||
|
||||
|
||||
DEV_STR_TBL:
|
||||
.TEXT "CHAR:$"
|
||||
.TEXT "ATTR:$"
|
||||
.TEXT "TYPE:$"
|
||||
.TEXT "NUMB:$"
|
||||
.TEXT "MODE:$"
|
||||
.TEXT "ADDR:$"
|
||||
|
||||
STR_DEVS_FOUND .TEXT "NUM CHAR DEVICES FOUND - $"
|
||||
STR_EXITMSG .TEXT "HTALK DONE$"
|
||||
STR_BANNER .TEXT "HTALK V1.0 (CTRL-C TO EXIT)$"
|
||||
STR_HBIOS .TEXT "HBIOS DETECTED$"
|
||||
STR_BIOERR .TEXT "*** UNKNOWN BIOS - BAILING OUT ***$"
|
||||
|
||||
STKSAV .DW 0 ; STACK POINTER SAVED AT START
|
||||
.FILL STKSIZ,0 ; STACK
|
||||
STACK .EQU $ ; STACK TOP
|
||||
;
|
||||
.END
|
||||
@@ -1,6 +1,6 @@
|
||||
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
|
||||
SUBDIRS = HTalk XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd Survey
|
||||
DEST = ../../Binary/Apps
|
||||
TOOLS =../../Tools
|
||||
|
||||
|
||||
@@ -15,6 +15,13 @@
|
||||
;
|
||||
;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
|
||||
@@ -240,20 +247,6 @@ TABS EQU 9 ; Tab columns
|
||||
;
|
||||
;ORG 100H
|
||||
;
|
||||
;
|
||||
;
|
||||
.Z80
|
||||
LD HL,IMGORG
|
||||
LD DE,START
|
||||
LD BC,IMGEND-IMGORG
|
||||
LDIR
|
||||
JP START
|
||||
.8080
|
||||
;
|
||||
IMGORG:
|
||||
;
|
||||
.PHASE 8000H
|
||||
;
|
||||
START:
|
||||
LXI H,0 ; Save stack pointer
|
||||
DAD SP
|
||||
@@ -261,9 +254,38 @@ START:
|
||||
LXI SP,FINIS+64
|
||||
CALL TYPE ; Type initial CRLF
|
||||
DW CRLF,CRLF
|
||||
DB TAB,'*** RomWBW System Survey (Feb 2023) ***'
|
||||
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
|
||||
@@ -445,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:
|
||||
@@ -492,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
|
||||
@@ -545,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
|
||||
@@ -555,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
|
||||
;
|
||||
@@ -572,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'
|
||||
@@ -607,9 +652,6 @@ PDLY:
|
||||
JNZ PDLY
|
||||
;
|
||||
.Z80
|
||||
; record the active bank
|
||||
ld a,(0ffe0h) ; get current hbios bank id
|
||||
ld (BANK),a ; and save it
|
||||
; Check for Z180 CPU
|
||||
xor a ; assume Z80
|
||||
ld (IS180),a ; save it
|
||||
@@ -635,6 +677,17 @@ PORTLP:
|
||||
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:
|
||||
|
||||
di ; interrupts off
|
||||
ld a,(IS180) ; Z180?
|
||||
or a
|
||||
@@ -679,11 +732,6 @@ pnum1b equ $-1
|
||||
push af
|
||||
;
|
||||
rdz:
|
||||
; Make sure correct bank is still selected!
|
||||
push af
|
||||
ld a,(BANK)
|
||||
call 0FFF3H
|
||||
pop af
|
||||
;
|
||||
ei ; interrupts back on now
|
||||
;
|
||||
@@ -818,13 +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
|
||||
BANK: DS 1 ; saved HBIOS bank id
|
||||
IS180: DS 1 ; non-zero for Z180 CPU
|
||||
ISMPCL: DS 1 ; non-zero for N8VEM SBC MPCL
|
||||
FINIS EQU $ ; End of program
|
||||
;
|
||||
.DEPHASE
|
||||
;
|
||||
IMGEND:
|
||||
;
|
||||
END
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,8 @@ set TASMTABS=%TOOLS%\tasm32
|
||||
tasm -t180 -g3 -fFF i2cscan.asm i2cscan.com i2cscan.lst || exit /b
|
||||
tasm -t180 -g3 -fFF rtcds7.asm rtcds7.com rtcds7.lst || exit /b
|
||||
tasm -t180 -g3 -fFF i2clcd.asm i2clcd.com i2clcd.lst || exit /b
|
||||
tasm -t80 -g3 -ff srom.asm srom.com srom.lst || exit /b
|
||||
|
||||
copy /Y i2c*.com ..\..\..\..\Binary\Apps\Test\ || exit /b
|
||||
copy /Y rtcds7*.com ..\..\..\..\Binary\Apps\Test\ || exit /b
|
||||
copy /Y srom.com ..\..\..\..\Binary\Apps\Test\ || exit /b
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
OBJECTS = i2cscan.com rtcds7.com i2clcd.com
|
||||
OBJECTS = i2cscan.com rtcds7.com i2clcd.com srom.com
|
||||
DEST = ../../../../Binary/Apps/Test/
|
||||
TOOLS = ../../../../Tools
|
||||
|
||||
|
||||
@@ -5,12 +5,13 @@
|
||||
; MARCO MACCAFERRI, HTTPS://WWW.MACCASOFT.COM
|
||||
; HBIOS VERSION BY PHIL SUMMERS (B1ACKMAILER) DIFFICULTLEVELHIGH@GMAIL.COM
|
||||
;
|
||||
PCF .EQU 1
|
||||
P8X180 .EQU 0
|
||||
SC126 .EQU 0
|
||||
SC137 .EQU 0
|
||||
PCFECB .EQU 0
|
||||
PCFDUO .EQU 1
|
||||
P8X180 .EQU 0
|
||||
SC126 .EQU 0
|
||||
SC137 .EQU 0
|
||||
;
|
||||
#IF (PCF)
|
||||
#IF (PCFECB)
|
||||
I2C_BASE .EQU 0F0H
|
||||
PCF_ID .EQU 0AAH
|
||||
CPU_CLK .EQU 12
|
||||
@@ -20,6 +21,16 @@ PCF_RS1 .EQU PCF_RS0+1
|
||||
PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PCFDUO)
|
||||
I2C_BASE .EQU 056H
|
||||
PCF_ID .EQU 0AAH
|
||||
CPU_CLK .EQU 12
|
||||
;
|
||||
PCF_RS0 .EQU I2C_BASE
|
||||
PCF_RS1 .EQU PCF_RS0+1
|
||||
PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE
|
||||
#ENDIF
|
||||
;
|
||||
#IF (P8X180)
|
||||
I2C_BASE .EQU 0A0h
|
||||
_sda .EQU 0
|
||||
@@ -153,8 +164,11 @@ lp5f: ld a,(addr) ; next address
|
||||
jp 0
|
||||
|
||||
signon: .db "I2C Bus Scanner"
|
||||
#IF (PCF)
|
||||
.DB " - PCF8584"
|
||||
#IF (PCFECB)
|
||||
.DB " - PCF8584 (ECB)"
|
||||
#ENDIF
|
||||
#IF (PCFDUO)
|
||||
.DB " - PCF8584 (Duodyne)"
|
||||
#ENDIF
|
||||
#IF (SC126)
|
||||
.DB " - SC126"
|
||||
@@ -219,7 +233,7 @@ _cout: ; character
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
#IF (PCF)
|
||||
#IF (PCFECB | PCFDUO)
|
||||
_i2c_start:
|
||||
PCF_START:
|
||||
LD A,PCF_START_
|
||||
@@ -418,7 +432,7 @@ PCF_PINFAIL .DB "PIN FAIL$"
|
||||
PCF_BBFAIL .DB "BUS BUSY$"
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
#IF (PCF)
|
||||
#IF (PCFECB | PCFDUO)
|
||||
_i2c_stop:
|
||||
PCF_STOP:
|
||||
LD A,PCF_STOP_ ; issue
|
||||
|
||||
1679
Source/Apps/Test/I2C/srom.asm
Normal file
1679
Source/Apps/Test/I2C/srom.asm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -27,11 +27,10 @@
|
||||
runloc .equ $C000 ; Running location (upper memory required)
|
||||
stksiz .equ $40 ; Working stack size
|
||||
;
|
||||
rmj .equ 3 ; intended HBIOS version - major
|
||||
rmn .equ 1 ; intended HBIOS version - minor
|
||||
;
|
||||
restart .equ $0000 ; CP/M restart vector
|
||||
;
|
||||
#include "../../../ver.inc"
|
||||
;
|
||||
#include "../../../HBIOS/hbios.inc"
|
||||
;
|
||||
;===============================================================================
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
runloc .equ $C000 ; Running location (upper memory required)
|
||||
stksiz .equ $40 ; Working stack size
|
||||
;
|
||||
rmj .equ 3 ; intended HBIOS version - major
|
||||
rmn .equ 1 ; intended HBIOS version - minor
|
||||
;
|
||||
restart .equ $0000 ; CP/M restart vector
|
||||
;
|
||||
;
|
||||
#include "../../../ver.inc"
|
||||
;
|
||||
#include "../../../HBIOS/hbios.inc"
|
||||
;
|
||||
;===============================================================================
|
||||
|
||||
@@ -7,20 +7,24 @@
|
||||
; keyboard, and mouse.
|
||||
;
|
||||
; WBW 2022-03-28: Add menu driven port selection
|
||||
; Add support for RHYOPHYRE
|
||||
; Add support for Rhyophyre
|
||||
; WBW 2022-04-01: Add menu for test functions
|
||||
; WBW 2022-04-02: Fix prtchr register saving/recovery
|
||||
; WBW 2023-10-19: Add support for Duodyne
|
||||
;
|
||||
;=======================================================================
|
||||
;
|
||||
; PS/2 Keyboard/Mouse controller port addresses (adjust as needed)
|
||||
;
|
||||
; MBC:
|
||||
; Nhyodyne:
|
||||
iocmd_mbc .equ $E3 ; PS/2 controller command port address
|
||||
iodat_mbc .equ $E2 ; PS/2 controller data port address
|
||||
; RPH:
|
||||
; Rhyophyre:
|
||||
iocmd_rph .equ $8D ; PS/2 controller command port address
|
||||
iodat_rph .equ $8C ; PS/2 controller data port address
|
||||
; Duodyne:
|
||||
iocmd_duo .equ $4D ; PS/2 controller command port address
|
||||
iodat_duo .equ $4C ; PS/2 controller data port address
|
||||
;
|
||||
cpumhz .equ 8 ; for time delay calculations (not critical)
|
||||
;
|
||||
@@ -77,10 +81,12 @@ setup1:
|
||||
jr z,setup1
|
||||
call upcase
|
||||
call prtchr
|
||||
cp '1' ; MBC
|
||||
cp '1' ; Nhyodyne
|
||||
jr z,setup_mbc
|
||||
cp '2' ; RHYOPHYRE
|
||||
cp '2' ; Rhyophyre
|
||||
jr z,setup_rph
|
||||
cp '3' ; Duodyne
|
||||
jr z,setup_duo
|
||||
cp 'X'
|
||||
jr z,exit
|
||||
jr setup
|
||||
@@ -101,6 +107,14 @@ setup_rph:
|
||||
ld de,str_rph
|
||||
jr setup2
|
||||
;
|
||||
setup_duo:
|
||||
ld a,iocmd_duo
|
||||
ld (iocmd),a
|
||||
ld a,iodat_duo
|
||||
ld (iodat),a
|
||||
ld de,str_duo
|
||||
jr setup2
|
||||
;
|
||||
setup2:
|
||||
call prtstr
|
||||
call crlf2
|
||||
@@ -181,6 +195,12 @@ test_kbd:
|
||||
;
|
||||
call ctlr_test
|
||||
jr nz,test_kbd_fail
|
||||
;
|
||||
ld a,$20 ; kbd enabled, mse disabled, no ints
|
||||
call ctlr_setup
|
||||
jr nz,test_kbd_fail
|
||||
;
|
||||
call ctlr_flush
|
||||
;
|
||||
call test_kbd_basic
|
||||
jr nz,test_kbd_fail
|
||||
@@ -228,9 +248,13 @@ test_mse:
|
||||
ld a,$10 ; kbd disabled, mse enabled, no ints
|
||||
call ctlr_setup
|
||||
jr nz,test_mse_fail
|
||||
;
|
||||
call ctlr_flush
|
||||
;
|
||||
call mse_reset
|
||||
jr nz,test_mse_fail
|
||||
;
|
||||
call ctlr_flush
|
||||
;
|
||||
call mse_ident
|
||||
jr nz,test_mse_fail
|
||||
@@ -262,15 +286,21 @@ test_kbdmse:
|
||||
ld a,$00 ; kbd enabled, mse enabled, no ints
|
||||
call ctlr_setup
|
||||
jr nz,test_kbdmse_fail
|
||||
;
|
||||
call ctlr_flush
|
||||
;
|
||||
call kbd_reset
|
||||
jr nz,test_kbdmse_fail
|
||||
;
|
||||
call ctlr_flush
|
||||
;
|
||||
ld a,2
|
||||
call kbd_setsc
|
||||
;
|
||||
call mse_reset
|
||||
jr nz,test_kbdmse_fail
|
||||
;
|
||||
call ctlr_flush
|
||||
;
|
||||
call mse_stream
|
||||
jr nz,test_kbdmse_fail
|
||||
@@ -290,15 +320,13 @@ test_kbdmse_fail:
|
||||
; inventory the supported scan code sets.
|
||||
;
|
||||
test_kbd_basic:
|
||||
ld a,$20 ; Xlat off for this checking
|
||||
call ctlr_setup
|
||||
ret nz
|
||||
;
|
||||
call kbd_reset
|
||||
ret nz
|
||||
;
|
||||
call ctlr_flush
|
||||
;
|
||||
call kbd_ident
|
||||
;ret nz
|
||||
ret nz
|
||||
;
|
||||
ld b,3 ; Loop control, 3 scan code sets
|
||||
ld c,1 ; Current scan code number
|
||||
@@ -436,6 +464,19 @@ ctlr_setup:
|
||||
xor a
|
||||
ret
|
||||
;
|
||||
; Flush incoming data buffer
|
||||
;
|
||||
ctlr_flush:
|
||||
call crlf2
|
||||
ld de,str_ctlr_flush
|
||||
call prtstr
|
||||
ctlr_flush1:
|
||||
call delay ; small delay
|
||||
call check_read ; data pending?
|
||||
ret nz ; return if nothing there
|
||||
call get_data_dbg ; get and discard byte
|
||||
jr ctlr_flush1 ; loop
|
||||
;
|
||||
; Perform a keyboard reset
|
||||
;
|
||||
kbd_reset:
|
||||
@@ -612,13 +653,17 @@ mse_reset:
|
||||
call crlf2
|
||||
ld de,str_mse_reset
|
||||
call prtstr
|
||||
ld a,$f2 ; Identify mouse command
|
||||
ld a,$ff ; Identify mouse command
|
||||
call put_data_mse_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
call get_data_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
cp $fa ; Is it an ack as expected?
|
||||
jp nz,err_mse_reset
|
||||
call get_data_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
cp $aa ; Success?
|
||||
jp nz,err_mse_reset
|
||||
call crlf
|
||||
ld de,str_mse_reset_ok
|
||||
call prtstr
|
||||
@@ -634,18 +679,61 @@ mse_ident:
|
||||
ld a,$f2 ; Identify mouse command
|
||||
call put_data_mse_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
mse_ident0:
|
||||
call get_data_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
|
||||
;cp $00 ; extraneous?
|
||||
;jr z,mse_ident0 ; ignore it, get another
|
||||
|
||||
cp $fa ; Is it an ack as expected?
|
||||
jp nz,err_mse_ident
|
||||
call get_data_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
; Now we need to receive 0-2 bytes. There is no way to know
|
||||
; how many are coming, so we receive bytes until there is a
|
||||
; timeout error. Timeout is shortened here so that we don't
|
||||
; have to wait seconds for the routine to complete normally.
|
||||
; A short timeout is more than sufficient here.
|
||||
ld ix,workbuf
|
||||
ld a,(timeout) ; save current timeout
|
||||
push af
|
||||
ld a,stimout ; set a short timeout
|
||||
ld (timeout),a
|
||||
ld b,8 ; buf max
|
||||
ld c,0 ; buf len
|
||||
mse_ident1:
|
||||
push bc
|
||||
call get_data_dbg
|
||||
pop bc
|
||||
jr c,mse_ident2
|
||||
ld (ix),a
|
||||
inc ix
|
||||
inc c
|
||||
djnz mse_ident1
|
||||
mse_ident2:
|
||||
pop af ; restore original timeout
|
||||
ld (timeout),a
|
||||
call crlf
|
||||
ld de,str_mse_ident_disp
|
||||
call prtstr
|
||||
pop af
|
||||
call prtdecb
|
||||
ld a,'['
|
||||
call prtchr
|
||||
ld ix,workbuf
|
||||
ld a,c ; bytes to print
|
||||
or a ; check for zero
|
||||
jr z,mse_ident4 ; handle zero
|
||||
ld b,a ; setup loop counter
|
||||
jr mse_ident3a
|
||||
mse_ident3:
|
||||
ld a,','
|
||||
call prtchr
|
||||
mse_ident3a:
|
||||
ld a,(ix)
|
||||
call prthex
|
||||
inc ix
|
||||
djnz mse_ident3
|
||||
mse_ident4:
|
||||
ld a,']'
|
||||
call prtchr
|
||||
xor a
|
||||
ret
|
||||
;
|
||||
@@ -658,8 +746,13 @@ mse_stream:
|
||||
ld a,$f4 ; Stream packets cmd
|
||||
call put_data_mse_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
mse_stream0:
|
||||
call get_data_dbg
|
||||
jp c,err_ctlr_to ; handle controller error
|
||||
|
||||
;cp $00 ; extraneous?
|
||||
;jr z,mse_stream0 ; ignore it, get another
|
||||
|
||||
cp $FA ; Is it an ack as expected?
|
||||
jp nz,err_mse_stream
|
||||
xor a
|
||||
@@ -1344,14 +1437,16 @@ delay1:
|
||||
; Constants
|
||||
;=======================================================================
|
||||
;
|
||||
str_banner .db "PS/2 Keyboard/Mouse Information v0.6a, 2-Apr-2022",0
|
||||
str_banner .db "PS/2 Keyboard/Mouse Information v0.8, 6-Nov-2023",0
|
||||
str_hwmenu .db "PS/2 Controller Port Options:\r\n\r\n"
|
||||
.db " 1 - MBC\r\n"
|
||||
.db " 2 - RHYOPHYRE\r\n"
|
||||
.db " 1 - Nhyodyne\r\n"
|
||||
.db " 2 - Rhyophyre\r\n"
|
||||
.db " 3 - Duodyne\r\n"
|
||||
.db " X - Exit Application\r\n"
|
||||
.db "\r\nSelection? ",0
|
||||
str_mbc .db "MBC",0
|
||||
str_rph .db "RHYOPHYRE",0
|
||||
str_mbc .db "Nhyodyne",0
|
||||
str_rph .db "Rhyophyre",0
|
||||
str_duo .db "Duodyne",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"
|
||||
@@ -1382,6 +1477,7 @@ str_trans_off .db "***** Testing Keyboard with Scan Code Translation DISABLED *
|
||||
str_trans_on .db "***** Testing Keyboard with Scan Code Translation ENABLED *****",0
|
||||
str_basic_mse .db "***** Basic Mouse Tests *****",0
|
||||
str_kbdmse .db "***** Test All Devices Combined *****",0
|
||||
str_ctlr_flush .db "Flushing controller input buffer",0
|
||||
str_kbd_reset .db "Attempting Keyboard Reset",0
|
||||
str_kbd_reset_ok .db "Keyboard Reset OK",0
|
||||
str_err_kbd_reset .db "Keyboard Reset Failed",0
|
||||
|
||||
201
Source/Apps/Test/sound/ay-test.asm
Normal file
201
Source/Apps/Test/sound/ay-test.asm
Normal 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
|
||||
@@ -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
|
||||
;
|
||||
|
||||
@@ -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
|
||||
@@ -626,6 +629,9 @@ CFGTBL: ; PLT RSEL RDAT RIN Z180 ACR
|
||||
;
|
||||
.DB 13, $A0, $A1, $A0, $FF, $A2 ; MBC
|
||||
.DW HWSTR_MBC
|
||||
;
|
||||
.DB 17, $A0, $A1, $A0, $FF, $A2 ; DUODYNE
|
||||
.DW HWSTR_DUO
|
||||
;
|
||||
.DB $FF ; END OF TABLE MARKER
|
||||
;
|
||||
@@ -654,8 +660,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,11 +680,12 @@ 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
|
||||
HWSTR_DUO .DB "DUODYNE Sound Module",0
|
||||
|
||||
MSGUNSUP .db "MYM files not supported with HBIOS yet!\r\n", 0
|
||||
|
||||
|
||||
BIN
Source/Apps/VGM/Tunes/More/sabredan.vgm
Normal file
BIN
Source/Apps/VGM/Tunes/More/sabredan.vgm
Normal file
Binary file not shown.
BIN
Source/Apps/VGM/Tunes/More/sure.vgm
Normal file
BIN
Source/Apps/VGM/Tunes/More/sure.vgm
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -21,8 +21,8 @@ Supported platforms
|
||||
===================
|
||||
|
||||
VGM Player is currently being developed on the ROMWBW platform using the Retrobrew computers
|
||||
EBC-SBC-V2 (Z80), ECB-SCG (AY-3-8910) and ECB-VGM (YM2612 and 2xSN76489) board.
|
||||
It can be configured to run with other hardware such as RC2014, P8X180 and nhyodyne MBC.
|
||||
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.
|
||||
|
||||
@@ -50,13 +50,15 @@ FIELDMAP.VGM - SN76489+YM2612 - Taikou Risshiden: Field Map: Summer
|
||||
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
|
||||
|
||||
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
|
||||
@@ -67,8 +69,8 @@ https://github.com/vgmrips/vgmtools
|
||||
References
|
||||
==========
|
||||
http://www.primrosebank.net/computers/mtx/tools/PD/vgmplayer.zip - Paul Daniels MTX SN76489 interrupt version with embedded VGM tune.
|
||||
https://github.com/jblang/SN76489/blob/master/examples/vgmplayer.asm - J.B. Langston RC2014 polled version with file loading.
|
||||
https://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 RC2014 & YM2151 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.
|
||||
|
||||
@@ -720,12 +720,17 @@ NOBYE: LXI H,FCB+1 ; Get primary option
|
||||
; Send option processor
|
||||
; Single option: "K" - force 1k mode
|
||||
;
|
||||
INX H ; Look for a 'K'
|
||||
CALL SNDOPC
|
||||
CALL SNDOPC
|
||||
JMP ALLSET
|
||||
SNDOPC:INX H ; Look for an option
|
||||
MOV A,M
|
||||
CPI ' ' ; Is it a space?
|
||||
JZ ALLSET ; Then we're ready to send...
|
||||
CPI 'K'
|
||||
JNZ OPTERR ; "K" is the only setable 2nd option
|
||||
JNZ CHKK
|
||||
POP PSW
|
||||
JMP ALLSET
|
||||
CHKK: CPI 'K'
|
||||
JNZ CHK6TH ; If it's not K it should be a port number
|
||||
LDA MSPEED
|
||||
CPI MINKSP ; If less than MINKSP bps, ignore 1k
|
||||
JC ALLSET ; Request
|
||||
@@ -733,7 +738,7 @@ NOBYE: LXI H,FCB+1 ; Get primary option
|
||||
STA KFLAG ; First, force us to 1K mode
|
||||
CALL ILPRT
|
||||
DB '(1k protocol selected)',CR,LF,0
|
||||
JMP ALLSET ; That's it for send...
|
||||
RET ; That's it for send...
|
||||
;
|
||||
; Receive option processor
|
||||
; 3 or 4 options: "X" - disable auto-protocol select
|
||||
@@ -5789,4 +5794,4 @@ BDPTOS EQU 83 ; Print Time on System
|
||||
ENDIF ; BYEBDOS
|
||||
;
|
||||
END
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -30,11 +30,13 @@
|
||||
; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc
|
||||
; 2022-02-28 [WBW] Use HBIOS to swap banks under CP/M 3
|
||||
; Use CPM3 BDOS direct BIOS call to get DRVTBL adr
|
||||
; 2023-06-19 [WBW] Update for revised DIODEVICE API
|
||||
; 2023-09-19 [WBW] Added CHUSB & CHSD device support
|
||||
; 2023-10-13 [WBW] Fixed DPH creation to select correct DPB
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; ToDo:
|
||||
; 1) Do something to prevent assigning slices when device does not support them
|
||||
; 2) ASSIGN C: causes drive map to be reinstalled unnecessarily
|
||||
; 1) ASSIGN C: causes drive map to be reinstalled unnecessarily
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
;===============================================================================
|
||||
@@ -664,10 +666,10 @@ makdphwbw: ; determine appropriate dpb (WBW mode, unit number in A)
|
||||
jr makdph0 ; jump ahead
|
||||
makdph00:
|
||||
ld e,6 ; assume floppy
|
||||
cp $10 ; floppy?
|
||||
cp $01 ; floppy?
|
||||
jr z,makdph0 ; yes, jump ahead
|
||||
ld e,3 ; assume ram floppy
|
||||
cp $20 ; ram floppy?
|
||||
cp $02 ; ram floppy?
|
||||
jr z,makdph0 ; yes, jump ahead
|
||||
ld e,4 ; everything else is assumed to be hard disk
|
||||
jr makdph0 ; yes, jump ahead
|
||||
@@ -1065,10 +1067,6 @@ drvmap1: ; loop through device table looking for a match
|
||||
drvmap2:
|
||||
; convert index to device type id
|
||||
ld a,c ; index to accum
|
||||
rlca ; move it to upper nibble
|
||||
rlca ; ...
|
||||
rlca ; ...
|
||||
rlca ; ...
|
||||
ld (device),a ; save as device id
|
||||
;
|
||||
; loop thru hbios units looking for device type/unit match
|
||||
@@ -1308,10 +1306,6 @@ prtdev:
|
||||
rst 08 ; call hbios, D := device, E := unit
|
||||
push de ; save results
|
||||
ld a,d ; device to A
|
||||
rrca ; isolate high nibble (device)
|
||||
rrca ; ...
|
||||
rrca ; ...
|
||||
rrca ; ... into low nibble
|
||||
and $0F ; mask out undesired bits
|
||||
push hl ; save HL
|
||||
add a,a ; multiple A by two for word table
|
||||
@@ -1405,12 +1399,11 @@ chkdev: ; HBIOS variant
|
||||
; get device/unit info
|
||||
ld b,$17 ; hbios func: diodevice
|
||||
ld c,a ; unit to C
|
||||
rst 08 ; call hbios, D := device, E := unit
|
||||
ld a,d ; device to A
|
||||
rst 08 ; call hbios, C := device attributes
|
||||
;
|
||||
; check slice support
|
||||
cp $30 ; A has device/unit, in hard disk range?
|
||||
jr c,chkdev1 ; if not hard disk, check slice val
|
||||
bit 5,c ; high capacity device?
|
||||
jr z,chkdev1 ; if not high cap, check slice val
|
||||
xor a ; otherwise, signal OK
|
||||
ret
|
||||
;
|
||||
@@ -1918,11 +1911,11 @@ dev06 .db "SD",0
|
||||
dev07 .db "PRPSD",0
|
||||
dev08 .db "PPPSD",0
|
||||
dev09 .db "HDSK",0
|
||||
dev10 .equ devunk
|
||||
dev11 .equ devunk
|
||||
dev12 .equ devunk
|
||||
dev13 .equ devunk
|
||||
dev14 .equ devunk
|
||||
dev10 .db "PPA",0
|
||||
dev11 .db "IMM",0
|
||||
dev12 .db "SYQ",0
|
||||
dev13 .db "CHUSB",0
|
||||
dev14 .db "CHSD",0
|
||||
dev15 .equ devunk
|
||||
;
|
||||
devcnt .equ 10 ; 10 devices defined
|
||||
@@ -1943,13 +1936,13 @@ stack .equ $ ; stack top
|
||||
; Messages
|
||||
;
|
||||
indent .db " ",0
|
||||
msgban1 .db "ASSIGN v1.5 for RomWBW CP/M ",0
|
||||
msgban1 .db "ASSIGN v1.8 for RomWBW CP/M ",0
|
||||
msg22 .db "2.2",0
|
||||
msg3 .db "3",0
|
||||
msbban2 .db ", 28-Feb-2022",0
|
||||
msbban2 .db ", 13-Oct-2023",0
|
||||
msghb .db " (HBIOS Mode)",0
|
||||
msgub .db " (UBIOS Mode)",0
|
||||
msgban3 .db "Copyright 2021, Wayne Warthen, GNU GPL v3",0
|
||||
msgban3 .db "Copyright 2023, Wayne Warthen, GNU GPL v3",0
|
||||
msguse .db "Usage: ASSIGN D:[=[{D:|<device>[<unitnum>]:[<slicenum>]}]][,...]",13,10
|
||||
.db " ex. ASSIGN (display all active assignments)",13,10
|
||||
.db " ASSIGN /? (display version and usage)",13,10
|
||||
|
||||
@@ -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
|
||||
@@ -190,7 +189,7 @@ show_spd:
|
||||
ld b,BF_SYSGET
|
||||
ld c,BF_SYSGET_CPUINFO
|
||||
rst 08
|
||||
jp nz,err_not_sup
|
||||
jp nz,err_api
|
||||
call crlf2
|
||||
push de ; save CPU speed for now
|
||||
push bc ; Oscillator speed to HL
|
||||
@@ -200,11 +199,19 @@ show_spd:
|
||||
call prtd3m ; print it
|
||||
ld de,str_oscspd
|
||||
call prtstr
|
||||
call crlf
|
||||
ld de,str_cpuspd
|
||||
call prtstr
|
||||
pop hl ; recover CPU speed
|
||||
call prtd3m ; print it
|
||||
ld de,str_mhz
|
||||
call prtstr
|
||||
;
|
||||
ld b,BF_SYSGET
|
||||
ld c,BF_SYSGET_CPUSPD
|
||||
rst 08
|
||||
jp nz,err_not_sup
|
||||
push de
|
||||
ret nz ; no CPU speed info, done
|
||||
push de ; save wait states for now
|
||||
ld a,l
|
||||
ld de,str_slow
|
||||
cp 0
|
||||
@@ -217,13 +224,6 @@ show_spd:
|
||||
jr z,show_spd1
|
||||
jp err_invalid
|
||||
show_spd1:
|
||||
call crlf
|
||||
call prtstr
|
||||
pop bc ; recover wait states
|
||||
pop hl ; recover CPU speed
|
||||
push bc ; resave wait states
|
||||
call prtd3m
|
||||
ld de,str_cpuspd
|
||||
call prtstr
|
||||
pop hl
|
||||
ld a,h ; memory wait states
|
||||
@@ -287,6 +287,9 @@ err_not_sup:
|
||||
err_invalid:
|
||||
ld de,str_err_invalid
|
||||
jr err_ret
|
||||
err_api:
|
||||
ld de,str_err_api
|
||||
jr err_ret
|
||||
;
|
||||
err_ret:
|
||||
call crlf2
|
||||
@@ -662,21 +665,24 @@ delay1:
|
||||
; Constants
|
||||
;=======================================================================
|
||||
;
|
||||
str_banner .db "RomWBW CPU Speed Selector v0.5, 2-Feb-2022",0
|
||||
str_banner .db "RomWBW CPU Speed Selector v0.6, 29-Dec-2023",0
|
||||
str_spacer .db " ",0
|
||||
str_oscspd .db " MHz Oscillator",0
|
||||
str_slow .db " CPU speed is HALF (",0
|
||||
str_full .db " CPU speed is FULL (",0
|
||||
str_dbl .db " CPU speed is DOUBLE (",0
|
||||
str_cpuspd .db " MHz)",0
|
||||
str_cpuspd .db " CPU speed is ",0
|
||||
str_mhz .db " MHz",0
|
||||
|
||||
str_slow .db " (Half)",0
|
||||
str_full .db " (Full)",0
|
||||
str_dbl .db " (Double)",0
|
||||
str_memws .db " Memory Wait State(s)",0
|
||||
str_iows .db " I/O Wait State(s)",0
|
||||
str_err_una .db " ERROR: UNA not supported by application",0
|
||||
str_err_inv .db " ERROR: Invalid BIOS (signature missing)",0
|
||||
str_err_ver .db " ERROR: Unexpected HBIOS version",0
|
||||
str_err_parm .db " ERROR: Parameter error (CPUSPD /? for usage)",0
|
||||
str_err_not_sup .db " ERROR: Platform or configuration not supported!",0
|
||||
str_err_not_sup .db " ERROR: Platform or configuration does not support CPU speed configuration!",0
|
||||
str_err_invalid .db " ERROR: Invalid configuration!",0
|
||||
str_err_api .db " ERROR: HBIOS API error!",0
|
||||
str_usage .db " Usage: CPUSPD <cpuspd>,<memws>,<iows>\r\n"
|
||||
.db "\r\n"
|
||||
.db " <cpuspd>: \"Half\", \"Full\", or \"Double\"\r\n"
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
; 1) Actually implement this
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
#include "../ver.inc"
|
||||
;
|
||||
;===============================================================================
|
||||
; Definitions
|
||||
;===============================================================================
|
||||
@@ -30,9 +32,6 @@ bdos .equ $0005 ; BDOS invocation vector
|
||||
;;
|
||||
;stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp
|
||||
;
|
||||
rmj .equ 3 ; CBIOS version - major
|
||||
rmn .equ 0 ; CBIOS version - minor
|
||||
;
|
||||
;===============================================================================
|
||||
; Code Section
|
||||
;===============================================================================
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
;
|
||||
@@ -31,6 +31,8 @@
|
||||
;
|
||||
;[2022/03/27] v1.8 Support RHYOPHYRE
|
||||
;
|
||||
;[2023/07/07] v1.9 Support DUODYNE
|
||||
;
|
||||
; Constants
|
||||
;
|
||||
mask_data .EQU %10000000 ; RTC data line
|
||||
@@ -41,14 +43,15 @@ 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
|
||||
PORT_DUO .EQU $94 ; RTC port for DUODYNE
|
||||
|
||||
|
||||
BDOS .EQU 5 ; BDOS invocation vector
|
||||
@@ -1079,61 +1082,66 @@ HINIT:
|
||||
LD C,PORT_SBC
|
||||
LD DE,PLT_SBC
|
||||
CP $01 ; SBC
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
CP $02 ; ZETA
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
CP $03 ; ZETA 2
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_N8
|
||||
LD DE,PLT_N8
|
||||
CP $04 ; N8
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_MK4
|
||||
LD DE,PLT_MK4
|
||||
CP $05 ; Mark IV
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RCZ80
|
||||
LD DE,PLT_RCZ80
|
||||
CP $07 ; RC2014 w/ Z80
|
||||
JR Z,RTC_INIT2
|
||||
CP $07 ; RCBus w/ Z80
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RCZ180
|
||||
LD DE,PLT_RCZ180
|
||||
CP $08 ; RC2014 w/ Z180
|
||||
JR Z,RTC_INIT2
|
||||
CP $08 ; RCBus w/ Z180
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_EZZ80
|
||||
LD DE,PLT_EZZ80
|
||||
CP $09 ; Easy Z80
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_SCZ180
|
||||
LD DE,PLT_SCZ180
|
||||
CP $0A ; SCZ180
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_DYNO
|
||||
LD DE,PLT_DYNO
|
||||
CP 11 ; DYNO
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RCZ280
|
||||
LD DE,PLT_RCZ280
|
||||
CP 12 ; RCZ280
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_MBC
|
||||
LD DE,PLT_MBC
|
||||
CP 13 ; MBC
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_RPH
|
||||
LD DE,PLT_RPH
|
||||
CP 14 ; RHYOPHYRE
|
||||
JR Z,RTC_INIT2
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
LD C,PORT_DUO
|
||||
LD DE,PLT_DUO
|
||||
CP 17 ; DUODYNE
|
||||
JP Z,RTC_INIT2
|
||||
;
|
||||
; Unknown platform
|
||||
LD DE,PLTERR ; BIOS error message
|
||||
@@ -1630,7 +1638,7 @@ TESTING_BIT_DELAY_OVER:
|
||||
|
||||
RTC_HELP_MSG:
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
.TEXT "RTC: Version 1.8"
|
||||
.TEXT "RTC: Version 1.9"
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
.TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot W)arm-start H)elp"
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
@@ -1752,14 +1760,15 @@ 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$"
|
||||
PLT_DUO .TEXT ", DUODYNE RTC Latch Port 0x70\r\n$"
|
||||
|
||||
;
|
||||
; Generic FOR-NEXT loop algorithm
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,7 +12,7 @@ Operating System (DOS), and Basic I/O System (BIOS). The CCP and DOS components
|
||||
are pre-built, relocatable binaries. The BIOS (BPBIOS) is assembled into a relocatable
|
||||
binary by the build, then the build links together all three components to form the
|
||||
final loadable image (.IMG) file. The linking process is performed by the custom BPBIOS
|
||||
linker (BPBUILD.COM). In addition to linking the 3 components, BPBUILD also sets
|
||||
linker (BPBUILD.COM). In addition to linking the 3 components, BPBUILD also
|
||||
adjusts the ZCPR environment configuration.
|
||||
|
||||
BPBUILD is designed to be run interactively. However, it can be started with an
|
||||
@@ -24,8 +24,8 @@ running of BPBUILD.
|
||||
|
||||
The CCP can be ZCPR 3.3 (ZCPR33?.REL), ZCPR 3.4 (Z34.REL), or ZCPR 4.1 (Z41.ZRL). ZCPR 3.3
|
||||
uses static references to the ZCPR segments, so a custom version of it must be assembled.
|
||||
The ZCPR33 subdirectory provides a build process for doing this. It produces a specific
|
||||
version for each of the memory segment configurations (ZCPR33T.REL & ZCPR33N.REL).
|
||||
The ZCPR33 subdirectory provides a build process for doing this. It produces a custom
|
||||
version of ZCPR33.REL with the correct static references to the ZCPR segments.
|
||||
|
||||
The DOS can be ZSDOS 1.1 (ZSDOS.ZRL) or ZSDOS 2.03 (ZS203.ZRL). These are both pre-built
|
||||
relocatable binaries. Note that only certain version combinations of ZSDOS and ZCPR are
|
||||
|
||||
@@ -3,8 +3,8 @@ setlocal
|
||||
|
||||
pushd ZCPR33 && call Build || exit /b & popd
|
||||
|
||||
set PATH=%PATH%;..\..\Tools\zxcc;..\..\Tools\cpmtools;
|
||||
|
||||
set TOOLS=..\..\Tools
|
||||
set PATH=%PATH%;%TOOLS%\zxcc;%TOOLS%\cpmtools;
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
call :makebp 33
|
||||
@@ -48,7 +48,8 @@ if exist bp%VER%.prn del bp%VER%.prn || exit /b
|
||||
ren bpbio-ww.prn bp%VER%.prn || exit /b
|
||||
if exist bp%VER%.err del bp%VER%.err || exit /b
|
||||
ren bpbio-ww.err bp%VER%.err || exit /b
|
||||
copy bpbio-ww.rel bp%VER%.rel || exit /b
|
||||
if exist bp%VER%.rel del bp%VER%.rel || exit /b
|
||||
ren bpbio-ww.rel bp%VER%.rel || exit /b
|
||||
|
||||
rem pause
|
||||
|
||||
|
||||
@@ -1,44 +1,37 @@
|
||||
VERSIONS = \
|
||||
33t 33tbnk \
|
||||
33n 33nbnk \
|
||||
34t 34tbnk \
|
||||
34n 34nbnk \
|
||||
41tbnk 41nbnk
|
||||
33 33bnk \
|
||||
33 33bnk \
|
||||
34 34bnk \
|
||||
34 34bnk \
|
||||
41bnk
|
||||
|
||||
HD0IMG = ../../Binary/hd_bp.img
|
||||
IMGFILES = $(foreach ver,$(VERSIONS),bp$(ver).img)
|
||||
DISTFILES = *.zex *.rel myterm.z3t
|
||||
|
||||
OTHERS = zcpr33n.rel zcpr33t.rel \
|
||||
bpbio-ww.rel bpsys.dat bpsys.bak bpbio-ww.err def-ww.lib *.img
|
||||
OTHERS = zcpr33.rel bp*.prn bp*.rel \
|
||||
bpbio-ww.rel bpsys.dat bpsys.bak bpbio-ww.err def-ww.lib bp*.img
|
||||
|
||||
TOOLS = ../../Tools
|
||||
|
||||
SUBDIRS = ZCPR33
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
$(HD0IMG): $(IMGFILES)
|
||||
if [ -f $(HD0IMG) ] ; then \
|
||||
for f in $(IMGFILES) $(DISTFILES) ; do \
|
||||
$(BINDIR)/cpmrm -f wbw_hd0 $(HD0IMG) 0:$$f ; \
|
||||
done ; \
|
||||
$(CPMCP) -f wbw_hd0 $(HD0IMG) $(IMGFILES) $(DISTFILES) 0: ; \
|
||||
fi
|
||||
|
||||
zcpr33n.rel zcpr33t.rel:
|
||||
zcpr33.rel:
|
||||
(cd ZCPR33 ; make)
|
||||
|
||||
all:: $(HD0IMG)
|
||||
all:: $(IMGFILES)
|
||||
|
||||
clean::
|
||||
@rm -f $(HD0IMG)
|
||||
# clean::
|
||||
# $(MAKE) --directory ZCPR3 clean
|
||||
|
||||
%.img: zcpr33n.rel zcpr33t.rel
|
||||
%.img: zcpr33.rel
|
||||
$(eval VER := $(subst .img,,$(subst bp,,$@)))
|
||||
cp def-ww-z$(VER).lib def-ww.lib
|
||||
rm -f bpbio-ww.rel
|
||||
$(ZXCC) ZMAC -BPBIO-WW -/P
|
||||
mv bpbio-ww.prn bp$(VER).prn
|
||||
if [ -f bpbio-ww.err ] ; then mv bpbio-ww.err bp$(VER).err; fi
|
||||
mv bpbio-ww.rel bp$(VER).rel
|
||||
cp bp$(VER).dat bpsys.dat
|
||||
$(ZXCC) ./bpbuild.com -bpsys.dat 0 < bpbld1.rsp
|
||||
cp bpsys.img bpsys.dat
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set PATH=%PATH%;..\..\..\Tools\zxcc;..\..\..\Tools\cpmtools;
|
||||
|
||||
set TOOLS=..\..\..\Tools
|
||||
set PATH=%PATH%;%TOOLS%\zxcc;%TOOLS%\cpmtools;
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
copy ..\z3base.lib . || exit /b
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
OBJECTS = zcpr33n.rel zcpr33t.rel
|
||||
OTHERS = z3basen.lib z3baset.lib
|
||||
OBJECTS = zcpr33.rel
|
||||
OTHERS = z3base.lib *.prn *.rel
|
||||
TOOLS = ../../../Tools
|
||||
DEST = ..
|
||||
|
||||
@@ -7,12 +7,7 @@ include $(TOOLS)/Makefile.inc
|
||||
|
||||
DIFFPATH = $(DIFFTO)/Source/BPBIOS
|
||||
|
||||
zcpr33t.rel: ../z3baset.lib
|
||||
cp ../z3baset.lib z3baset.lib
|
||||
$(ZXCC) ZMAC -zcpr33t.z80 -/P
|
||||
rm z3baset.lib
|
||||
|
||||
zcpr33n.rel: ../z3basen.lib
|
||||
cp ../z3basen.lib z3basen.lib
|
||||
$(ZXCC) ZMAC -zcpr33n.z80 -/P
|
||||
rm z3basen.lib
|
||||
zcpr33.rel: ../z3base.lib
|
||||
cp ../z3base.lib z3base.lib
|
||||
$(ZXCC) ZMAC -zcpr33.z80 -/P
|
||||
rm z3base.lib
|
||||
|
||||
@@ -421,6 +421,12 @@ DRVTBL: LD HL,DPHTBL ; Point to DPH table
|
||||
PAGE
|
||||
ENDIF ;HARDDSK
|
||||
|
||||
IF RAMDSK ; << ****** Hardware Specific ****** >>
|
||||
INCLUDE RAMD-WW.Z80 ; << This Driver is for HBIOS >>
|
||||
|
||||
PAGE
|
||||
ENDIF ;RAMDSK
|
||||
|
||||
|
||||
; << ****** Hardware Specific ****** >>
|
||||
; << Enter Warm Boot routines in >>
|
||||
|
||||
@@ -102,6 +102,9 @@ CBOOT:
|
||||
; BPCNFG to configure a generic IMG file for specific Hard Drive Partitions.
|
||||
|
||||
CBOOT0:
|
||||
LD BC,HBF_SYSRES_INT ; HB Func: Internal Reset
|
||||
CALL HBX_INVOKE ; Do it
|
||||
|
||||
LD HL,BRAME ; Get end of banked RAM
|
||||
LD (HISAV),HL ; and save for later use
|
||||
IF HARDDSK
|
||||
@@ -117,14 +120,14 @@ DYNLP: LD E,(HL)
|
||||
DEC DE ; Else back up Ptr to Driver
|
||||
DEC DE
|
||||
LD A,(DE) ; Get driver #
|
||||
; IF RAMDSK
|
||||
; DEC A
|
||||
; DEC A ; Hard Disk (Driver 2)?
|
||||
; JR Z,ADDSIZ ; ..jump if so
|
||||
; DEC A ; RAM Disk (Driver 3)?
|
||||
; ELSE
|
||||
IF RAMDSK
|
||||
DEC A
|
||||
DEC A ; Hard Disk (Driver 2)?
|
||||
JR Z,ADDSIZ ; ..jump if so
|
||||
DEC A ; RAM Disk (Driver 3)?
|
||||
ELSE
|
||||
CP 2 ; Hard Disk (Driver 2)?
|
||||
; ENDIF ; Ramdsk
|
||||
ENDIF ; Ramdsk
|
||||
JR NZ,DYNCHK ; ..jump to end if Not
|
||||
ADDSIZ: PUSH BC ; Save loop counter
|
||||
PUSH HL ; and ptr to DPH
|
||||
|
||||
@@ -268,16 +268,15 @@ MATCH: LD A,(SECMSK) ; Get the sector mask
|
||||
;
|
||||
; Modified to use HBIOS host buffer
|
||||
;
|
||||
; HSTBUF is always in HBIOS bank where I/O is done
|
||||
LD A,(TPABNK) ; TPA BANK
|
||||
DEC A ; HBIOS bank is one below
|
||||
LD C,A
|
||||
; HSTBUF is always in HBIOS bank where I/O is actually done
|
||||
LD A,(HB_BNKBIOS) ; HBIOS bank id
|
||||
LD C,A ; Set Read Source Bank
|
||||
IF BANKED
|
||||
LD A,(DMABNK) ; Set Read Destination Bank
|
||||
LD A,(DMABNK) ; Read Destination Bank
|
||||
ELSE
|
||||
LD A,(TPABNK) ; Set Read Destination Bank
|
||||
LD A,(TPABNK) ; Read Destination Bank
|
||||
ENDIF
|
||||
LD B,A
|
||||
LD B,A ; Set Read Destination Bank
|
||||
LD A,(READOP) ; Direction?
|
||||
OR A
|
||||
JR NZ,OKBNKS ; ..jump if read
|
||||
|
||||
@@ -74,7 +74,7 @@ MORDPB EQU NO ; Include additional Floppy DPB Formats?
|
||||
|
||||
;;--- RAM Disk Section ---
|
||||
;
|
||||
;RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
|
||||
;--- Hard Disk Section ---
|
||||
|
||||
@@ -133,8 +133,8 @@ BNK1 EQU BID_COM ; Second TPA Bank (Common Bank) 48000H
|
||||
BNK2 EQU BID_SYS ; System Bank (BIOS, DOS, CPR) 50000H
|
||||
BNKU EQU 00H ; User Area Bank 58000H
|
||||
; (set to 0 to disable)
|
||||
BNK3 EQU BID_RAMD ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_RAMM ; Maximum Bank # F8000H
|
||||
BNK3 EQU BID_BUF ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_BUF ; Maximum Bank # F8000H
|
||||
|
||||
IF NO ; REMOVE CODE - NOT NEEDED WITH HBIOS makes a
|
||||
; nice resource for Z180 programing in general
|
||||
|
||||
@@ -74,7 +74,7 @@ MORDPB EQU NO ; Include additional Floppy DPB Formats?
|
||||
|
||||
;;--- RAM Disk Section ---
|
||||
;
|
||||
;RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
|
||||
;--- Hard Disk Section ---
|
||||
|
||||
@@ -133,8 +133,8 @@ BNK1 EQU BID_COM ; Second TPA Bank (Common Bank) 48000H
|
||||
BNK2 EQU BID_SYS ; System Bank (BIOS, DOS, CPR) 50000H
|
||||
BNKU EQU 00H ; User Area Bank 58000H
|
||||
; (set to 0 to disable)
|
||||
BNK3 EQU BID_RAMD ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_RAMM ; Maximum Bank # F8000H
|
||||
BNK3 EQU BID_BUF ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_BUF ; Maximum Bank # F8000H
|
||||
|
||||
IF NO ; REMOVE CODE - NOT NEEDED WITH HBIOS makes a
|
||||
; nice resource for Z180 programing in general
|
||||
|
||||
@@ -74,7 +74,7 @@ MORDPB EQU NO ; Include additional Floppy DPB Formats?
|
||||
|
||||
;;--- RAM Disk Section ---
|
||||
;
|
||||
;RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
|
||||
;--- Hard Disk Section ---
|
||||
|
||||
@@ -133,8 +133,8 @@ BNK1 EQU BID_COM ; Second TPA Bank (Common Bank) 48000H
|
||||
BNK2 EQU BID_SYS ; System Bank (BIOS, DOS, CPR) 50000H
|
||||
BNKU EQU 00H ; User Area Bank 58000H
|
||||
; (set to 0 to disable)
|
||||
BNK3 EQU BID_RAMD ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_RAMM ; Maximum Bank # F8000H
|
||||
BNK3 EQU BID_BUF ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_BUF ; Maximum Bank # F8000H
|
||||
|
||||
IF NO ; REMOVE CODE - NOT NEEDED WITH HBIOS makes a
|
||||
; nice resource for Z180 programing in general
|
||||
|
||||
@@ -74,7 +74,7 @@ MORDPB EQU NO ; Include additional Floppy DPB Formats?
|
||||
|
||||
;;--- RAM Disk Section ---
|
||||
;
|
||||
;RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
|
||||
;--- Hard Disk Section ---
|
||||
|
||||
@@ -133,8 +133,8 @@ BNK1 EQU BID_COM ; Second TPA Bank (Common Bank) 48000H
|
||||
BNK2 EQU BID_SYS ; System Bank (BIOS, DOS, CPR) 50000H
|
||||
BNKU EQU 00H ; User Area Bank 58000H
|
||||
; (set to 0 to disable)
|
||||
BNK3 EQU BID_RAMD ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_RAMM ; Maximum Bank # F8000H
|
||||
BNK3 EQU BID_BUF ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_BUF ; Maximum Bank # F8000H
|
||||
|
||||
IF NO ; REMOVE CODE - NOT NEEDED WITH HBIOS makes a
|
||||
; nice resource for Z180 programing in general
|
||||
|
||||
@@ -74,7 +74,7 @@ MORDPB EQU NO ; Include additional Floppy DPB Formats?
|
||||
|
||||
;;--- RAM Disk Section ---
|
||||
;
|
||||
;RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made
|
||||
|
||||
;--- Hard Disk Section ---
|
||||
|
||||
@@ -133,8 +133,8 @@ BNK1 EQU BID_COM ; Second TPA Bank (Common Bank) 48000H
|
||||
BNK2 EQU BID_SYS ; System Bank (BIOS, DOS, CPR) 50000H
|
||||
BNKU EQU 00H ; User Area Bank 58000H
|
||||
; (set to 0 to disable)
|
||||
BNK3 EQU BID_RAMD ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_RAMM ; Maximum Bank # F8000H
|
||||
BNK3 EQU BID_BUF ; First Bank for RAM disk 60000H
|
||||
BNKM EQU BID_BUF ; Maximum Bank # F8000H
|
||||
|
||||
IF NO ; REMOVE CODE - NOT NEEDED WITH HBIOS makes a
|
||||
; nice resource for Z180 programing in general
|
||||
|
||||
@@ -310,6 +310,32 @@ diskdef wbw_rom1024
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# RomWBW 512KB RAM (256KB reserved, 256KB RAM Disk)
|
||||
|
||||
diskdef wbw_ram512
|
||||
seclen 512
|
||||
tracks 8
|
||||
sectrk 64
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 0
|
||||
boottrk 0
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# RomWBW 1024KB RAM (256KB reserved, 768KB RAM Disk)
|
||||
|
||||
diskdef wbw_ram1024
|
||||
seclen 512
|
||||
tracks 24
|
||||
sectrk 64
|
||||
blocksize 2048
|
||||
maxdir 256
|
||||
skew 0
|
||||
boottrk 0
|
||||
os 2.2
|
||||
end
|
||||
|
||||
# RomWBW 720K floppy media
|
||||
|
||||
diskdef wbw_fd720
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
; NOTE: No Skew Table needed since Hard Disk Format is locked w/No Skew
|
||||
|
||||
;.....
|
||||
; Currently, BPBIOS supports 2 memory drive devices and 3 phyical hard
|
||||
; Currently, BPBIOS supports 2 memory drive devices and 3 physical hard
|
||||
; drive like devices. BPBIOS can support seven but unfortunately
|
||||
; BPCNFG only supports 3 hard drive like devices and the source
|
||||
; code is not available, so menu 4 is meaningless. Devices
|
||||
@@ -64,26 +64,22 @@
|
||||
;
|
||||
; Starting with ver 2.8 of HBIOS, devices are discovered at boot
|
||||
; time and assigned device numbers. Since devices are tested in
|
||||
; a certain order, the device numbers are somewhat predicably
|
||||
; a certain order, the device numbers are somewhat predictably
|
||||
; assigned. Memory drives are discovered first. IDE drives are
|
||||
; discovered next so that IDE Hard drives including CF cards are
|
||||
; assigned device 2 and device 3 if a slave drive is supported by
|
||||
; the interface. Next comes the SD drive and is assigned device 3
|
||||
; or 4 depending on the whether there is an ide slave drive.
|
||||
; USB drive is assigned device 4 or 5 . For SIMH HDSK0 is device 0
|
||||
; USB drive is assigned device 4 or 5. For SIMH HDSK0 is device 0
|
||||
; and HDSK1 is device 1. Memory drives are now handled as LBA
|
||||
; devices, ie like hard drives.
|
||||
;
|
||||
; The following non-memory drive capacities and configurations used for
|
||||
; the SIMH, SD and IDE drives: Slice geometry is 256, 512 byte sectors,
|
||||
; 1 head per track and 1 with one reserved track, a block size of 4096
|
||||
; bytes with 512 directory entries. An equivalent geometry is 16
|
||||
; sectors and 16 heads per track. Internally BPBIOS uses a uniform
|
||||
; logical organization with 64 logical records per logical track.
|
||||
; Thus there are 16 logical tracks per physical track with 1040
|
||||
; logical (65 physical) tracks per slice. If all partitions are not
|
||||
; physically present, the missing partitions can be disabled in the
|
||||
; BPBCNFG configuration file or by hand. Note that HBIOS uses LBA,
|
||||
; the SIMH, SD and IDE drives: Track geometry is 16 512 byte sectors.
|
||||
; A slice is exactly 64 tracks, with 1 of the 64 tracks as a system
|
||||
; track. There are 1024 directory entries per slice. If all partitions
|
||||
; are not physically present, the missing partitions can be disabled in
|
||||
; the BPBCNFG configuration file or by hand. Note that HBIOS uses LBA,
|
||||
; Logical Block Addressing, for non-floppy drives.
|
||||
;
|
||||
; For SBC V1,2, ZETA, MARK IV and N8, the following non-memory partitions
|
||||
@@ -94,26 +90,26 @@
|
||||
; partition Size Blocks Block Offset in
|
||||
; MByte Size logical tracks
|
||||
;====================================================================
|
||||
; C 8 2048 4096 1*16 = 16
|
||||
; D 8 2048 4096 (1+65)*16 = 1056
|
||||
; E 8 2048 4096 (1+2*65)*16 = 2096
|
||||
; F 8 2048 4096 (1+3*65)*16 = 3136
|
||||
; G 8 2048 4096 (1+4*65)*16 = 4176
|
||||
; H 8 2048 4096 (1+5*65)*16 = 5216
|
||||
; I 8 2048 4096 (1+6*65)*16 = 6256
|
||||
; J 8 2048 4096 (1+7*65)*16 = 7296
|
||||
; C 8 2044 4096 128+(1024*0)+2 = 130
|
||||
; D 8 2044 4096 128+(1024*1)+2 = 1154
|
||||
; E 8 2044 4096 128+(1024*2)+2 = 2178
|
||||
; F 8 2044 4096 128+(1024*3)+2 = 3202
|
||||
; G 8 2044 4096 128+(1024*4)+2 = 4226
|
||||
; H 8 2044 4096 128+(1024*5)+2 = 5250
|
||||
; I 8 2044 4096 128+(1024*6)+2 = 6274
|
||||
; J 8 2044 4096 128+(1024*7)+2 = 7298
|
||||
;
|
||||
; These are capacities and configurations used for SD card:
|
||||
;
|
||||
; partition Size Blocks Block Offset
|
||||
; MByte Size logical tracks
|
||||
;====================================================================
|
||||
; K 8 2048 4096 1*16 = 16
|
||||
; L 8 2048 4096 (1+65)*16 = 1056
|
||||
; M 8 2048 4096 (1+2*65)*16 = 2096
|
||||
; N 8 2048 4096 (1+3*65)*16 = 3136
|
||||
; K 8 2044 4096 128+(1024*0)+2 = 130
|
||||
; L 8 2044 4096 128+(1024*1)+2 = 1154
|
||||
; M 8 2044 4096 128+(1024*2)+2 = 2178
|
||||
; N 8 2044 4096 128+(1024*3)+2 = 3202
|
||||
;
|
||||
; RAM drive is paritition A while ROM drive is partition B.
|
||||
; RAM drive is partition A while ROM drive is partition B.
|
||||
;
|
||||
; For example, a typical Memory drive configuration is:
|
||||
;
|
||||
@@ -199,17 +195,17 @@ DPBROM: DEFW 64 ; Sectors/Track
|
||||
; even though real layout is 256 physical
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
HSIZ0 EQU 2048 ; # of blocks in first Partition (1024 trks)
|
||||
HSIZ0 EQU 2048 - 4 ; # of blocks in first Partition (1022 trks)
|
||||
;
|
||||
DPB50: DEFW 64 ; Sctrs/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ0-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 - 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1 - 4 blocks
|
||||
DEFW HSIZ0-1 ; Disk Size-1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check Size
|
||||
DEFW 16 ; Trk Offset
|
||||
DEFW 128+(1024*0)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -226,17 +222,17 @@ DPB50: DEFW 64 ; Sctrs/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ1 EQU 2048 ; # of blocks in Second Partition (1024 trks)
|
||||
HSIZ1 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB51: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ1-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+65)*16 ; Track offset 1056
|
||||
DEFW 128+(1024*1)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -253,21 +249,21 @@ DPB51: DEFW 64 ; Scts/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ2 EQU 2048 ; # of blocks in third Partition (1024 tracks)
|
||||
HSIZ2 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB52: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ2-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+2*65)*16 ; Track offset = 2096
|
||||
DEFW 128+(1024*2)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
; Partition F. HBIOS Disk 0, Slice 4
|
||||
; Partition F. HBIOS Disk 0, Slice 3
|
||||
|
||||
IF DRV_F
|
||||
DEFB 'HBDSK0:3 ','F'+80H ; Id - 10 bytes
|
||||
@@ -280,17 +276,17 @@ DPB52: DEFW 64 ; Scts/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ3 EQU 2048 ; # of blocks in Fourth Partition (1024 tracks)
|
||||
HSIZ3 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB53: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ3-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+3*65)*16 ; Track offset = 3136
|
||||
DEFW 128+(1024*3)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -307,17 +303,17 @@ DPB53: DEFW 64 ; Scts/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ4 EQU 2048 ; # of blocks in first Partition (1024 trks)
|
||||
HSIZ4 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB54: DEFW 64 ; Sctrs/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ4-1 ; Disk Size - 1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+4*65)*16 ; Track offset = 16
|
||||
DEFW 128+(1024*4)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -334,17 +330,17 @@ DPB54: DEFW 64 ; Sctrs/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ5 EQU 2048 ; # of blocks in Second Partition (1024 trks)
|
||||
HSIZ5 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB55: DEFW 64 ; Sctrs/Trk - actually 256
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ5-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1
|
||||
DEFB 0F0H,0 ; Alloc 0,1 - 4 blocks
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check Size
|
||||
DEFW (1+5*65)*16 ; Trk Offset = 1056
|
||||
DEFW 128+(1024*5)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -361,17 +357,17 @@ DPB55: DEFW 64 ; Sctrs/Trk - actually 256
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ6 EQU 2048 ; # of blocks in third Partition (1024 tracks)
|
||||
HSIZ6 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB56: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ6-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+6*65)*16 ; Track offset = 2096
|
||||
DEFW 128+(1024*6)+2 ; Trk Offset
|
||||
ENDIF
|
||||
|
||||
;.....
|
||||
@@ -388,17 +384,17 @@ DPB56: DEFW 64 ; Scts/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ7 EQU 2048 ; # of blocks in Fourth Partition (1024 tracks)
|
||||
HSIZ7 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB57: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ7-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+7*65)*16 ; Track offset = 3136
|
||||
DEFW 128+(1024*7)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -414,17 +410,18 @@ DPB57: DEFW 64 ; Scts/Trk
|
||||
; even though real layout is 256 physical
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
HSIZ8 EQU 2048 ; # of blocks in first Partition (1024 trks)
|
||||
|
||||
HSIZ8 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB58: DEFW 64 ; Sctrs/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ8-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 - 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1 - 4 blocks
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check Size
|
||||
DEFW 16 ; Trk Offset
|
||||
DEFW 128+(1024*0)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -441,17 +438,17 @@ DPB58: DEFW 64 ; Sctrs/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ9 EQU 2048 ; # of blocks in Second Partition (1024 trks)
|
||||
HSIZ9 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB59: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ9-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+65)*16 ; Track offset 1056
|
||||
DEFW 128+(1024*1)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -468,17 +465,17 @@ DPB59: DEFW 64 ; Scts/Trk
|
||||
; sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ10 EQU 2048 ; # of blocks in Second Partition (1024 trks)
|
||||
HSIZ10 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
;
|
||||
DPB60: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ10 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1 4 blocks
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW HSIZ10-1 ; Disk Size-1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+2*65)*16 ; Track offset 2096
|
||||
DEFW 128+(1024*2)+2 ; Trk Offset
|
||||
ENDIF
|
||||
;
|
||||
;.....
|
||||
@@ -492,18 +489,17 @@ DPB60: DEFW 64 ; Scts/Trk
|
||||
DEFB 16 ; Logical Sectors per track
|
||||
DEFB 0 ; Physical tracks/side (No Meaning in HD)
|
||||
|
||||
HSIZ11 EQU 2048 ; # of blocks in Forth Logical Drive
|
||||
; (1024 tracks)
|
||||
HSIZ11 EQU 2048 - 4 ; # of blocks in Second Partition (1022 trks)
|
||||
|
||||
DPB61: DEFW 64 ; Scts/Trk
|
||||
DEFB 5 ; Blk Shf Fctr
|
||||
DEFB 31 ; Block Mask
|
||||
DEFB 1 ; Extent Mask
|
||||
DEFW HSIZ11-1 ; Disk Size-1
|
||||
DEFW 511 ; Dir Max-1
|
||||
DEFB 0F0H,0 ; Alloc 0,1
|
||||
DEFW 1024-1 ; Dir Max-1
|
||||
DEFB 0FFH,0 ; Alloc 0,1
|
||||
DEFW 0 ; Check size
|
||||
DEFW (1+3*65)*16 ; Track offset 3136
|
||||
DEFW 128+(1024*3)+2 ; Trk Offset
|
||||
ENDIF
|
||||
|
||||
;=========== End of Hard Disk DPBs ===========
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
; 1.0 - 31 Aug 92 - General Release. HFB
|
||||
; 0.1 - 3 Jan 92 - Initial release. HFB
|
||||
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
; The Physical Drive Number byte (XDPH+3) is simply an index to the Physical
|
||||
; Drive as specified in the ICFG-xx.Z80 file. Up to three physical drives
|
||||
; may be defined in that section, the first byte of which defines the
|
||||
; Physical/Logical Unit Address (Device & LUN for SCSI, Master/Slave for IDE),
|
||||
; The Logical Drive Number byte (XDPH+3) is simply an index into the
|
||||
; BPBIOS physical drive table as specified in the ICFG-xx.Z80 file.
|
||||
; BPBIOS supports exactly three logical drives which
|
||||
; are defined in that section, the first byte of which defines the
|
||||
; Physical Unit (HBIOS Disk Unit)
|
||||
; and a flag bit to specify whether or not the drive is physically present.
|
||||
; See ICFG-xx.Z80 for a definition of the data.
|
||||
|
||||
@@ -21,7 +22,7 @@
|
||||
|
||||
XDPH90: DEFB TRUE ; Format lock flag (Lock RAM Drive)
|
||||
DEFB FIXDSK ; Disk Drive Type
|
||||
DEFB 2 ; Driver ID = Treat as Hard Drive
|
||||
DEFB 3 ; Driver ID = Treat as Hard Drive
|
||||
DEFB HB_MDRAM ; Physical Drive Number
|
||||
DPH$90: DEFW 0 ; Skew Table pointer
|
||||
DEFW 0,0,0 ; Scratch area
|
||||
@@ -34,7 +35,7 @@ DPH$90: DEFW 0 ; Skew Table pointer
|
||||
|
||||
XDPH91: DEFB TRUE ; Format lock flag (Lock ROM Drive)
|
||||
DEFB FIXDSK ; Disk Drive Type
|
||||
DEFB 2 ; Driver ID = Treat as Hard Drive
|
||||
DEFB 3 ; Driver ID = Treat as Hard Drive
|
||||
DEFB HB_MDROM ; Physical Drive Number
|
||||
DPH$91: DEFW 0 ; Skew Table pointer
|
||||
DEFW 0,0,0 ; Scratch area
|
||||
@@ -48,7 +49,7 @@ DPH$91: DEFW 0 ; Skew Table pointer
|
||||
XDPH50: DEFB TRUE ; Format lock flag (Lock First Hard Drive)
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..6] for this Partition
|
||||
DEFB 0 ; Logical drive [0..2] for this Partition
|
||||
DPH$50: DEFW 0 ; Skew table pointer
|
||||
DEFW 0,0,0 ; Scratch area
|
||||
DEFW DIRBUF ; Directory buffer pointer
|
||||
@@ -61,7 +62,7 @@ DPH$50: DEFW 0 ; Skew table pointer
|
||||
XDPH51: DEFB TRUE ; --- Second Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..6] for this Partition
|
||||
DEFB 0 ; Logical drive [0..2] for this Partition
|
||||
DPH$51: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -74,7 +75,7 @@ DPH$51: DEFW 0
|
||||
XDPH52: DEFB TRUE ; --- Third Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..2] for this Partition
|
||||
DEFB 0 ; Physical drive [0..2] for this Partition
|
||||
DPH$52: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -87,7 +88,7 @@ DPH$52: DEFW 0
|
||||
XDPH53: DEFB TRUE ; --- Fourth Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..6] for this Partition
|
||||
DEFB 0 ; Logical drive [0..2] for this Partition
|
||||
DPH$53: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -100,7 +101,7 @@ DPH$53: DEFW 0
|
||||
XDPH54: DEFB TRUE ; --- Fifth Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..6] for this Partition
|
||||
DEFB 0 ; Logical drive [0..2] for this Partition
|
||||
DPH$54: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -113,7 +114,7 @@ DPH$54: DEFW 0
|
||||
XDPH55: DEFB TRUE ; --- Sixth Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..6] for this Partition
|
||||
DEFB 0 ; Logical drive [0..2] for this Partition
|
||||
DPH$55: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -126,7 +127,7 @@ DPH$55: DEFW 0
|
||||
XDPH56: DEFB TRUE ; --- Seventh Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..6] for this Partition
|
||||
DEFB 0 ; Logical drive [0..2] for this Partition
|
||||
DPH$56: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -139,7 +140,7 @@ DPH$56: DEFW 0
|
||||
XDPH57: DEFB TRUE ; --- Eighth Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV0 ; Physical drive [0..6] for this Partition
|
||||
DEFB 0 ; Logical drive [0..2] for this Partition
|
||||
DPH$57: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -152,7 +153,7 @@ DPH$57: DEFW 0
|
||||
XDPH58: DEFB TRUE ; --- Ninth Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV1 ; Physical drive [0..6] for this Partition
|
||||
DEFB 1 ; Logical drive [0..2] for this Partition
|
||||
DPH$58: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -165,7 +166,7 @@ DPH$58: DEFW 0
|
||||
XDPH59: DEFB TRUE ; --- Tenth Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV1 ; Physical drive [0..6] for this Partition
|
||||
DEFB 1 ; Logical drive [0..2] for this Partition
|
||||
DPH$59: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -178,7 +179,7 @@ DPH$59: DEFW 0
|
||||
XDPH60: DEFB TRUE ; --- Eleventh Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV1 ; Physical drive [0..6] for this Partition
|
||||
DEFB 1 ; Logical drive [0..2] for this Partition
|
||||
DPH$60: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
@@ -191,7 +192,7 @@ DPH$60: DEFW 0
|
||||
XDPH61: DEFB TRUE ; --- Twelveth Hard Drive/Partition
|
||||
DEFB FIXDSK ; Disk drive type
|
||||
DEFB 2 ; Driver ID - 2=hard drive
|
||||
DEFB HB_HDDEV1 ; Physical drive [0..6] for this Partition
|
||||
DEFB 1 ; Logical drive [0..2] for this Partition
|
||||
DPH$61: DEFW 0
|
||||
DEFW 0,0,0
|
||||
DEFW DIRBUF
|
||||
|
||||
@@ -104,15 +104,69 @@ SELHD: ; SET DEVICE
|
||||
; Writes from HSTBUF using HSTTRK and HSTSEC to build Block Number.
|
||||
; NOTE: This routine uses physical drive characteristics from ICFG-xx.
|
||||
|
||||
HDWRIT:
|
||||
HDWRIT:
|
||||
; CALL PRTSTRD
|
||||
; DEFB '[HD WRITE]$'
|
||||
|
||||
XOR A
|
||||
LD (HSTWRT),A ; Show no active writes pending
|
||||
JP HDSK_WRITE ; ..continue
|
||||
|
||||
LD B,HB_DIOWRITE ; HBIOS WRITE
|
||||
JR HDIO ; ..continue
|
||||
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
; Read from Hard Disk Drive < Internal BIOS Routine >
|
||||
; Reads to HSTBUF using HSTTRK and HSTSEC to build Block Number.
|
||||
|
||||
HDREAD:
|
||||
; CALL PRTSTRD ; DEBUG
|
||||
; DEFB '[HD READ]$' ; DEBUG
|
||||
|
||||
LD B,HB_DIOREAD ; HBIOS READ
|
||||
JR HDIO ; ..continue
|
||||
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
; Common read/write code for hard disk
|
||||
|
||||
HDIO:
|
||||
LD HL,(HSTDPH) ; GET ACTIVE DPH POINTER
|
||||
DEC HL ; ADJUST TO POINT TO BPBIOS LOGICAL UNIT NUMBER
|
||||
LD A,(HL) ; LOAD IT IN A
|
||||
;
|
||||
; Convert logical -> physical
|
||||
; Code below is ugly brute force approach, but since there are
|
||||
; always exactly 3 logical drives in BPBIOS and the first one
|
||||
; is the most commonly used, this turns out to be reasonably
|
||||
; efficient.
|
||||
LD HL,HDRV0 ; PERHAPS HDRV0
|
||||
OR A ; A == 0?
|
||||
JR Z,HDSK_HDIO1 ; HANDLE IF SO
|
||||
LD HL,HDRV1 ; PERHAPS HDRV1
|
||||
DEC A ; A == 1?
|
||||
JR Z,HDSK_HDIO1 ; HANDLE IF SO
|
||||
LD HL,HDRV2 ; PERHAPS HDRV2
|
||||
DEC A ; A == 2?
|
||||
JR Z,HDSK_HDIO1 ; HANDLE IF SO
|
||||
CALL PANIC ; INVALID LOGICAL UNIT NUMBER
|
||||
HDSK_HDIO1:
|
||||
LD A,(HL) ; LOAD PHYS UNIT NUM (HBIOS DISK UNIT)
|
||||
AND 0FH ; REMOVE EXTRANEOUS BITS
|
||||
LD C,A ; PUT IN C FOR BELOW
|
||||
JR HB_DSKIO
|
||||
|
||||
IF BANKED
|
||||
COMMON /BANK2/
|
||||
ELSE
|
||||
CSEG
|
||||
ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS Disk Driver Interface
|
||||
;==================================================================================================
|
||||
;
|
||||
; Enter with B=HBIOS disk function code (read/write)
|
||||
; C=HBIOS disk unit number
|
||||
;
|
||||
; NOTE: This routine uses physical drive characteristics from ICFG-xx.
|
||||
; The routine computes a sequential block number with the algorithm;
|
||||
; Trk * 16 + Sector, HBIOS uses LBA addressing for hard drive like
|
||||
@@ -127,43 +181,8 @@ HDWRIT:
|
||||
; Sector := (Block# MOD hdSPT)+1 (* Quotient1 := Block# DIV hdSPT *)
|
||||
; Head := Quotient1 MOD hdHds (* Quotient2 := Quotient1 DIV hdHds *)
|
||||
; Track := Quotient2
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
|
||||
HDREAD:
|
||||
JP HDSK_READ
|
||||
|
||||
IF BANKED
|
||||
COMMON /BANK2/
|
||||
ELSE
|
||||
CSEG
|
||||
ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS Disk Driver Interface
|
||||
;==================================================================================================
|
||||
;
|
||||
; HBIOS disk commands
|
||||
;
|
||||
HB_DSKRD EQU 13H
|
||||
HB_DSKWR EQU 14H
|
||||
;
|
||||
HDSK_READ:
|
||||
; CALL PRTSTRD ; DEBUG
|
||||
; DEFB '[HDSK READ]$' ; DEBUG
|
||||
|
||||
LD B,HB_DSKRD ; HBIOS DISK READ (13H)
|
||||
JR HDSK_RW
|
||||
;
|
||||
HDSK_WRITE:
|
||||
; CALL PRTSTRD
|
||||
; DEFB '[HDSK WRITE]$'
|
||||
|
||||
LD B,HB_DSKWR ; HBIOS DISK WRITE (14H)
|
||||
;
|
||||
HDSK_RW:
|
||||
LD HL,(HSTDPH) ; GET ACTIVE DPH POINTER
|
||||
DEC HL ; ADJUST TO POINT TO UNIT NUMBER
|
||||
LD C,(HL) ; LOAD IT IN C FOR HBIOS CALL LATER
|
||||
HB_DSKIO:
|
||||
PUSH BC ; SAVE FUNCTION AND DEVICE FOR LATER
|
||||
LD HL,(HSTTRK) ; GET TRACK VALUE
|
||||
LD A,L ; LSB OF TRACK TO A
|
||||
@@ -172,10 +191,10 @@ HDSK_RW:
|
||||
LD A,(HSTSEC) ; GET SECTOR
|
||||
LD E,A ; STUFF IT IN E
|
||||
LD B,4 ; PREPARE TO SHIFT OUT 4 BIT HEAD VALUE
|
||||
HDSK_RW1:
|
||||
HB_DSKIO1:
|
||||
SRL H ; SHIFT ONE BIT OUT
|
||||
RR L ; ... OF HL
|
||||
DJNZ HDSK_RW1 ; DO ALL 4 BITS
|
||||
DJNZ HB_DSKIO1 ; DO ALL 4 BITS
|
||||
POP BC ; RECOVER FUNCTION AND DEVICE
|
||||
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT
|
||||
LD B,12H ; SETUP FOR NEW SEEK CALL
|
||||
@@ -183,7 +202,6 @@ HDSK_RW1:
|
||||
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT
|
||||
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A
|
||||
LD HL,(HB_DSKBUF) ; GET BUFFER ADDRESS
|
||||
;LD D,BID_HB ; BUFFER IN HBIOS BANK
|
||||
LD A,(HB_BNKBIOS) ; BUFFER IN HBIOS BANK
|
||||
LD D,A ; PUT IN D
|
||||
LD E,1 ; ONE SECTOR
|
||||
@@ -193,17 +211,3 @@ HDSK_RW1:
|
||||
|
||||
OR 0FFH ; A=$FF TO SIGNAL ERROR
|
||||
RET ; AND DONE W/ ERROR
|
||||
;
|
||||
;==================================================================================================
|
||||
; HDSK DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
IF BANKED
|
||||
COMMON /B2RAM/
|
||||
ELSE
|
||||
DSEG
|
||||
ENDIF
|
||||
|
||||
HDSK_PDN DEFS 1 ; PHYSICAL DEVICE
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
HBF_ALLOC EQU 0F6H ; HBIOS Func: ALLOCATE Heap Memory
|
||||
HBF_PEEK EQU 0FAH ; HBIOS Func: Peek Byte
|
||||
HBF_POKE EQU 0FBH ; HBIOS Func: Poke Byte
|
||||
HBF_SYSRES_INT EQU 0F000H ; HBIOS Func: Internal Reset
|
||||
HBF_MEMINFO EQU 0F8F1H ; HBIOS Func: Get Memory Info
|
||||
HBF_BNKINFO EQU 0F8F2H ; HBIOS Func: Get Bank Info
|
||||
;
|
||||
@@ -26,6 +27,11 @@ HBX_SRCBNK EQU 0FFE4H
|
||||
HBX_DSTADR EQU 0FFE5H
|
||||
HBX_DSTBNK EQU 0FFE7H
|
||||
HBX_CPYLEN EQU 0FFE8H
|
||||
;
|
||||
; HBIOS disk commands
|
||||
;
|
||||
HB_DIOREAD EQU 13H
|
||||
HB_DIOWRITE EQU 14H
|
||||
|
||||
CSEG
|
||||
|
||||
@@ -43,22 +49,23 @@ HBX_CPYLEN EQU 0FFE8H
|
||||
; call here, make required changes, then update the
|
||||
; BIOSJT to point directly to the normal SELMEM routine for
|
||||
; all subsequent calls.
|
||||
;
|
||||
; When called, the incoming bank id will be the original hard-coded
|
||||
; bank id prior to any adjustments. These original bank id's are
|
||||
; coded to be an offset from the ending HBIOS RAM bank id which
|
||||
; is (80h + RAM banks). See romwbw.lib. We update the requested
|
||||
; bank id for this initial call to make it the proper absolute
|
||||
; HBIOS bank id.
|
||||
;
|
||||
; See romwbw.lib for additional RAM bank layout information.
|
||||
|
||||
; BPBIOS HBIOS Typical
|
||||
; ------------ -------------- --------------
|
||||
; -1: <COMMON> BID_COM 90h - 1 = 8Fh
|
||||
; -2: TPABNK BID_USR 90h - 2 = 8Eh
|
||||
; -3: <HBIOS> BID_BIOS 90h - 3 = 8Dh
|
||||
; -4: SYSBNK BID_AUX 90h - 4 = 8Ch
|
||||
; -9: BNKM BID_AUX-5 90h - 9 = 87h
|
||||
; -16: RAMBNK RAMD0 90h - 16 = 80h
|
||||
|
||||
HB_SELMEM:
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
|
||||
PUSH AF ; Save incoming bank request
|
||||
|
||||
IF HB_DEBUG AND FALSE
|
||||
CALL PRTSTRD
|
||||
DEFB '[HB_SELMEM: $'
|
||||
@@ -68,23 +75,30 @@ HB_SELMEM:
|
||||
ENDIF
|
||||
|
||||
LD BC,HBF_BNKINFO ; HBIOS BNKINFO function
|
||||
CALL HBX_INVOKE ; DO IT, D=BID_BIOS, E=BID_USER
|
||||
LD A,D ; BID_BIOS
|
||||
LD (HB_BNKBIOS),A ; SET HB_BNKBIOS
|
||||
ADD A,3 ; HBIOS + 3
|
||||
LD (HB_BNKEND),A ; ... is the ending RAM bank
|
||||
IF BANKED
|
||||
LD (BNKADJ+1),A ; Dynamically update SELBNK
|
||||
ENDIF
|
||||
|
||||
CALL HBX_INVOKE ; Do it, D=BIOS bank, E=USER (TPA) bank
|
||||
LD A,D ; BIOS bank
|
||||
LD (HB_BNKBIOS),A ; Save it for later (deblock & hard-ww)
|
||||
LD A,E ; USER (TPA) bank
|
||||
LD (TPABNK),A ; Update BP register
|
||||
DEC A ; SYS bank is one below USER
|
||||
LD (SYSBNK),A ; Update BP register
|
||||
DEC A ; HBIOS BUF bank is one more below
|
||||
;LD (UABNK),A ; Set BPBIOS USER bank
|
||||
LD (RAMBNK),A ; Update BP RAM disk bank register
|
||||
LD (MAXBNK),A ; Update ending bank register
|
||||
|
||||
LD HL,SELMEM ; Future SELMEM calls will
|
||||
LD (BIOSJT+(27*3)+1),HL ; ... go to real SELMEM
|
||||
|
||||
POP BC ; Recover requested bank to B
|
||||
LD A,(TPABNK) ; Get TPA bank
|
||||
ADD 2 ; Offset to ending RAM bank id
|
||||
ADD B ; Adjust for incoming request
|
||||
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
JP SELMEM
|
||||
JP SELMEM ; Continue to normal SELMEM
|
||||
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
; Move Data - Possibly between banks. This resembles CP/M 3, but
|
||||
@@ -97,15 +111,10 @@ HB_SELMEM:
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
|
||||
HB_MOVE:
|
||||
PUSH HL
|
||||
LD HL,HB_BNKEND
|
||||
LD A,(HB_SRCBNK)
|
||||
ADD A,(HL) ; Adjust for HBIOS bank ids
|
||||
LD (HBX_SRCBNK),A
|
||||
LD A,(HB_DSTBNK)
|
||||
ADD A,(HL) ; Adjust for HBIOS bank ids
|
||||
LD (HBX_DSTBNK),A
|
||||
POP HL
|
||||
CALL HBX_BNKCPY
|
||||
PUSH HL
|
||||
LD HL,(TPABNK) ; Get TPA Bank #
|
||||
@@ -141,6 +150,5 @@ HB_XMOVE:
|
||||
HB_SRCBNK: DEFS 1 ; Move Source Bank #
|
||||
HB_DSTBNK: DEFS 1 ; Move Destination Bank #
|
||||
HB_BNKBIOS: DEFS 1 ; Bank id of HBIOS bank
|
||||
HB_BNKEND: DEFS 1 ; End of available RAM banks (last bank + 1)
|
||||
HB_DSKBUF: DEFS 2 ; Address of physical disk buffer in HBIOS bank
|
||||
|
||||
@@ -115,10 +115,22 @@ SELMEM: LD (USRBNK),A ; Update user bank
|
||||
; Must preserve all Registers including Flags.
|
||||
; All Bank Switching MUST be done by this routine
|
||||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
;
|
||||
; Parameter to BNKADJ (ADD) is set dynamically at initialization.
|
||||
|
||||
SELBNK: PUSH AF ; Save regs
|
||||
SELBN0: LD (CURBNK),A ; Save as current bank #
|
||||
BNKADJ: ADD A,90H ; Adjust for HBIOS bank ids
|
||||
|
||||
IF HB_DEBUG AND FALSE
|
||||
|
||||
CALL PRTSTRD
|
||||
DEFB '[SELBNK: $'
|
||||
CALL PRTHEXBYTE
|
||||
CALL PRTSTRD
|
||||
DEFB ']$'
|
||||
|
||||
ENDIF
|
||||
|
||||
CALL HBX_BNKSEL
|
||||
POP AF ; restore regs
|
||||
RET
|
||||
@@ -172,7 +184,7 @@ FRGETB:
|
||||
PUSH BC ; Save BC
|
||||
PUSH DE ; Save DE
|
||||
LD B,0FAH ; HBIOS Peek function
|
||||
LD D,C ; Bank in D
|
||||
LD D,C
|
||||
CALL HBX_INVOKE ; Do it
|
||||
LD A,E ; Value to A
|
||||
POP DE ; Restore DE
|
||||
@@ -203,8 +215,8 @@ FRPUTB:
|
||||
PUSH BC ; Save BC
|
||||
PUSH DE ; Save DE
|
||||
LD B,0FBH ; HBIOS Poke function
|
||||
LD D,C ; Bank in D
|
||||
LD E,A ; Value in E
|
||||
LD D,C
|
||||
CALL HBX_INVOKE ; Do it
|
||||
POP DE ; Restore DE
|
||||
POP BC ; Restore BC
|
||||
|
||||
@@ -11,9 +11,8 @@
|
||||
COMMON /BANK2/
|
||||
ENDIF
|
||||
|
||||
; This module creates a RAM Drive using the available memory (if available)
|
||||
; above the TPA and possible System banks. For a banked system, the minimum
|
||||
; needed is a 64k Main TPA and a 32k System Bank.
|
||||
; This module implements the HBIOS RAM disk driver by using the
|
||||
; RomWBW disk interface.
|
||||
|
||||
;.....
|
||||
; Select the RAM Drive. This routine performs any setup required in a select.
|
||||
@@ -22,70 +21,28 @@ SELRAM: JP SETPARMS ; No action locally.
|
||||
|
||||
;.....
|
||||
; Read a 128-byte logical sector from the RAM Drive to main memory.
|
||||
; This routine uses the HSTxxx values from the base BIOS routines.
|
||||
|
||||
RAMRD: OR 0FFH ; Set Read flag (non-0)
|
||||
JR RamRW ; ..go to common code
|
||||
RAMRD:
|
||||
LD B,HB_DIOREAD ; HBIOS READ
|
||||
JR RAMIO ; READ/WRITE COMMON CODE
|
||||
|
||||
;.....
|
||||
; Write a 128-byte logical sector from main memory to the RAM Drive.
|
||||
; This routine uses the HSTxxx values from the base BIOS routines.
|
||||
|
||||
RAMWR: XOR A ; Set Write flag with 0, Read w/AFH
|
||||
RAMWR:
|
||||
XOR A ; Set Write flag with 0, Read w/AFH
|
||||
LD (HSTWRT),A ; clear pending write flag
|
||||
;..fall thru to common code..
|
||||
;
|
||||
LD B,HB_DIOWRITE ; HBIOS WRITE
|
||||
JR RAMIO ; READ/WRITE COMMON CODE
|
||||
|
||||
; The following performs calculations for the proper address and bank, sets
|
||||
; the DMA block and executes the Move to/from the Host Buffer.
|
||||
|
||||
RamRW:
|
||||
PUSH AF ; Save R/W flag for later
|
||||
; BUILD TOTAL BYTE OFFSET INTO A:HL
|
||||
XOR A,A ; A STARTS OUT ZERO
|
||||
LD HL,(HSTTRK) ; HL STARTS WITH TRACK NUM
|
||||
LD H,0 ; ONLY LSB IS NEEDED (INIRAMD PASSES INVALID MSB)
|
||||
LD B,5 ; MULT BY 32 SECTORS PER TRACK
|
||||
RAMWR1:
|
||||
ADD HL,HL ; DOUBLE VALUE
|
||||
ADC A,A ; ... INCLUDING A WITH CARRY
|
||||
DJNZ RAMWR1 ; LOOP 5 TIMES FOR MULT BY 32
|
||||
LD DE,(HSTSEC) ; SECTOR VALUE TO 3 (ONE BYTE)
|
||||
LD D,0 ; CLEAR MSB SINCE HSTSEC IS JUST ONE BYTE
|
||||
ADD HL,DE ; ADD TO WORKING VALUE
|
||||
ADC A,0 ; HANDLE POSSIBLE CARRY
|
||||
LD B,7 ; MULT BY 128 BYTES PER SECTOR
|
||||
RAMWR2:
|
||||
ADD HL,HL ; DOUBLE VALUE
|
||||
ADC A,A ; ... INCLUDING A WITH CARRY
|
||||
DJNZ RAMWR2 ; LOOP 7 TIME FOR MULT BY 128
|
||||
; CONVERT BYTE OFFSET IN A:HL TO BANK(A):OFFSET(HL)
|
||||
SLA H ; ROTATE HIGH BIT OF H INTO CF
|
||||
RL A ; ROTATE CF INTO LOW BIT OF A
|
||||
SRL H ; FIX H (ROTATE BACK W/ ZERO INTO HIGH BIT)
|
||||
; ADJUST FOR STARTING RAM BANK
|
||||
LD C,A ; BANK TO C
|
||||
LD A,(RAMBNK) ; GET STARTING RAM BANK NUM
|
||||
ADD A,C ; COMBINE TO GET ACTUAL SOURCE BANK NUM
|
||||
; SETUP FOR INTERBANK COPY
|
||||
LD C,A ; SOURCE BANK TO C
|
||||
LD B,BID_HB ; DEST BANK TO B (HSTBUF IN HBIOS)
|
||||
;LD A,(HB_BNKBIOS) ; DEST BANK (HSTBUF IN HBIOS)
|
||||
;LD B,A ; PUT IN B
|
||||
LD DE,(HB_DSKBUF) ; DEST ADDRESS TO DE; HL ALREADY HAS SOURCE ADDRESS
|
||||
; REVERSE VALUES IF WRITE
|
||||
POP AF ; Read or Write?
|
||||
JR NZ,RAMWR3 ; ..jump if Read
|
||||
EX DE,HL ; Else swap things around
|
||||
LD A,C
|
||||
LD C,B
|
||||
LD B,A
|
||||
RAMWR3:
|
||||
; PERFORM THE COPY
|
||||
CALL XMOVE ; SET BANKS FOR COPY
|
||||
LD BC,128 ; SET LENGTH OF COPY (ONE SECTOR)
|
||||
CALL MOVE ; DO THE COPY
|
||||
; CLEAN UP AND RETURN
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;.....
|
||||
; Common code to setup RomWBW disk access
|
||||
;
|
||||
RAMIO:
|
||||
LD HL,(HSTDPH) ; GET ACTIVE DPH PTR
|
||||
DEC HL ; ADJUST TO POINT TO BPBIOS LOGICAL UNIT
|
||||
LD C,(HL) ; USE AS HBIOS DISK UNIT NUMBER
|
||||
JP HB_DSKIO ; DO THE REST IN HARD DISK DRIVER
|
||||
|
||||
;================== End of RAM Disk Code ====================
|
||||
|
||||
@@ -27,7 +27,11 @@ HB_IODEV EQU 80H ; 0x80 is current HBIOS console
|
||||
HB_MDRAM EQU 0 ; HBIOS Disk Unit #0 is usually the RAM Disk
|
||||
HB_MDROM EQU 1 ; HBIOS Disk Unit #1 is usually the ROM Disk
|
||||
;
|
||||
; Set HB_HDDEVN to appropriate HBIOS disk device numbers
|
||||
; Map BPBIOS logical drive numbers (0-2) to HBIOS physical disk units
|
||||
; HB_HDDEVn values map to HDRVn (see icfg-ww).
|
||||
;
|
||||
; The values below will be the default mapping. They can be changed
|
||||
; using BPCNFG *Physical Drive* configuration.
|
||||
;
|
||||
; If the RomWBW system has no floppy drives, then the hard disk units
|
||||
; will start right after the memory disk units. So, the first hard disk
|
||||
@@ -48,20 +52,33 @@ DRV_P SET NO ; YES if system has flopy drives
|
||||
;
|
||||
; RAM/ROM Bank Reserve
|
||||
;
|
||||
HB_RAMRESV EQU 8 ; RAM reserve is 8 banks
|
||||
HB_RAMRESV EQU 5 ; RAM reserve is 5 banks
|
||||
HB_ROMRESV EQU 4 ; ROM reserve is 4 banks
|
||||
;
|
||||
; Layout of RAM banks
|
||||
;
|
||||
; TODO: Query system via HBIOS API to determine the actual bank
|
||||
; assignments, then adjust BPBIOS operation accordingly.
|
||||
; The BID_xxx values below are used to set the initial values of
|
||||
; the BPBIOS bank registers (see def-ww-xxx.lib and HB_SELMEM in
|
||||
; hbios.z80). The running values of the BPBIOS bank registers (TPABNK,
|
||||
; SYSBNK, etc.) are set to absolute HBIOS bank ids in hbios.z80 during
|
||||
; startup.
|
||||
;
|
||||
BID_RAMD EQU -16 ; 90h - 16 = 80h
|
||||
BID_RAMM EQU -9 ; 90h - 9 = 87h
|
||||
BID_SYS EQU -4 ; 90h - 4 = 8Ch
|
||||
BID_HB EQU -3 ; 90h - 3 = 8Dh
|
||||
BID_USR EQU -2 ; 90h - 2 = 8Eh
|
||||
BID_COM EQU -1 ; 90h - 1 = 8Fh
|
||||
; The values below are expressed as an offset from the ending HBIOS
|
||||
; RAM bank id. They map to HBIOS bank ids
|
||||
; by subtracting from the ending HBIOS bank id (N). HBIOS RAM bank ids
|
||||
; start at 80h. The ending HBIOS bank id is (80h + RAM banks). The
|
||||
; typical layout assumes 16 banks of RAM starting at HBIOS bank id 80h
|
||||
; and ending at bank id 90h (N = 90h).
|
||||
;
|
||||
; BPBIOS HBIOS (TYPICAL)
|
||||
; -------------------------------------- ---------------
|
||||
; <HBIOS> 80h (80h)
|
||||
; <RAMD> 81h (81h)
|
||||
; <RAMM> N - 5 (8Bh)
|
||||
BID_BUF EQU -4 ; BNK3 -> RAMBNK N - 4 (8Ch)
|
||||
BID_SYS EQU -3 ; BNK2 -> SYSBNK N - 3 (8Dh)
|
||||
BID_USR EQU -2 ; BNK0 -> TPABNK N - 2 (8Eh)
|
||||
BID_COM EQU -1 ; BNK1 -> N - 1 (8Fh)
|
||||
;
|
||||
HB_EI MACRO
|
||||
EI
|
||||
|
||||
@@ -115,17 +115,17 @@ DVRVCT: DEFW SELERR ; Driver 0 Select
|
||||
DEFW HDREAD ; Driver 2 Read
|
||||
DEFW HDWRIT ; Driver 2 Write
|
||||
ENDIF ; harddsk
|
||||
; IF [RAMDSK AND NOT HARDDSK]
|
||||
; DEFW SELERR ; Driver 2 Select (Dummy if No Hard Drive)
|
||||
; DEFW ISTRUE ; Driver 2 Read
|
||||
; DEFW ISTRUE ; Driver 2 Write
|
||||
; ENDIF ;ramdsk & not harddsk
|
||||
IF [RAMDSK AND NOT HARDDSK]
|
||||
DEFW SELERR ; Driver 2 Select (Dummy if No Hard Drive)
|
||||
DEFW ISTRUE ; Driver 2 Read
|
||||
DEFW ISTRUE ; Driver 2 Write
|
||||
ENDIF ;ramdsk & not harddsk
|
||||
|
||||
; IF RAMDSK
|
||||
; DEFW SELHD ; Driver 3 Select (RAM Drive)
|
||||
; DEFW HDREAD ; Driver 3 Read
|
||||
; DEFW HDWRIT ; Driver 3 Write
|
||||
; ENDIF ;ramdsk
|
||||
IF RAMDSK
|
||||
DEFW SELRAM ; Driver 3 Select (RAM Drive)
|
||||
DEFW RAMRD ; Driver 3 Read
|
||||
DEFW RAMWR ; Driver 3 Write
|
||||
ENDIF ;ramdsk
|
||||
|
||||
SELERR: LD HL,0 ; Send null DPH pointer back to caller
|
||||
RET
|
||||
|
||||
@@ -4,11 +4,13 @@ setlocal
|
||||
:: call BuildDoc || exit /b
|
||||
call BuildProp || exit /b
|
||||
call BuildShared || exit /b
|
||||
:: call BuildBP || exit /b
|
||||
call BuildBP || exit /b
|
||||
call BuildImages || exit /b
|
||||
call BuildROM %* || exit /b
|
||||
call BuildZRC || exit /b
|
||||
call BuildZZRC || exit /b
|
||||
call BuildZ1RCC || exit /b
|
||||
call BuildZZRCC || exit /b
|
||||
call BuildZRC512 || exit /b
|
||||
|
||||
if "%1" == "dist" (
|
||||
call Clean || exit /b
|
||||
|
||||
@@ -4,6 +4,7 @@ setlocal
|
||||
pushd HDIAG && call Build || exit /b & popd
|
||||
pushd CBIOS && call Build || exit /b & popd
|
||||
pushd CPM22 && call Build || exit /b & popd
|
||||
pushd QPM && call Build || exit /b & popd
|
||||
pushd ZCPR && call Build || exit /b & popd
|
||||
pushd ZCPR-DJ && call Build || exit /b & popd
|
||||
pushd ZSDOS && call Build || exit /b & popd
|
||||
|
||||
4
Source/BuildZ1RCC.cmd
Normal file
4
Source/BuildZ1RCC.cmd
Normal file
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
pushd Z1RCC && call Build || exit /b & popd
|
||||
4
Source/BuildZRC512.cmd
Normal file
4
Source/BuildZRC512.cmd
Normal file
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
pushd ZRC512 && call Build || exit /b & popd
|
||||
@@ -1,4 +0,0 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
pushd ZZRC && call Build || exit /b & popd
|
||||
4
Source/BuildZZRCC.cmd
Normal file
4
Source/BuildZZRCC.cmd
Normal file
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
pushd ZZRCC && call Build || exit /b & popd
|
||||
@@ -1350,7 +1350,6 @@ DSK_SELECT1A:
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; GET UNIT INFO, DEVICE TYPE IN D
|
||||
LD A,D ; DEVICE TYPE -> A
|
||||
AND $F0 ; ISOLATE HIGH BITS
|
||||
CP DIODEV_FD ; FLOPPY?
|
||||
JR NZ,DSK_SELECT1B ; IF NOT, DO LBA IO
|
||||
LD HL,SEKLBA+3 ; POINT TO HIGH ORDER BYTE
|
||||
@@ -1511,8 +1510,8 @@ DSK_MBR3:
|
||||
;
|
||||
DSK_MBR4:
|
||||
; IF BOOT FROM PARTITION, USE NEW SECTORS PER SLICE VALUE
|
||||
LD HL,16384 ; NEW SECTORS PER SLICE
|
||||
LD (SPS),HL ; SAVE IT
|
||||
LD HL,16384 ; NEW SECTORS PER SLICE
|
||||
LD (SPS),HL ; SAVE IT
|
||||
|
||||
; UPDATE MEDIA ID
|
||||
LD A,MID_HDNEW ; NEW MEDIA ID
|
||||
@@ -1520,20 +1519,80 @@ DSK_MBR4:
|
||||
;
|
||||
DSK_MBR5:
|
||||
; ADJUST LBA OFFSET BASED ON TARGET SLICE
|
||||
LD A,(SLICE) ; GET SLICE, A IS LOOP CNT
|
||||
LD HL,(SEKLBA) ; SET DE:HL
|
||||
LD DE,(SEKLBA+2) ; ... TO STARTING LBA
|
||||
LD BC,(SPS) ; SECTORS PER SLICE
|
||||
DSK_MBR6:
|
||||
OR A ; SET FLAGS TO CHECK LOOP CNTR
|
||||
JR Z,DSK_MBR8 ; DONE IF COUNTER EXHAUSTED
|
||||
ADD HL,BC ; ADD ONE SLICE TO LOW WORD
|
||||
JR NC,DSK_MBR7 ; CHECK FOR CARRY
|
||||
INC DE ; IF SO, BUMP HIGH WORD
|
||||
DSK_MBR7:
|
||||
DEC A ; DEC LOOP DOWNCOUNTER
|
||||
JR DSK_MBR6 ; AND LOOP
|
||||
LD A,(SLICE) ; GET SLICE, A IS LOOP CNT
|
||||
LD HL,(SEKLBA) ; SET DE:HL
|
||||
LD DE,(SEKLBA+2) ; ... TO STARTING LBA
|
||||
LD BC,(SPS) ; SECTORS PER SLICE
|
||||
RES 7,D ; CLEAR LBA MODE BIT
|
||||
DSK_MBR6:
|
||||
OR A ; SET FLAGS TO CHECK LOOP CNTR
|
||||
JR Z,DSK_MBR8 ; DONE IF COUNTER EXHAUSTED
|
||||
ADD HL,BC ; ADD ONE SLICE TO LOW WORD
|
||||
JR NC,DSK_MBR7 ; CHECK FOR CARRY
|
||||
INC DE ; IF SO, BUMP HIGH WORD
|
||||
DSK_MBR7:
|
||||
DEC A ; DEC LOOP DOWNCOUNTER
|
||||
JR DSK_MBR6 ; AND LOOP
|
||||
DSK_MBR8:
|
||||
; LBA OFFSET OF DESIRED SLICE IS NOW IN DE:HL
|
||||
; NEED TO CHECK IF THE SLICE IS BEYOND CAPACITY OF MEDIA
|
||||
; IF LBA_OFF + SPS >= DSK_CAP, ERROR!
|
||||
;
|
||||
; SAVE LBA_OFF
|
||||
PUSH DE ; MSW
|
||||
PUSH HL ; LSW
|
||||
;
|
||||
; ADD SPS TO COMPUTE LBA_REQ
|
||||
LD BC,(SPS) ; SECTORS PER SLICE
|
||||
ADD HL,BC ; ADD ONE SLICE TO LOW WORD
|
||||
JR NC,DSK_MBR9 ; CHECK FOR CARRY
|
||||
INC DE ; IF SO, BUMP HIGH WORD
|
||||
DSK_MBR9:
|
||||
; SAVE CAP_REQ
|
||||
LD (CAP_REQ),HL ; LSW
|
||||
LD (CAP_REQ+2),DE ; MSW
|
||||
;
|
||||
#IFDEF PLTWBW
|
||||
; GET DSK_CAP (DE:HL)
|
||||
LD B,BF_DIOCAP ; HBIOS DISK CAPACITY FUNC
|
||||
LD A,(SEKUNIT) ; DISK UNIT NUMBER
|
||||
LD C,A ; ... INTO C
|
||||
RST 08 ; HBIOS CALL (DE:HL = CAPACITY)
|
||||
#ENDIF
|
||||
;
|
||||
#IFDEF PLTUNA
|
||||
; GET DSK_CAP (DE:HL)
|
||||
LD C,$45 ; UBIOS DISK INFO FUNC
|
||||
LD A,(SEKUNIT) ; DISK UNIT NUMBER
|
||||
LD B,A ; ... INTO B
|
||||
RST 08 ; CALL UNA (DE:HL = CAPACITY)
|
||||
#ENDIF
|
||||
;
|
||||
; SAVE DSK_CAP (DE:HL)
|
||||
PUSH DE ; SAVE DSK_CAP (MSW)
|
||||
PUSH HL ; SAVE DSK_CAP (LSW)
|
||||
;
|
||||
; CHECK DSK_CAP >= CAP_REQ, CF SET ON OVERFLOW
|
||||
; NO NEED SAVE ACTUAL RESULT
|
||||
OR A ; CLEAR CARRY FOR SBC
|
||||
POP HL ; DSK_CAP LSW
|
||||
LD DE,(CAP_REQ) ; CAP_REQ LSW
|
||||
SBC HL,DE ; DSK_CAP - LBA_REQ (LSW)
|
||||
POP HL ; DSK_CAP MSW
|
||||
LD DE,(CAP_REQ+2) ; CAP_REQ MSW
|
||||
SBC HL,DE ; DSK_CAP - LBA_REQ (MSW)
|
||||
;
|
||||
; RESTORE LBA_OFF
|
||||
POP HL ; LSW
|
||||
POP DE ; MSW
|
||||
;
|
||||
; ABORT ON OVERFLOW WITH ERROR!
|
||||
JR NC,DSK_MBR10 ; IF NO OVERFLOW, CONTINUE
|
||||
OR $FF ; SIGNAL ERROR
|
||||
RET ; DONE
|
||||
;
|
||||
DSK_MBR10:
|
||||
; FINALIZE SLICE LBA
|
||||
SET 7,D ; SET LBA ACCESS FLAG
|
||||
; RESAVE IT
|
||||
LD (SEKLBA),HL ; LOWORD
|
||||
@@ -1758,6 +1817,7 @@ CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK
|
||||
MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID
|
||||
SLICE .DB 0 ; CURRENT SLICE
|
||||
SPS .DW 0 ; SECTORS PER SLICE
|
||||
CAP_REQ .DW 0,0 ; LBA CAP REQUIRED FOR SLICE
|
||||
STKSAV .DW 0 ; TEMP SAVED STACK POINTER
|
||||
;
|
||||
#IFDEF PLTWBW
|
||||
@@ -2291,8 +2351,8 @@ INIT2:
|
||||
LD C,(HL) ; PUT UNIT NUM IN C
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,C ; GET ATTRIBUTES
|
||||
AND %00111000 ; ISOLATE TYPE BITS
|
||||
CP %00101000 ; TYPE = RAM?
|
||||
AND %10001111 ; ISOLATE TYPE BITS
|
||||
CP %00000101 ; NOT FLOPPY, TYPE = RAM?
|
||||
JR NZ,INIT2X ; IF NOT THEN DONE
|
||||
;
|
||||
; CHECK IF SECOND UNIT IS ROM OR FLASH
|
||||
@@ -2303,10 +2363,10 @@ INIT2:
|
||||
LD C,(HL) ; PUT UNIT NUM IN C
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,C ; GET ATTRIBUTES
|
||||
AND %00111000 ; ISOLATE TYPE BITS
|
||||
CP %00100000 ; TYPE = ROM?
|
||||
AND %10001111 ; ISOLATE TYPE BITS
|
||||
CP %00000100 ; NOT FLOPPY, TYPE = ROM?
|
||||
JR Z,INIT2A ; IF SO, ADJUST DEF DRIVE
|
||||
CP %00111000 ; TYPE = FLASH?
|
||||
CP %00000111 ; NOT FLOPPY, TYPE = FLASH?
|
||||
JR NZ,INIT2X ; IF NOT THEN DONE
|
||||
;
|
||||
INIT2A:
|
||||
@@ -2381,7 +2441,7 @@ INIT3:
|
||||
;
|
||||
ERR_BIOMEM:
|
||||
CALL NEWLINE2 ; FORMATTING
|
||||
LD DE,STR_BIOMEM ; HBIOS HEAP MEM OVERFLOW
|
||||
LD DE,STR_HEAPOVF ; HBIOS HEAP MEM OVERFLOW
|
||||
CALL WRITESTR ; TELL THE USER
|
||||
CALL PANIC ; AND GRIND TO A SCREACHING HALT
|
||||
;
|
||||
@@ -2529,24 +2589,21 @@ MD_INIT:
|
||||
; UDPATE THE RAM/ROM DPB STRUCTURES BASED ON HARDWARE
|
||||
;
|
||||
#IFDEF PLTWBW
|
||||
; TODO: HANDLE DISABLED RAM/ROM DISK BETTER.
|
||||
; IF RAM OR ROM DISK ARE DISABLED, BELOW WILL STILL
|
||||
; TRY TO ADJUST THE DPB BASED ON RAM BANK CALCULATIONS.
|
||||
; IT SHOULD NOT MATTER BECAUSE THE DPB SHOULD NEVER BE
|
||||
; USED. IT WOULD BE BETTER TO GET RAMD0/ROMD0 AND
|
||||
; RAMDN/ROMDN FROM THE HCB AND USE THOSE TO CALC THE
|
||||
; DPB ADJUSTMENT. IF DN-D0=0, BYPASS ADJUSTMENT.
|
||||
LD A,(HCB + HCB_ROMBANKS) ; ROM BANK COUNT
|
||||
SUB 4 ; REDUCE BANK COUNT BY RESERVED PAGES
|
||||
LD IX,DPB_ROM ; ADDRESS OF DPB
|
||||
CALL MD_INIT1 ; FIX IT UP
|
||||
; NOTE: ROM AND/OR RAM DISK MAY NOT BE ACTIVE, BUT WE GO
|
||||
; AHEAD AND UPDATE BOTH DPBS ANYWAY. IT CAUSES NO HARM SINCE
|
||||
; INACTIVE RAM/ROM DISK WILL NEVER BE ACCESSED.
|
||||
;
|
||||
LD A,(HCB + HCB_RAMBANKS) ; RAM BANK COUNT
|
||||
SUB 8 ; REDUCE BANK COUNT BY RESERVED PAGES
|
||||
LD IX,DPB_RAM ; ADDRESS OF DPB
|
||||
CALL MD_INIT1 ; FIX IT UP
|
||||
; ROM DISK
|
||||
LD A,(HCB + HCB_ROMD_BNKS) ; ROM DISK SIZE IN BANKS
|
||||
LD IX,DPB_ROM ; ADDRESS OF DPB
|
||||
CALL MD_INIT1 ; FIX IT UP
|
||||
;
|
||||
JR MD_INIT4 ; DONE
|
||||
; RAM DISK
|
||||
LD A,(HCB + HCB_RAMD_BNKS) ; RAM DISK SIZE IN BANKS
|
||||
LD IX,DPB_RAM ; ADDRESS OF DPB
|
||||
CALL MD_INIT1 ; FIX IT UP
|
||||
;
|
||||
JR MD_INIT4 ; DONE
|
||||
;
|
||||
MD_INIT1:
|
||||
;
|
||||
@@ -2904,52 +2961,51 @@ DRV_INIT:
|
||||
LD HL,DRVLST ; INIT HL PTR TO DRIVE LIST
|
||||
;
|
||||
DRV_INIT2:
|
||||
PUSH BC ; SAVE LOOP CNT & UNIT
|
||||
CALL DRV_INIT3 ; CHECK DRIVE
|
||||
POP BC ; RECOVER LOOP CNT & UNIT
|
||||
INC C ; NEXT UNIT
|
||||
DJNZ DRV_INIT2 ; LOOP
|
||||
LD A,D ; TOTAL DEVICE COUNT TO D
|
||||
LD A,D ; TOTAL DEVICE COUNT TO A
|
||||
LD (DRVLSTC),A ; SAVE THE COUNT
|
||||
JR DRV_INIT4 ; CONTINUE
|
||||
;
|
||||
DRV_INIT3:
|
||||
; GET DEVICE ATTRIBUTES
|
||||
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
|
||||
PUSH HL ; SAVE DRIVE LIST PTR
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS, UNIT TO C
|
||||
LD A,D ; DEVICE TYPE TO A
|
||||
LD A,C ; DEVICE ATTRIBUTES TO A
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
POP HL ; RESTORE DRIVE LIST PTR
|
||||
POP DE ; RESTORE DE
|
||||
CP DIODEV_IDE ; HARD DISK DEVICE?
|
||||
JR NC,DRV_INIT3A ; IF SO, HANDLE SPECIAL
|
||||
LD (HL),C ; SAVE UNIT NUM IN LIST
|
||||
INC HL ; BUMP PTR
|
||||
INC D ; INC TOTAL DEVICE COUNT
|
||||
RET
|
||||
LD B,A ; ATTRIBUTES TO B
|
||||
;
|
||||
DRV_INIT3A:
|
||||
; CHECK FOR ACTIVE AND RETURN IF NOT
|
||||
; IF DEVICE IS NOT REMOVABLE, THEN CHECK TO ENSURE IT IS
|
||||
; ACTUALLY ONLINE. IF NOT, SKIP UNIT ENTIRELY.
|
||||
BIT 6,B ; REMOVABLE?
|
||||
JR NZ,DRV_INIT3A ; IF SO, SKIP MEDIA CHECK
|
||||
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
|
||||
PUSH HL ; SAVE DRIVE LIST PTR
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
|
||||
LD B,BF_DIOMEDIA ; HBIOS FUNC: SENSE MEDIA
|
||||
LD E,1 ; PERFORM MEDIA DISCOVERY
|
||||
RST 08
|
||||
|
||||
RST 08 ; DO IT
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
POP HL ; RESTORE DRIVE LIST PTR
|
||||
POP DE ; RESTORE DE
|
||||
|
||||
RET NZ ; IF NO MEDIA, JUST RETURN
|
||||
|
||||
; IF ACTIVE...
|
||||
RET NZ ; OFFLINE, SKIP ENTIRE UNIT
|
||||
;
|
||||
DRV_INIT3A:
|
||||
LD (HL),C ; SAVE UNIT NUM IN LIST
|
||||
INC HL ; BUMP PTR
|
||||
INC D ; INC TOTAL DEVICE COUNT
|
||||
BIT 5,B ; HIGH CAPACITY?
|
||||
RET Z ; DONE IF NOT
|
||||
INC E ; INCREMENT HARD DISK COUNT
|
||||
RET ; AND RETURN
|
||||
RET ; DONE
|
||||
;
|
||||
DRV_INIT4: ; SET SLICES PER VOLUME (HDSPV) BASED ON HARD DISK VOLUME COUNT
|
||||
LD A,E ; HARD DISK VOLUME COUNT TO A
|
||||
@@ -2978,7 +3034,8 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
|
||||
LD C,(HL) ; GET UNIT NUM FROM LIST
|
||||
PUSH BC ; PRESERVE LOOP CONTROL
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS, D := DEVICE TYPE
|
||||
RST 08 ; CALL HBIOS, C := DEVICE ATTRIBUTES
|
||||
LD A,C ; DEVICE ATTRIBUTES TO A
|
||||
POP BC ; GET UNIT INDEX BACK IN C
|
||||
PUSH BC ; RESAVE LOOP CONTROL
|
||||
CALL DRV_INIT7 ; MAKE DRIVE MAP ENTRY(S)
|
||||
@@ -2992,10 +3049,9 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
|
||||
DRV_INIT7: ; PROCESS UNIT
|
||||
LD E,0 ; INITIALIZE SLICE INDEX
|
||||
LD B,1 ; DEFAULT LOOP COUNTER
|
||||
LD A,D ; DEVICE TYPE TO ACCUM
|
||||
LD D,C ; UNIT NUMBER TO D
|
||||
CP DIODEV_IDE ; HARD DISK DEVICE?
|
||||
JR C,DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
|
||||
BIT 5,A ; HIGH CAPACITY DEVICE?
|
||||
JR Z,DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
|
||||
LD A,(HDSPV) ; GET SLICES PER VOLUME TO ACCUM
|
||||
LD B,A ; MOVE TO B FOR LOOP COUNTER
|
||||
;
|
||||
@@ -3350,10 +3406,6 @@ DEVUNK .DB "UNK$"
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,D ; RESULTANT DEVICE TYPE
|
||||
PUSH DE ; NEED TO SAVE UNIT NUMBER (IN E)
|
||||
RRCA ; ROTATE DEVICE
|
||||
RRCA ; ... BITS
|
||||
RRCA ; ... INTO
|
||||
RRCA ; ... LOWEST 4 BITS
|
||||
AND $0F ; ISOLATE DEVICE BITS
|
||||
ADD A,A ; MULTIPLY BY TWO FOR WORD TABLE
|
||||
LD HL,DEVTBL ; POINT TO START OF DEVICE NAME TABLE
|
||||
@@ -3392,11 +3444,11 @@ DEV06 .DB "SD$"
|
||||
DEV07 .DB "PRPSD$"
|
||||
DEV08 .DB "PPPSD$"
|
||||
DEV09 .DB "HDSK$"
|
||||
DEV10 .EQU DEVUNK
|
||||
DEV11 .EQU DEVUNK
|
||||
DEV12 .EQU DEVUNK
|
||||
DEV13 .EQU DEVUNK
|
||||
DEV14 .EQU DEVUNK
|
||||
DEV10 .DB "PPA$"
|
||||
DEV11 .DB "IMM$"
|
||||
DEV12 .DB "SYQ$"
|
||||
DEV13 .DB "CHUSB$"
|
||||
DEV14 .DB "CHSD$"
|
||||
DEV15 .EQU DEVUNK
|
||||
;
|
||||
#ENDIF
|
||||
@@ -3406,7 +3458,7 @@ DIRBUF .DW 0 ; DIR BUF POINTER
|
||||
HEAPTOP .DW BUFPOOL ; CURRENT TOP OF HEAP
|
||||
BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE
|
||||
HDSPV .DB 2 ; SLICES PER VOLUME FOR HARD DISKS (MUST BE >= 1)
|
||||
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURINT DRV_INIT
|
||||
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURING DRV_INIT
|
||||
DRVLSTC .DB 0 ; ENTRY COUNT FOR ACTIVE DRIVE LIST
|
||||
;
|
||||
#IFDEF PLTWBW
|
||||
@@ -3436,7 +3488,7 @@ STR_INITRAMDISK .DB "Formatting RAMDISK...$"
|
||||
STR_LDR2 .DB "\r\n"
|
||||
STR_LDR .DB "\r\n $"
|
||||
STR_DPHINIT .DB "Configuring Drives...$"
|
||||
STR_HEAPOVF .DB " *** Insufficient Memory ***$"
|
||||
STR_HEAPOVF .DB " *** Insufficient HBIOS Heap Memory ***$"
|
||||
STR_INVMED .DB " *** Invalid Device ID ***$"
|
||||
STR_VERMIS .DB 7,"*** WARNING: HBIOS/CBIOS Version Mismatch ***$"
|
||||
STR_MEMFREE .DB " Disk Buffer Bytes Free$"
|
||||
@@ -3444,7 +3496,6 @@ STR_CPM .DB "CP/M-80 v2.2$"
|
||||
STR_ZSDOS .DB "ZSDOS v1.1$"
|
||||
STR_TPA1 .DB ", $"
|
||||
STR_TPA2 .DB "K TPA$"
|
||||
STR_BIOMEM .DB "*** HBIOS Heap Overflow ***$"
|
||||
|
||||
#IFDEF PLTUNA
|
||||
INIBUF .FILL 512,0 ; LOCATION OF TEMP WORK BUF DURING INIT (512 BYTES)
|
||||
|
||||
@@ -346,8 +346,7 @@ read:
|
||||
ld b,17h ; HBIOS DEVICE function
|
||||
rst 08 ; Do it, D=device type
|
||||
ld a,d ; put in accum
|
||||
and 0F0h ; isolate high bits
|
||||
cp 10h ; floppy?
|
||||
cp 01h ; floppy?
|
||||
jr nz,read2 ; if not, do LBA i/o
|
||||
|
||||
; Floppy I/O
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
extrn @dtbl,@ctbl
|
||||
extrn @date,@hour,@min,@sec
|
||||
extrn @srch1
|
||||
extrn @hbbio
|
||||
extrn @hbbio,@hbusr
|
||||
extrn addhla
|
||||
extrn phex16, phex8
|
||||
extrn cin, cout
|
||||
@@ -44,9 +44,9 @@ tpa$bank equ 0
|
||||
if banked
|
||||
|
||||
; Clone page zero from bank 0 to additional banks
|
||||
ld b,4 ; last bank
|
||||
ld b,2 ; last bank
|
||||
ld c,0 ; src bank
|
||||
init$2:
|
||||
init$1:
|
||||
push bc ; save bank id's
|
||||
call ?xmove ; set src/dest banks
|
||||
ld bc,0100h ; size is one page
|
||||
@@ -54,7 +54,7 @@ init$2:
|
||||
ld de,0 ; src adr is 0
|
||||
call ?move ; do it
|
||||
pop bc ; restore bank id's
|
||||
djnz init$2 ; loop till done
|
||||
djnz init$1 ; loop till done
|
||||
|
||||
endif
|
||||
|
||||
@@ -62,6 +62,35 @@ init$2:
|
||||
ld hl,signon$msg ; signon message
|
||||
call ?pmsg ; print it
|
||||
|
||||
if banked
|
||||
|
||||
; Confirm that HBIOS is configured with enough RAM banks
|
||||
; to accommodate banked version of CP/M 3. We use 2
|
||||
; additional banks which live below the user bank. So we
|
||||
; check that the these don't overlap with the RomWBW HBIOS
|
||||
; bank.
|
||||
|
||||
ld bc,0F8F2h ; HBIOS GET BNKINFO
|
||||
call 0FFF0h ; D: BIOS Bank, E: User Bank
|
||||
ld a,d
|
||||
ld (@hbbio),a
|
||||
ld a,e
|
||||
ld (@hbusr),a
|
||||
|
||||
sub 3 ; 2 extra banks (+1 for compare)
|
||||
cp d ; lowest cpm bank - hbios bank
|
||||
jr nc,init$2 ; continue if space available
|
||||
|
||||
ld hl,noram$msg ; signon message
|
||||
call ?pmsg ; print it
|
||||
|
||||
ld b,0F0h ; HBIOS system reset
|
||||
ld c,1h ; reset type warm (back to loader)
|
||||
call 0FFFFh ; do it
|
||||
|
||||
endif
|
||||
|
||||
init$2:
|
||||
; Check for HBIOS/CBIOS mismatch
|
||||
ld b,0F1h ; hbios version
|
||||
rst 08 ; do it, de=maj/min/up/pat
|
||||
@@ -156,7 +185,9 @@ dinit:
|
||||
ld hl,drvlst ; init hl ptr to drive list
|
||||
;
|
||||
dinit2:
|
||||
push bc ; save loop cnt & unit
|
||||
call dinit3 ; check drive
|
||||
pop bc ; recover loop cnt & unit
|
||||
inc c ; next unit
|
||||
djnz dinit2 ; loop
|
||||
ld a,d ; total device count to d
|
||||
@@ -169,39 +200,35 @@ dinit3:
|
||||
push bc ; save loop control
|
||||
ld b,17h ; hbios func: report device info
|
||||
rst 08 ; call hbios, unit to c
|
||||
ld a,d ; device type to a
|
||||
ld a,c ; device attributes to a
|
||||
pop bc ; restore loop control
|
||||
pop hl ; restore drive list ptr
|
||||
pop de ; restore de
|
||||
cp 30h ; hard disk device?
|
||||
jr nc,dinit3a ; if so, handle special
|
||||
ld (hl),c ; save unit num in list
|
||||
inc hl ; bump ptr
|
||||
inc d ; inc total device count
|
||||
ret
|
||||
ld b,a ; attributes to b
|
||||
;
|
||||
dinit3a:
|
||||
; check for active and return if not
|
||||
; if device is not removable, then check to ensure it is
|
||||
; actually online. if not, skip unit entirely.
|
||||
bit 6,b ; removable?
|
||||
jr nz,dinit3a ; if so, skip media check
|
||||
push de ; save de (hard disk volume counter)
|
||||
push hl ; save drive list ptr
|
||||
push bc ; save loop control
|
||||
|
||||
ld b,18h ; hbios func: sense media
|
||||
ld e,1 ; perform media discovery
|
||||
rst 08
|
||||
|
||||
rst 08 ; do it
|
||||
pop bc ; restore loop control
|
||||
pop hl ; restore drive list ptr
|
||||
pop de ; restore de
|
||||
|
||||
ret nz ; if no media, just return
|
||||
|
||||
; if active...
|
||||
ret nz ; offline, skip entire unit
|
||||
;
|
||||
dinit3a:
|
||||
ld (hl),c ; save unit num in list
|
||||
inc hl ; bump ptr
|
||||
inc d ; inc total device count
|
||||
bit 5,b ; high capacity?
|
||||
ret z ; done if not
|
||||
inc e ; increment hard disk count
|
||||
ret ; and return
|
||||
ret ; done
|
||||
|
||||
dinit4: ; set slices per volume (hdspv) based on hard disk volume count
|
||||
ld a,e ; hard disk volume count to a
|
||||
@@ -238,7 +265,8 @@ dinit6:
|
||||
push bc ; preserve loop control
|
||||
push hl ; preserve dph pointer
|
||||
ld b,17h ; hbios func: report device info
|
||||
rst 08 ; call hbios, d := device type
|
||||
rst 08 ; call hbios, a := device attributes
|
||||
ld a,c ; device attributes to a
|
||||
pop hl ; restore dph pointer
|
||||
pop bc ; get unit index back in c
|
||||
push bc ; resave loop control
|
||||
@@ -253,10 +281,9 @@ dinit6:
|
||||
dinit7: ; process a unit (all slices)
|
||||
ld e,0 ; initialize slice index
|
||||
ld b,1 ; default loop counter
|
||||
ld a,d ; device type to accum
|
||||
ld d,c ; unit number to d
|
||||
cp 030h ; hard disk device?
|
||||
jr c,dinit8 ; nope, leave loop count at 1
|
||||
bit 5,a ; high capacity device?
|
||||
jr z,dinit8 ; nope, leave loop count at 1
|
||||
ld a,(hdspv) ; get slices per volume to accum
|
||||
ld b,a ; move to b for loop counter
|
||||
|
||||
@@ -733,6 +760,10 @@ clrflg db 0 ; RAM disk cleared flag
|
||||
clr$msg db 'RAM Disk Initialized',13,10,13,10,0
|
||||
vermis$msg db 7,'*** WARNING: HBIOS/CBIOS Version Mismatch ***',13,10,13,10,0
|
||||
|
||||
if banked
|
||||
noram$msg db 7,'*** ERROR: Insufficient RAM for banked CP/M 3 ***',13,10,13,10,0
|
||||
endif
|
||||
|
||||
if zpm
|
||||
|
||||
signon$msg db 13,10,'ZPM3'
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
extrn ?bnkxlt
|
||||
|
||||
extrn phex8, cout
|
||||
extrn phex16, phex8, cout, crlf, crlf2
|
||||
|
||||
|
||||
; CP/M 3 Disk definition macros
|
||||
@@ -355,38 +355,30 @@ dpb$hdnew: ; 8MB Hard Disk Drive (new format)
|
||||
; called for first time initialization.
|
||||
|
||||
dsk$init:
|
||||
; TODO: Handle disabled RAM/ROM disk better.
|
||||
; If RAM or ROM disk are disabled, below will still
|
||||
; try to adjust the DPB based on RAM bank calculations.
|
||||
; It should not matter because the DPB should never be
|
||||
; used. It would be better to get RAMD0/ROMD0 and
|
||||
; RAMDN/ROMDN from the HCB and use those to calc the
|
||||
; DPB adjustment. If DN-D0=0, bypass adjustment.
|
||||
ld b,0FAh ; HBIOS Peek Function
|
||||
ld a,(@hbbio) ; HBIOS bank id
|
||||
ld d,a ; ... goes in D
|
||||
ld hl,10Ch ; Offset 10Ch is ROM bank cnt
|
||||
rst 08 ; Call HBIOS, value in E
|
||||
ld a,e ; move count to accum
|
||||
sub 4 ; reduce by # reserved banks
|
||||
ld ix,dpb$rom ; address of DPB
|
||||
call dsk$init1 ; fix it up
|
||||
|
||||
ld b,0FAh ; HBIOS Peek Function
|
||||
ld a,(@hbbio) ; HBIOS bank id
|
||||
ld d,a ; ... goes in D
|
||||
ld hl,10Bh ; Offset 10Bh is RAM bank cnt
|
||||
rst 08 ; Call HBIOS, value in E
|
||||
ld a,e ; move count to accum
|
||||
sub 8 ; reduce by # reserved banks
|
||||
ld ix,dpb$ram ; address of DPB
|
||||
call dsk$init1 ; fix it up
|
||||
|
||||
; NOTE: ROM and/or RAM disk may not be active, but we go
|
||||
; ahead and update both DPBs anyway. It causes no harm since
|
||||
; inactive RAM/ROM disk will never be accessed.
|
||||
|
||||
ld hl,1DFh ; ROM disk bank cnt in HCB
|
||||
ld ix,dpb$rom ; address of ROM Disk DPB
|
||||
call dsk$init1 ; fix it up
|
||||
ld hl,1DDh ; RAM dsik bank cnt in HCB
|
||||
ld ix,dpb$ram ; address of RAM Disk DPB
|
||||
call dsk$init1 ; fix it up
|
||||
ret ; done
|
||||
|
||||
dsk$init1:
|
||||
; Get bank count of RAM/ROM disk
|
||||
ld b,0FAh ; HBIOS Peek Function
|
||||
ld a,(@hbbio) ; HBIOS bank id
|
||||
ld d,a ; ... goes in D
|
||||
rst 08 ; Call HBIOS, value in E
|
||||
;ld a,e ; move count to accum
|
||||
|
||||
; Setup HL with bank count
|
||||
ld l,a ; lsb
|
||||
;ld l,a ; lsb
|
||||
ld l,e ; lsb
|
||||
ld h,0 ; msb is always zero
|
||||
|
||||
; Update EXM field
|
||||
@@ -501,8 +493,7 @@ media:
|
||||
ld b,17h ; HBIOS func: report device info
|
||||
call 0FFF0h ; get unit info, device type in D
|
||||
ld a,d ; device type -> A
|
||||
and 0F0h ; isolate high bits
|
||||
cp 10h ; floppy?
|
||||
cp 01h ; floppy?
|
||||
jr nz,media1 ; if not, do LBA I/O
|
||||
ld hl,lba+3 ; point to high order byte
|
||||
res 7,(hl) ; switch from LBA -> CHS
|
||||
@@ -585,29 +576,77 @@ media4:
|
||||
; adjust the sectors per slice and media id.
|
||||
|
||||
; Use new slice format sectors per slice value
|
||||
ld hl,16384 ; new sectors per slice
|
||||
ld (sps),hl ; save it
|
||||
ld hl,16384 ; new sectors per slice
|
||||
ld (sps),hl ; save it
|
||||
|
||||
; Update media id for new hard disk format
|
||||
ld a,10 ; new media id
|
||||
ld (medid),a ; save it
|
||||
ld a,10 ; new media id
|
||||
ld (medid),a ; save it
|
||||
|
||||
media5:
|
||||
; Adjust LBA offset based on target slice
|
||||
ld a,(slice) ; get slice, A is loop cnt
|
||||
ld hl,(lba) ; set DE:HL
|
||||
ld de,(lba+2) ; ... to starting LBA
|
||||
ld bc,(sps) ; sectors per slice
|
||||
ld a,(slice) ; get slice, A is loop cnt
|
||||
ld hl,(lba) ; set DE:HL
|
||||
ld de,(lba+2) ; ... to starting LBA
|
||||
ld bc,(sps) ; sectors per slice
|
||||
res 7,d ; clear lba mode bit
|
||||
boot6:
|
||||
or a ; set flags to check loop cntr
|
||||
jr z,boot8 ; done if counter exhausted
|
||||
add hl,bc ; add one slice to low word
|
||||
jr nc,boot7 ; check for carry
|
||||
inc de ; if so, bump high word
|
||||
or a ; set flags to check loop cntr
|
||||
jr z,boot8 ; done if counter exhausted
|
||||
add hl,bc ; add one slice to low word
|
||||
jr nc,boot7 ; check for carry
|
||||
inc de ; if so, bump high word
|
||||
boot7:
|
||||
dec a ; dec loop downcounter
|
||||
jr boot6 ; and loop
|
||||
dec a ; dec loop downcounter
|
||||
jr boot6 ; and loop
|
||||
boot8:
|
||||
|
||||
; LBA offset of desired slice is now in DE:HL.
|
||||
; Need to check if the slice is beyond capacity of media.
|
||||
; If lba_off + sps >= dsk_cap, error!
|
||||
|
||||
; Save lba_off
|
||||
push de ; msw
|
||||
push hl ; lsw
|
||||
|
||||
; Add sps to compute lba_req
|
||||
ld bc,(sps) ; sectors per slice
|
||||
add hl,bc ; add one slice to low word
|
||||
jr nc,dsk_mbr9 ; check for carry
|
||||
inc de ; if so, bump high word
|
||||
dsk_mbr9:
|
||||
; Save cap_req
|
||||
ld (cap_req),hl ; lsw
|
||||
ld (cap_req+2),de ; msw
|
||||
|
||||
; Get dsk_cap (de:hl)
|
||||
ld b,1Ah ; hbios disk capacity func
|
||||
ld a,(unit) ; disk unit number
|
||||
ld c,a ; ... into c
|
||||
rst 08 ; hbios call (de:hl = capacity)
|
||||
|
||||
; Save dsk_cap (de:hl)
|
||||
push de ; save dsk_cap (msw)
|
||||
push hl ; save dsk_cap (lsw)
|
||||
|
||||
; Check dsk_cap >= cap_req, cf set on overflow
|
||||
; No need save actual result
|
||||
or a ; clear carry for sbc
|
||||
pop hl ; dsk_cap lsw
|
||||
ld de,(cap_req) ; cap_req lsw
|
||||
sbc hl,de ; dsk_cap - lba_req (lsw)
|
||||
pop hl ; dsk_cap msw
|
||||
ld de,(cap_req+2) ; cap_req msw
|
||||
sbc hl,de ; dsk_cap - lba_req (msw)
|
||||
|
||||
; Restore lba_off
|
||||
pop hl ; lsw
|
||||
pop de ; msw
|
||||
|
||||
; Abort on overflow with error!
|
||||
jp c,err_noslice ; slice too high, error exit
|
||||
|
||||
; Finalize slice lba
|
||||
set 7,d ; set LBA access flag
|
||||
ld (lba),hl ; save new lba, low word
|
||||
ld (lba+2),de ; save new lba, high word
|
||||
@@ -878,6 +917,7 @@ unit db 0 ; working disk unit num
|
||||
slice db 0 ; working slice num
|
||||
lba dw 0,0 ; working lba
|
||||
sps dw 0 ; sectors per slice
|
||||
cap_req dw 0,0 ; lba cap required for slice
|
||||
mbrsec ds 512 ; MBR sector buffer
|
||||
dma dw 0 ; current DMA address
|
||||
bank db 0 ; HBIOS DMA bank
|
||||
|
||||
@@ -8,12 +8,12 @@ MEMTOP = FD
|
||||
BNKSWT = Y
|
||||
COMBAS = 80
|
||||
LERROR = Y
|
||||
NUMSEGS = 04
|
||||
NUMSEGS = 02
|
||||
MEMSEG00 = 01,17,00
|
||||
MEMSEG01 = 0E,72,02
|
||||
MEMSEG02 = 01,7F,03
|
||||
MEMSEG03 = 01,7F,04
|
||||
MEMSEG04 = 01,7F,05
|
||||
MEMSEG03 = 00,C0,04
|
||||
MEMSEG04 = 00,C0,05
|
||||
MEMSEG05 = 00,C0,06
|
||||
MEMSEG06 = 00,C0,07
|
||||
MEMSEG07 = 00,C0,08
|
||||
@@ -25,22 +25,22 @@ MEMSEG0C = 00,C0,0D
|
||||
MEMSEG0D = 00,C0,0E
|
||||
MEMSEG0E = 00,C0,0F
|
||||
MEMSEG0F = 00,C0,10
|
||||
HASHDRVA = Y
|
||||
HASHDRVB = Y
|
||||
HASHDRVC = Y
|
||||
HASHDRVD = Y
|
||||
HASHDRVE = Y
|
||||
HASHDRVF = Y
|
||||
HASHDRVG = Y
|
||||
HASHDRVH = Y
|
||||
HASHDRVI = Y
|
||||
HASHDRVJ = Y
|
||||
HASHDRVK = Y
|
||||
HASHDRVL = Y
|
||||
HASHDRVM = Y
|
||||
HASHDRVN = Y
|
||||
HASHDRVO = Y
|
||||
HASHDRVP = Y
|
||||
HASHDRVA = N
|
||||
HASHDRVB = N
|
||||
HASHDRVC = N
|
||||
HASHDRVD = N
|
||||
HASHDRVE = N
|
||||
HASHDRVF = N
|
||||
HASHDRVG = N
|
||||
HASHDRVH = N
|
||||
HASHDRVI = N
|
||||
HASHDRVJ = N
|
||||
HASHDRVK = N
|
||||
HASHDRVL = N
|
||||
HASHDRVM = N
|
||||
HASHDRVN = N
|
||||
HASHDRVO = N
|
||||
HASHDRVP = N
|
||||
ALTBNKSA = Y
|
||||
ALTBNKSB = Y
|
||||
ALTBNKSC = Y
|
||||
|
||||
@@ -8,7 +8,7 @@ MEMTOP = FD
|
||||
BNKSWT = N
|
||||
COMBAS = 00
|
||||
LERROR = Y
|
||||
NUMSEGS = 03
|
||||
NUMSEGS = 01
|
||||
MEMSEG00 = 00,80,00
|
||||
MEMSEG01 = 00,C0,02
|
||||
MEMSEG02 = 00,C0,03
|
||||
|
||||
@@ -65,12 +65,11 @@ xbnkmov:
|
||||
; ------------ -------------- -------
|
||||
; COMMON BID_COM 8Fh
|
||||
; 0: OS/BUFS BID_USR 8Eh
|
||||
; BID_BIOS 8Dh
|
||||
; 1: TPA BID_AUX 8Ch
|
||||
; 2: BUFS BID_AUX-1 8Bh
|
||||
; 3: BUFS BID_AUX-2 8Ah
|
||||
; 4: BUFS BID_AUX-3 89h
|
||||
; 5: BUFS BID_AUX-4 88h
|
||||
; 1: TPA BID_AUX 8Dh
|
||||
; 2: BUFS BID_AUX-1 8Ch
|
||||
; 3: BUFS BID_AUX-2 8Bh
|
||||
; 4: BUFS BID_AUX-3 8Ah
|
||||
; 5: BUFS BID_AUX-4 89h
|
||||
;
|
||||
; N.B., Below BID_AUX is considered RAM disk bank. Need to
|
||||
; make sure RAM disk is kept small enough to stay below
|
||||
@@ -80,17 +79,13 @@ xbnkmov:
|
||||
; to adjust for real size of RAM in system
|
||||
;
|
||||
?bnkxlt:
|
||||
or a
|
||||
jr z,bank0
|
||||
neg ; 2 -> -2
|
||||
add a,8Dh ; 8Dh - 2 = 8Bh
|
||||
@hbbio equ $ - 1 ; BID_BIOS
|
||||
ret
|
||||
bank0:
|
||||
ld a,8Eh ; 0 -> 8Eh
|
||||
neg ; ex: 2 -> -2
|
||||
add a,8Eh ; ex: 8Eh - 2 = 8Ch
|
||||
@hbusr equ $ - 1 ; BID_USR
|
||||
ret
|
||||
|
||||
|
||||
@hbbio db 0 ; BID_BIOS
|
||||
|
||||
movtyp db 0 ; non-zero for interbank move
|
||||
|
||||
movbnks:
|
||||
|
||||
@@ -4,6 +4,7 @@ setlocal
|
||||
pushd HDIAG && call Clean.cmd & popd
|
||||
pushd Apps && call Clean.cmd & popd
|
||||
pushd CPM22 && call Clean.cmd & popd
|
||||
pushd QPM && call Clean.cmd & popd
|
||||
pushd ZCPR && call Clean.cmd & popd
|
||||
pushd ZCPR-DJ && call Clean.cmd & popd
|
||||
pushd ZSDOS && call Clean.cmd & popd
|
||||
@@ -21,4 +22,5 @@ pushd Prop && call Clean & popd
|
||||
pushd RomDsk && call Clean & popd
|
||||
pushd Doc && call Clean & popd
|
||||
pushd ZRC && call Clean & popd
|
||||
pushd ZZRC && call Clean & popd
|
||||
pushd Z1RCC && call Clean & popd
|
||||
pushd ZZRCC && call Clean & popd
|
||||
|
||||
@@ -51,6 +51,8 @@ found:
|
||||
| INTTEST | No | Yes | Yes |
|
||||
| FAT | No | Yes | Yes |
|
||||
| TUNE | No | Yes | Yes |
|
||||
| WDATE | No | Yes | Yes |
|
||||
| HTALK | No | Yes | Yes |
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
@@ -104,7 +106,7 @@ The `ASSIGN` command supports "stacking" of instructions. For example,
|
||||
two slices of IDE 0 and will unassign E:.
|
||||
|
||||
When the command runs it will echo the resultant assignments to the
|
||||
console to confirm it's actions. It will also display the remaining
|
||||
console to confirm its actions. It will also display the remaining
|
||||
space available in disk buffers.
|
||||
|
||||
## Notes
|
||||
@@ -158,12 +160,19 @@ should only be specified for hard disk devices (SD, IDE, PPIDE).
|
||||
Only one drive letter may be assigned to a specific device/unit/slice
|
||||
at a time. Attempts to assign a duplicate drive letter will fail and
|
||||
display an error. If you wish to assign a different drive letter to a
|
||||
device/unit/slice, unassign the the existing drive letter first.
|
||||
device/unit/slice, unassign the existing drive letter first.
|
||||
|
||||
Be aware that this command will allow you to reassign or remove the
|
||||
assignment of your system drive letter. This can cause your operating
|
||||
system to fail and force you to reboot.
|
||||
|
||||
The `ASSIGN` command does **not** prevent you from assigning a drive
|
||||
letter to a slice that does not fit on the physical media. However,
|
||||
any subsequent attempt to refer to that drive letter will result in
|
||||
an immediate OS error of "no disk". Refer to "Hard Disk Capacity"
|
||||
in the $doc_user$ for a discussion of the exact number of slices that
|
||||
will fit on a specific physical disk size.
|
||||
|
||||
This command is particularly sensitive to being matched to the
|
||||
appropriate version of the RomWBW ROM you are using. Be very careful
|
||||
to keep all copies of `ASSIGN.COM` up to date with your ROM.
|
||||
@@ -235,8 +244,8 @@ confusing that ZPM3 is in the file called CPM3.SYS, but it is normal
|
||||
for ZPM3.
|
||||
|
||||
For the purposes of booting an operating system, each disk slice is
|
||||
considered it's own operating system. Each slice can be made bootable
|
||||
with it's own system tracks.
|
||||
considered its own operating system. Each slice can be made bootable
|
||||
with its own system tracks.
|
||||
|
||||
`SYSCOPY` uses drive letters to specify where to read/write the system
|
||||
boot images. However, at startup, the boot loaded will require you to
|
||||
@@ -246,7 +255,7 @@ to a drive letter so you will know what to enter at the boot loader
|
||||
prompt. By way of explanation, the boot loader does not know about
|
||||
drive letters because the operating system is not loaded yet.
|
||||
|
||||
If you want to put a a boot system image on a device and slice that is
|
||||
If you want to put a boot system image on a device and slice that is
|
||||
not currently assigned to a drive letter, you will need to assign a
|
||||
drive letter first.
|
||||
|
||||
@@ -466,7 +475,7 @@ control is fully functional (end to end).
|
||||
The `XM` application provided in RomWBW is an adaptation of a
|
||||
pre-existing XModem application. Based on the source code comments, it
|
||||
was originally adapted from Ward Christensen's MODEM2 by Keith
|
||||
Petersen and is labeled version 12.5.
|
||||
Petersen and is labelled version 12.5.
|
||||
|
||||
The original source of the application was found in the Walnut Creek
|
||||
CD-ROM and is called XMDM125.ARK dated 7/15/86.
|
||||
@@ -529,14 +538,14 @@ manually perform a verification function with the `FLASH VERIFY` form
|
||||
of the command.
|
||||
|
||||
The author's documentation for the application is found in the RomWBW
|
||||
distribution in the Doc\\Contrib directory.
|
||||
distribution in the Doc/Contrib directory.
|
||||
|
||||
## Notes
|
||||
|
||||
The application supports a significant number of EEPROM parts. It
|
||||
should automatically detect your part. If it does not recognize your
|
||||
chip, make sure that you do not have a write protect jumper set --
|
||||
this jumper will cause the ROM chip type to be unrecognized.
|
||||
this jumper can prevent the ROM chip from being recognized.
|
||||
|
||||
Reprogramming a ROM chip in-place is inherently dangerous. If anything
|
||||
goes wrong, you will be left with a non-functional system and no
|
||||
@@ -557,12 +566,17 @@ GitHub repository](https://github.com/willsowerbutts/flash4).
|
||||
|
||||
# FDISK80
|
||||
|
||||
RomWBW supports disk media with MS-DOS FAT filesystems (see FAT
|
||||
application). If you wish to put a FAT filesystem on your media, the
|
||||
FDISK80 application can be used to partition your media which is
|
||||
required in order to add a FAT filesystem.
|
||||
`FDISK80` allows you to create and manage traditional partitions on
|
||||
your hard disk media. Depending on the hard disk format and features
|
||||
you are using, RomWBW may need hard disk partitions defined.
|
||||
|
||||
This application is provided by John Coffman.
|
||||
Please refer to the $doc_user$ for more information on the use of
|
||||
partitions within RomWBW. It is very important to understand that
|
||||
RomWBW slices are completely different from disk partitions.
|
||||
|
||||
This application is provided by John Coffman. The primary
|
||||
documentation is in the file "FDisk Manual.pdf" found in the
|
||||
Doc directory of the RomWBW distribution.
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -577,20 +591,15 @@ applications. Please refer to the file called "FDisk Manual.pdf" in
|
||||
the Doc directory of the RomWBW distribution for further instructions.
|
||||
|
||||
There is also more information on using FAT partitions with RomWBW in
|
||||
the "RomWBW Getting Started.pdf" document in the Doc directory of the
|
||||
distribution.
|
||||
the $doc_user$ document in the Doc directory of the distribution.
|
||||
|
||||
## Notes
|
||||
|
||||
Partitioning of RomWBW media is **only** required if you want to add a
|
||||
FAT filesystem to your media. Do not partition your media if you are
|
||||
simply using it for RomWBW. To be clear, RomWBW slices do not require
|
||||
partitioning.
|
||||
|
||||
As described in "RomWBW Getting Started.pdf", you should be careful
|
||||
when adding a FAT partition to your media that the partition does not
|
||||
overlap with the area of the media being used for RomWBW slices. The
|
||||
"(R)eserve" function in `FDISK80` can help prevent this.
|
||||
Hard disk partition tables allow a maximum of 1024 cylinders when
|
||||
defining partitions. However, RomWBW uses exclusively Logical Block
|
||||
Addressing (LBA) which does not have this limitation. When defining
|
||||
partitions is usually best to define the start and size of of the
|
||||
partition using bytes or sectors.
|
||||
|
||||
## Etymology
|
||||
|
||||
@@ -620,9 +629,9 @@ shown on your console. The `TALK` application does this.
|
||||
`TALK` operates at the operating system level (not HBIOS).
|
||||
|
||||
The parameter to `TALK` refers to logical CP/M serial devices. Upon
|
||||
execution all characters types at the console will be sent to the
|
||||
execution all characters typed at the console will be sent to the
|
||||
device specified and all characters received by the specified device
|
||||
will be echoes on the console.
|
||||
will be echoed on the console.
|
||||
|
||||
Press Control+Z on the console to terminate the application.
|
||||
|
||||
@@ -638,6 +647,36 @@ provided in the RomWBW distribution.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# HTALK
|
||||
|
||||
`HTALK` is a variation of the `TALK` utility, but it works directly
|
||||
against HBIOS Character Units.
|
||||
|
||||
## Syntax
|
||||
|
||||
`HTALK COMn:`
|
||||
|
||||
## Usage
|
||||
|
||||
`HTALK` operates at the HBIOS level.
|
||||
|
||||
The parameter to `TALK` refers to a HBIOS character unit. Upon
|
||||
execution all characters typed at the console will be sent to the
|
||||
device specified and all characters received by the specified device
|
||||
will be echoed on the console.
|
||||
|
||||
Press Control+Z on the console to terminate the application.
|
||||
|
||||
## Notes
|
||||
|
||||
|
||||
## Etymology
|
||||
|
||||
The `TALK` command was created and donated to RomWBW by Tom Plano. It
|
||||
is an original product designed specifically for RomWBW.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# RTC
|
||||
|
||||
Many RomWBW systems provide real time clock hardware. The RTC
|
||||
@@ -661,7 +700,7 @@ After startup, the application provides the following options:
|
||||
| `R)aw` | will read the minute/second of the RTC clock iteratively every time the space key is pressed. Press enter to end. |
|
||||
| `L)oop` | will read the full date/time of the RTC clock iteratively every time the space key is pressed. Press enter to end. |
|
||||
| `C)harge` | will enable the battery charging function of the RTC. |
|
||||
| `N)ocharge` | will disable the battery charging functino of the RTC. |
|
||||
| `N)ocharge` | will disable the battery charging function of the RTC. |
|
||||
| `D)elay` | allows you to test the built-in timing delay in the program. It is not unusual for it to be wrong. |
|
||||
| `I)nit` | allows you to enter a date/time value for subsequent programming of the RTC using the S)et option. |
|
||||
| `G)et` | allows you to read the value of a non-volatile register in the RTC. |
|
||||
@@ -683,7 +722,7 @@ bypassing HBIOS.
|
||||
|
||||
## Etymology
|
||||
|
||||
The `RTC` application was originally written by Andrew Lync as part of
|
||||
The `RTC` application was originally written by Andrew Lynch as part of
|
||||
the original ECB SBC board development. It has since been modified to
|
||||
support most of the hardware variations included with RomWBW.
|
||||
|
||||
@@ -843,12 +882,12 @@ table which will be recognized by the application to find the FAT
|
||||
filesystem.
|
||||
|
||||
Although RomWBW-style CP/M media does not know anything about
|
||||
partition tables, it is entirely possible to have media that has both
|
||||
CP/M and FAT file systems on it. This is accomplished by creating a
|
||||
FAT filesystem on the media that starts on a track beyond the last
|
||||
track used by CP/M. Each CP/M slice on a media will occupy 8,320K
|
||||
(16,640 sectors). So, make sure to start your FAT partition beyond (<
|
||||
slice count> * 8,320K) or (<slice count * 16,640 sectors).
|
||||
partition tables, it is entirely possible to have media that
|
||||
has both CP/M and FAT file systems on it. This is accomplished
|
||||
by creating a FAT filesystem on the media that starts on a track
|
||||
beyond the last track used by CP/M. Each CP/M slice can occupy
|
||||
up to 8MB. So, make sure to start your FAT partition beyond
|
||||
(slice count) * 9MB.
|
||||
|
||||
The application infers whether you are attempting to reference a FAT
|
||||
or CP/M filesystem via the drive specifier (char before ':'). A
|
||||
@@ -860,8 +899,7 @@ assumed. For example:
|
||||
|
||||
| `2:README.TXT` refers to FAT file "README.TXT" on disk unit #2
|
||||
| `C:README.TXT` refers to CP/M file "README.TXT" on CP/M drive C
|
||||
| `README.TXT` refers to CP/M file "README.TXT" on the current CP/M
|
||||
drive
|
||||
| `README.TXT` refers to CP/M file "README.TXT" on the current CP/M drive
|
||||
|
||||
Files with SYS, HIDDEN, or R/O only attributes are not given any
|
||||
special treatment. Such files are found and processed like any other
|
||||
@@ -876,6 +914,8 @@ copy the file to the desired user area.
|
||||
Accessing FAT filesystems on a floppy requires the use of RomWBW HBIOS
|
||||
v2.9.1-pre.13 or greater.
|
||||
|
||||
Only the first 8 RomWBW disk units (0-7) can be referenced.
|
||||
|
||||
Files written are not verified.
|
||||
|
||||
Wildcard matching in FAT filesystems is a bit unusual as implemented by
|
||||
@@ -889,6 +929,28 @@ written in C and requires SDCC to compile. As such it is not part of
|
||||
the RomWBW build process. However, the full project and source code is
|
||||
found in the [FAT GitHub Repository](https://github.com/wwarthen/FAT).
|
||||
|
||||
## Known Issues
|
||||
|
||||
CP/M (and workalike) OSes have significant restrictions on filename
|
||||
characters. The FAT application will block any attempt to create a
|
||||
file on the CP/M filesystem containing any of these prohibited
|
||||
characters:
|
||||
|
||||
| `< > . , ; : ? * [ ] |/ \`
|
||||
|
||||
The operation will be aborted with "`Error: Invalid Path Name`" if such
|
||||
a filename character is encountered.
|
||||
|
||||
Since MS-DOS does allow some of these characters, you can have
|
||||
issues when copying files from MS-DOS to CP/M if the MS-DOS filenames
|
||||
use these characters. Unfortunately, FAT is not yet smart enough to
|
||||
substitute illegal characters with legal ones. So, you will need to
|
||||
clean the filenames before trying to copy them to CP/M.
|
||||
|
||||
The FAT application does try to detect the scenario where you are
|
||||
copying a file to itself. However, this detection is not perfect and
|
||||
can corrupt a file if it occurs. Be careful to avoid this.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# TUNE
|
||||
@@ -922,7 +984,7 @@ for the hardware found. If no hardware is detected, it will abort with
|
||||
an error message.
|
||||
|
||||
On Z180 systems, I/O wait states are added when writing to the sound
|
||||
chip to avoid exceeding it's speed limitations. On Z80 systems, you
|
||||
chip to avoid exceeding its speed limitations. On Z80 systems, you
|
||||
will need to ensure that the CPU clock speed of your system does not
|
||||
exceed the timing limitations of your sound chip.
|
||||
|
||||
@@ -939,7 +1001,7 @@ By default the application will attempt to interface directly to the sound
|
||||
chip. The optional argument `--hbios` supplied after the filename, will
|
||||
enable the application to use the HBIOS sound driver.
|
||||
|
||||
The HBIOS mode also support other switch as desribed below.
|
||||
The HBIOS mode also support other switch as described below.
|
||||
|
||||
| Switch | Description |
|
||||
| ----------- | ------------------------------------------------------ |
|
||||
@@ -1012,9 +1074,9 @@ speed will actually work on the current hardware. Setting a CPU
|
||||
speed that exceeds the capabilities of the system will result in
|
||||
unstable operation or a system stall.
|
||||
|
||||
Some peripherals are dependant on the CPU speed. For example, the Z180
|
||||
Some peripherals are dependent on the CPU speed. For example, the Z180
|
||||
ASCI baud rate and system timer are derived from the CPU speed. The
|
||||
CPUSPD applicastion will attempt to adjust these peripherals for
|
||||
CPUSPD application will attempt to adjust these peripherals for
|
||||
correct operation after modifying the CPU speed. However, in some
|
||||
cases this may not be possible. The baud rate of ASCI ports have a
|
||||
limited set of divisors. If there is no satisfactory divisor to
|
||||
@@ -1028,3 +1090,163 @@ hardware interface code is specific to RomWBW and the application will
|
||||
not operate correctly on non-RomWBW systems.
|
||||
|
||||
The source code is provided in the RomWBW distribution.
|
||||
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# VGMPLAY
|
||||
|
||||
This application will allow you to play Video Game Music files. VGM
|
||||
files contain music samples from a range of different sound chips
|
||||
that were used in arcade games, game consoles and personal computer
|
||||
systems.
|
||||
|
||||
Video Game Music files have a .VGM file extension and each file
|
||||
contains an embedded header that identifies the hardware it is
|
||||
intended for and also the title of the music.
|
||||
|
||||
All RomWBW operating system boot disks include a selection of sound
|
||||
files in user area 3. Additional music files can be found at:
|
||||
|
||||
[VGMRIPS website](https://vgmrips.net)
|
||||
|
||||
[PROJECT2612 website](https://project2612.org/)
|
||||
|
||||
Sound files are loaded into memory for playback, so the maximum size
|
||||
file that can be played is around 52Kb.
|
||||
|
||||
Sound chips currently supported are:
|
||||
|
||||
* AY-3-8190 (and equivalent YM2149)
|
||||
* YM2612 (and equivalent YM3848)
|
||||
* SN76489 (single chip mono and dual chip stereo)
|
||||
* YM2151
|
||||
|
||||
VGMPLAY supports playback of files with multiple combinations of these
|
||||
chips.
|
||||
|
||||
## Syntax
|
||||
|
||||
`VGMPLAY `*`<filename>`*
|
||||
|
||||
*`<filename>`* is the name of a sound file ending in .VGM
|
||||
|
||||
## Usage
|
||||
|
||||
VGMPLAY does not automatically detect the hardware platform or sound
|
||||
hardware that you are using. This means a version customized for your
|
||||
system must be assembled before use.
|
||||
|
||||
To play a sound file, just use the VGMPLAY command and specify the file
|
||||
to play after the command. So, for example, `VGMPLAY TEDDY` will load
|
||||
the TEDDY.VGM sound file into memory and begin playing it.
|
||||
|
||||
Playback can be stopped by pressing a key. There may be a delay before
|
||||
playback stops.
|
||||
|
||||
## Notes
|
||||
|
||||
The default build configuration for VGMPLAY is:
|
||||
|
||||
CPU speed: Autodetected
|
||||
|
||||
| chip | number | port | notes
|
||||
| --------- | ------- | -------- | ----------
|
||||
| AY-3-8910 | 1st | 09ah | stereo
|
||||
| AY-3-8910 | 2nd | not set | stereo
|
||||
| YM2612 | 1st | 0c0h | stereo
|
||||
| YM2612 | 2nd | 0c4h | stereo
|
||||
| SN76489 | 1st | 0c8h | mono/left
|
||||
| SN76489 | 2nd | 0c9h | mono/right
|
||||
| YM2151 | 1st | 0cah | stereo
|
||||
| YM2151 | 2nd | 0cbh | stereo
|
||||
|
||||
Inconsistant, garbled or distorted playback can be an indication that
|
||||
your CPU clock speed is too high for your sound chip. In this case, if
|
||||
your platform supports speed switching, then the CPUSPD application
|
||||
can be used to reduce your processor speed.
|
||||
|
||||
VGMPLAY is still under development. The source code is provided in the
|
||||
RomWBW distribution.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# WDATE
|
||||
|
||||
`wdate` is a utility for CP/M systems that have Wayne Warthen's
|
||||
ROMWBW firmware. It reads or sets the real-time clock, using function
|
||||
calls in the BIOS. It should work on any RTC device that is supported by
|
||||
ROMWBW, including the internal interrupt-driven timer that is is available
|
||||
on some systems.
|
||||
|
||||
`wdate` differs from the `rtc.com` utility that is provided with the
|
||||
ROMWBW version of CP/M in that it only gets and sets the date/time.
|
||||
`rtc.com` can also manipulate the nonvolatile RAM in certain clock
|
||||
devices, and modify the charge controller. However, `wdate` is (I would
|
||||
argue) easier to use, as it takes its input from the command line, which
|
||||
can be edited, and it's less fussy about the format. It doesn't require
|
||||
the date to be set if you only want to change the time, for example.
|
||||
In addition, `wdate` has at least some error checking.
|
||||
|
||||
`wdate` displays the day-of-week and month as English text, not
|
||||
numbers. It calculates the day-of-week from the year, month, and day.
|
||||
RTC chips usually store a day-of-week value, but it's useless in this
|
||||
application for two reasons: first, the BIOS does not expose it. Second,
|
||||
there is no universally-accepted way to interpret it (which day does
|
||||
the week start on? Is '0' a valid day of the week?)
|
||||
|
||||
## Syntax
|
||||
|
||||
| `WDATE`
|
||||
| `WDATE ` *`<hr> <min>`*
|
||||
| `WDATE ` *`<hr> <min> <sec>`*
|
||||
| `WDATE ` *`<year> <month> <day> <hr> <min> <sec>`*
|
||||
|
||||
## Usage
|
||||
|
||||
A> wdate
|
||||
Saturday 27 May 13:14:39 2023
|
||||
|
||||
With no arguments, displays the current date and time.
|
||||
|
||||
A> wdate hr min
|
||||
|
||||
With two arguments, sets the time in hours and minutes, without changing date
|
||||
or seconds
|
||||
|
||||
A> wdate hr min sec
|
||||
|
||||
With three arguments, sets the time in hours, minutes, and seconds, without
|
||||
changing date
|
||||
|
||||
A> wdate year month day hr min sec
|
||||
|
||||
With six arguments, sets date and time. All numbers are one or two digits. The
|
||||
two-digit year starts at 2000.
|
||||
|
||||
A> wdate /?
|
||||
|
||||
Show a summary of the command-line usage.
|
||||
|
||||
## Notes
|
||||
|
||||
I've tested this utility with the DS1302 clock board designed by Ed
|
||||
Brindly, and on the interrupt-driven timer built into my Z180 board.
|
||||
However, it does not interact with hardware, only BIOS; I would expect
|
||||
it to work with other hardware.
|
||||
|
||||
wdate checks for the non-existence of ROMWBW, and also for failing
|
||||
operations on the RTC. It will display the terse "No RTC" message in
|
||||
both cases.
|
||||
|
||||
The ROMWBW functions that manipulate the date and time operate on BCD
|
||||
numbers, as RTC chips themselves usually do. wdate works in decimal, so
|
||||
that it can check that the user input makes sense. A substantial part of
|
||||
the program's code is taken up by number format conversion and range
|
||||
checking.
|
||||
|
||||
## Etymology
|
||||
|
||||
The `WDATE` application was written and contributed by Kevin Boone.
|
||||
The source code is available on GitHub at
|
||||
[https://github.com/kevinboone/wdate-cpm/blob/main/README.md](https://github.com/kevinboone/wdate-cpm/blob/main/README.md).
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user