mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Compare commits
1430 Commits
v3.0.0
...
v3.3.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
bd664c3a1f | ||
|
|
dc151ad1a7 | ||
|
|
2f3fb51884 | ||
|
|
29c7f3a920 | ||
|
|
36fe842bec | ||
|
|
3a8a503c8e | ||
|
|
73213d4321 | ||
|
|
7d19d3e403 | ||
|
|
c157d52c1d | ||
|
|
3034fb6b5b | ||
|
|
fee6f29cf0 | ||
|
|
a531551573 | ||
|
|
53bdee68d5 | ||
|
|
0b8cb94cc2 | ||
|
|
975656ef6f | ||
|
|
ce6622244d | ||
|
|
b649cf19ce | ||
|
|
96902ae2bd | ||
|
|
97cb2f1dfc | ||
|
|
00158b0107 | ||
|
|
146826b142 | ||
|
|
979276e0b5 | ||
|
|
0a6009b38f | ||
|
|
8656cf992e | ||
|
|
4f48e48a99 | ||
|
|
6dac01102d | ||
|
|
cd161067db | ||
|
|
a9173c076b | ||
|
|
8ffe53ea68 | ||
|
|
4d9c93734f | ||
|
|
83ff343186 | ||
|
|
71a8b2b177 | ||
|
|
c51963529d | ||
|
|
979e763739 | ||
|
|
834f2d7682 | ||
|
|
16475fe408 | ||
|
|
ec5b19acad | ||
|
|
d2e1e5be4b | ||
|
|
3603ef9c9d | ||
|
|
3aed60afe2 | ||
|
|
e1e2c2efa9 | ||
|
|
55b4e1e26d | ||
|
|
2271c086b5 | ||
|
|
cb336c9ba5 | ||
|
|
ad0a6af047 | ||
|
|
22afb8333c | ||
|
|
2b4631195a | ||
|
|
d5f0699fc3 | ||
|
|
5c84fc6213 | ||
|
|
d9f11b9f5e | ||
|
|
bb2a68e066 | ||
|
|
cd426ba6ca | ||
|
|
491bbb68a6 | ||
|
|
b3bf3e27ee | ||
|
|
523ce60093 | ||
|
|
3f00cfbfb8 | ||
|
|
2dd9edd8ca | ||
|
|
6145383a65 | ||
|
|
c0721a3f85 | ||
|
|
c10497bd03 | ||
|
|
5b1542e49b | ||
|
|
96269a7f45 | ||
|
|
bd03277bfe | ||
|
|
c072027b87 | ||
|
|
e409391f14 | ||
|
|
030228e9b8 | ||
|
|
d584d3d553 | ||
|
|
2049b35ee2 | ||
|
|
285bc6611f | ||
|
|
be8177b8a4 | ||
|
|
9c80db786e | ||
|
|
d062b4345d | ||
|
|
03bf1527cc | ||
|
|
38318262e9 | ||
|
|
eefad65904 | ||
|
|
4d6a922402 | ||
|
|
e32d6e2d5d | ||
|
|
9ea462ef7a | ||
|
|
1681e159bd | ||
|
|
3b8973fa12 | ||
|
|
ef1989f600 | ||
|
|
023e54a9a8 | ||
|
|
73b0a3d941 | ||
|
|
f86019a628 | ||
|
|
1839120e9d | ||
|
|
8e110221a3 | ||
|
|
8df7712633 | ||
|
|
149ffb899b | ||
|
|
4f60cd4e57 | ||
|
|
e83e26b6db | ||
|
|
4cd533117f | ||
|
|
20cab617c7 | ||
|
|
323cfec931 | ||
|
|
ced09b2b95 | ||
|
|
93f8c67f9f | ||
|
|
999849c62b | ||
|
|
4babc51588 | ||
|
|
44ccc167ff | ||
|
|
eae8295811 | ||
|
|
c76cb6737e | ||
|
|
af723c5370 | ||
|
|
57e4ed476c | ||
|
|
167c10fafc | ||
|
|
6d1a9f5b7c | ||
|
|
bd0bb94c52 | ||
|
|
e1a833b1a8 | ||
|
|
7bd6df1e99 | ||
|
|
d3fcf8cea2 | ||
|
|
c7eb82e4dd | ||
|
|
20d07ded7b | ||
|
|
fc57ca4a68 | ||
|
|
444c57fdfb | ||
|
|
ca61f340db | ||
|
|
601ac66762 | ||
|
|
c204110a6f | ||
|
|
e8d0eedc2b | ||
|
|
7b55b8ba86 | ||
|
|
069aa2b5be | ||
|
|
eeff03c7aa | ||
|
|
791fcea466 | ||
|
|
f56c9007bb | ||
|
|
360ba5ca95 | ||
|
|
7adf2038f1 | ||
|
|
a77744d8e6 | ||
|
|
dd47283fda | ||
|
|
5cc85e0444 | ||
|
|
6e51070590 | ||
|
|
a7853fe6d0 | ||
|
|
590dcd0b4f | ||
|
|
e25107309b | ||
|
|
def29c7668 | ||
|
|
0c92c69ed8 | ||
|
|
54ce18bb75 | ||
|
|
0ebde397fa | ||
|
|
8bf93619a0 | ||
|
|
2727c02c56 | ||
|
|
d6ac15df40 | ||
|
|
c2a6c7fa22 | ||
|
|
a742e5016e | ||
|
|
248ef0e1b4 | ||
|
|
19101fda39 | ||
|
|
9d1cfd4a22 | ||
|
|
cb20784685 | ||
|
|
66d524c096 | ||
|
|
aceef15481 | ||
|
|
d4ca3de40f | ||
|
|
f0def03d0e | ||
|
|
b2b070232d | ||
|
|
27935123cf | ||
|
|
d40c6be60d | ||
|
|
aa93eb62f2 | ||
|
|
94c32c9fd0 | ||
|
|
3b0951f6d5 | ||
|
|
4385efb0f7 | ||
|
|
d241db5c11 | ||
|
|
d9a3a5086c | ||
|
|
0c61385df4 | ||
|
|
cf142b3a91 | ||
|
|
9a503696c8 | ||
|
|
bfdfd83f2a | ||
|
|
95f8c35c36 | ||
|
|
c065af147a | ||
|
|
11ea0c8c27 | ||
|
|
dbea21fadd | ||
|
|
4d5f2ab219 | ||
|
|
b82ff327cf | ||
|
|
44b17ccc3a | ||
|
|
b2e1294452 | ||
|
|
23a10343ca | ||
|
|
5805f13a62 | ||
|
|
d39f0201f4 | ||
|
|
94cf9a209e | ||
|
|
691842c1bc | ||
|
|
eb255e7016 | ||
|
|
fe19472a2c | ||
|
|
526a1a5d33 | ||
|
|
719c993a60 | ||
|
|
70697a762c | ||
|
|
a62f5805ca | ||
|
|
87a6701464 | ||
|
|
3f3a13bff6 | ||
|
|
982906757e | ||
|
|
c1412ee755 | ||
|
|
e974a4a960 | ||
|
|
0549cdcb36 | ||
|
|
0e32dd58fa | ||
|
|
69b54a000c | ||
|
|
0d8b04ffa6 | ||
|
|
9251f44dec | ||
|
|
fde0c285d2 | ||
|
|
44467f4725 | ||
|
|
0767a2ceff | ||
|
|
9b27118a3b | ||
|
|
b98ee17e14 | ||
|
|
c046f0365c | ||
|
|
16390d3159 | ||
|
|
1b34dc0941 | ||
|
|
4a88e0bcae | ||
|
|
1e52a0b7f3 | ||
|
|
f6d0e7fea4 | ||
|
|
4af5d457eb | ||
|
|
e804326d54 | ||
|
|
5b9e9ba6bf | ||
|
|
4f25cf1366 | ||
|
|
170ac7d9e8 | ||
|
|
eb208d735b | ||
|
|
25382b01e2 | ||
|
|
d55587e341 | ||
|
|
7d9ff0599b | ||
|
|
0efd08539e | ||
|
|
291017f1a9 | ||
|
|
7549789248 | ||
|
|
5d81574226 | ||
|
|
9ccbbbd475 | ||
|
|
f6285a8e6a | ||
|
|
9f3c9e180d | ||
|
|
97bc3ba3b5 | ||
|
|
8e414a3efc | ||
|
|
a0d437357e | ||
|
|
0b0b3611bb | ||
|
|
dd22c54f32 | ||
|
|
4e153a2bc1 | ||
|
|
51d9bdb655 | ||
|
|
25374946e0 | ||
|
|
689f8a2280 | ||
|
|
36b160f934 | ||
|
|
bf965c2604 | ||
|
|
e6b9d2dcfd | ||
|
|
33afeac10d | ||
|
|
2c0b818aba | ||
|
|
c5043d66f9 | ||
|
|
1b8e88e1a2 | ||
|
|
d599a3d57b | ||
|
|
461d1ce512 | ||
|
|
8c9ce2184e | ||
|
|
e5b1d5afc8 | ||
|
|
214ed54584 | ||
|
|
97aa0aae9f | ||
|
|
92399fe537 | ||
|
|
b6aa769f12 | ||
|
|
21a38aed6e | ||
|
|
48c5f4da9d | ||
|
|
7b46b1a89b | ||
|
|
85adb811bb | ||
|
|
79dc868e6e | ||
|
|
52cd458e76 | ||
|
|
59c523c575 | ||
|
|
e0a0036aa0 | ||
|
|
4d3640caaa | ||
|
|
f4ab972e3a | ||
|
|
e698cd9a4a | ||
|
|
99f4e174ad | ||
|
|
476fe84570 | ||
|
|
6ac68029e4 | ||
|
|
d02fe9d8df | ||
|
|
4d3e08fe38 | ||
|
|
e8ecdd0fac | ||
|
|
bc04d5ecb9 | ||
|
|
da71f225ca | ||
|
|
5439a12fe8 | ||
|
|
ca67ee41c5 | ||
|
|
a29139dccb | ||
|
|
ca30732f31 | ||
|
|
8f1b6bb402 | ||
|
|
b5a7c08fde | ||
|
|
8a54b391f3 | ||
|
|
7911ffa835 | ||
|
|
48532231c9 | ||
|
|
9e3787b0a3 | ||
|
|
32005942e4 | ||
|
|
a00a42b244 | ||
|
|
288dd99f44 | ||
|
|
ed981de47a | ||
|
|
3b345f8525 | ||
|
|
6d9aa9b676 | ||
|
|
ad8aa4a4a2 | ||
|
|
1fe9fda31e | ||
|
|
dd3dfff172 | ||
|
|
336a3d5c81 | ||
|
|
c0af840fc1 | ||
|
|
4484d7f377 | ||
|
|
12b135a3db | ||
|
|
97e83e6fc5 | ||
|
|
891893c0e5 | ||
|
|
e15a1cb972 | ||
|
|
d79adf24ba | ||
|
|
5998d66dc8 | ||
|
|
63e937314b | ||
|
|
769a02829a | ||
|
|
513ff0b81e | ||
|
|
47d2b3a1f1 | ||
|
|
0d37a32d5c | ||
|
|
d5962681f1 | ||
|
|
662b679fdc | ||
|
|
8d92e0f8c9 | ||
|
|
13dea5090a | ||
|
|
ca14d29a62 | ||
|
|
b544384225 | ||
|
|
0281b8f854 | ||
|
|
9d4330b754 | ||
|
|
b142dd45d5 | ||
|
|
f65e6b2ac5 | ||
|
|
b0d93dadc0 | ||
|
|
6a69f3920f | ||
|
|
725151cdc5 | ||
|
|
f7027d3bbc | ||
|
|
2472fe7951 | ||
|
|
3432fe8822 | ||
|
|
bcb32c3e74 | ||
|
|
67c835c133 | ||
|
|
93077c1f45 | ||
|
|
1f690dd5c8 | ||
|
|
9b6b19bf73 | ||
|
|
807fa7624e | ||
|
|
fb21a1e257 | ||
|
|
6d115df490 | ||
|
|
5af8996e66 | ||
|
|
21403cedb2 | ||
|
|
32d50a0185 | ||
|
|
cd63ad38fc | ||
|
|
ce16512905 | ||
|
|
21ecc5de54 | ||
|
|
611394b76a | ||
|
|
171d4d4ae7 | ||
|
|
05fb150ad3 | ||
|
|
37490e7d44 | ||
|
|
d1c75888cd | ||
|
|
79dfbafc13 | ||
|
|
4c3c078fa4 | ||
|
|
c95ea4440e | ||
|
|
1f0bd36c92 | ||
|
|
b171fc8fef | ||
|
|
df1a8df463 | ||
|
|
322c083531 | ||
|
|
e017135963 | ||
|
|
e87c975a24 | ||
|
|
d03b348072 | ||
|
|
18135d1bcf | ||
|
|
cb37d34a52 | ||
|
|
ddb842ecd7 | ||
|
|
2e6122025d | ||
|
|
535dc1314e | ||
|
|
6b81146286 | ||
|
|
972d6a2dc8 | ||
|
|
d092349cd8 | ||
|
|
10a92791b8 | ||
|
|
c4e23fdaf5 | ||
|
|
08ec3715b9 | ||
|
|
9968981fd0 | ||
|
|
07e8eb1adf | ||
|
|
4a03ebdb37 | ||
|
|
a6e4a67aec | ||
|
|
d2730018a8 | ||
|
|
7f0bfb6753 | ||
|
|
807ae04533 | ||
|
|
8d18b982da | ||
|
|
7e8bde717c | ||
|
|
3a468cbc50 | ||
|
|
c508929668 | ||
|
|
b07600b6ba | ||
|
|
964af4c94f | ||
|
|
c39009b5ee | ||
|
|
912c7a865e | ||
|
|
dadf3d886b | ||
|
|
5424726145 | ||
|
|
55631c6a21 | ||
|
|
7f49a0699c | ||
|
|
40d744f81f | ||
|
|
ac4d271961 | ||
|
|
53fe7a60f3 | ||
|
|
68f00df56d | ||
|
|
e23065315f | ||
|
|
d9d95e76dc | ||
|
|
2208441e86 | ||
|
|
196f551a1f | ||
|
|
2cc15070e8 | ||
|
|
0480bf19cf | ||
|
|
bf9361b26b | ||
|
|
df26984135 | ||
|
|
84edfeee28 | ||
|
|
149f84f64a | ||
|
|
475596b7b4 | ||
|
|
be1fb0836f | ||
|
|
711bf1c877 | ||
|
|
faa9db9394 | ||
|
|
9bae200836 | ||
|
|
f82bd94d8c | ||
|
|
fdb5465e34 | ||
|
|
3bc8afcc87 | ||
|
|
6e031f6e2e | ||
|
|
1c993d454a | ||
|
|
6de8d63913 | ||
|
|
f5806a1589 | ||
|
|
e41f1b7bb5 | ||
|
|
6c55035ddf | ||
|
|
b0d4458122 | ||
|
|
90a1f814c1 | ||
|
|
3fd8c79898 | ||
|
|
3ac788374b | ||
|
|
aa1acc9bf8 | ||
|
|
479b627451 | ||
|
|
ed117bdc88 | ||
|
|
4bd371a36b | ||
|
|
a4278f2e9e | ||
|
|
90b0eb8729 | ||
|
|
2625f6b6fc | ||
|
|
7b9e1af155 | ||
|
|
74d7733138 | ||
|
|
5a1fd00c04 | ||
|
|
47d9c4008d | ||
|
|
24677d81be | ||
|
|
a6dcb90d36 | ||
|
|
440248fd47 | ||
|
|
bcd1cb8866 | ||
|
|
6ad45ab0de | ||
|
|
6bce5a567e | ||
|
|
e4686cc50c | ||
|
|
6d70dd92fb | ||
|
|
fc28738edc | ||
|
|
72039fe414 | ||
|
|
844b26d2e5 | ||
|
|
7905429ea0 | ||
|
|
d265f1323d | ||
|
|
f3d4c9adb5 | ||
|
|
0e7db1eb61 | ||
|
|
04acb4102a | ||
|
|
cea11393db | ||
|
|
1db11ca924 | ||
|
|
c834ff216a | ||
|
|
32228eb89c | ||
|
|
120d180609 | ||
|
|
ccdd2091c1 | ||
|
|
eb33aeb63a | ||
|
|
28bee54bbb | ||
|
|
f160def46f | ||
|
|
2077852173 | ||
|
|
7bfedd9ed0 | ||
|
|
3ab531aeb8 | ||
|
|
16aab25ccf | ||
|
|
3082f39ef4 | ||
|
|
2caeab542c | ||
|
|
14d2d25894 | ||
|
|
c08692eae9 | ||
|
|
9f12c1d28f | ||
|
|
2384f4ef1a | ||
|
|
4413101e2a | ||
|
|
d43fbc0c18 | ||
|
|
cfb146242d | ||
|
|
82f7ebe3df | ||
|
|
39c4cfc563 | ||
|
|
524b368bf6 | ||
|
|
cab5c72f3d | ||
|
|
cd37599444 | ||
|
|
dd531b56b8 | ||
|
|
017704172b | ||
|
|
f466f16a4d | ||
|
|
a6a812e03f | ||
|
|
abee120b4e | ||
|
|
68134d3ef2 | ||
|
|
756f538a70 | ||
|
|
ddb3169c28 | ||
|
|
522a7a8378 | ||
|
|
3582fcedc5 | ||
|
|
c1083ce5b2 | ||
|
|
6e083f4cb6 | ||
|
|
145ae8baa1 | ||
|
|
366293906e | ||
|
|
cc07f1745b | ||
|
|
db9f1fe35c | ||
|
|
7057bfcf05 | ||
|
|
76ce394f7e | ||
|
|
5841cbc18e | ||
|
|
f8e0fb3a6f | ||
|
|
5611608f91 | ||
|
|
2c633d2d13 | ||
|
|
fc2a6929bc | ||
|
|
f27c346565 | ||
|
|
72e7e0e478 | ||
|
|
e8752f9ddc | ||
|
|
9873c1a366 | ||
|
|
5d3839a864 | ||
|
|
6c82fd1f0c | ||
|
|
097777c043 | ||
|
|
333fc6c0f5 | ||
|
|
d6783e5a6e | ||
|
|
5942c2c561 | ||
|
|
25c752a2de | ||
|
|
d6f9a727b8 | ||
|
|
aaae6c5446 | ||
|
|
cb30cc37cd | ||
|
|
1c7c21cdf8 | ||
|
|
14b005d64e | ||
|
|
ed08e5a9bd | ||
|
|
a7a0168655 | ||
|
|
443c1cf233 | ||
|
|
217be93785 | ||
|
|
f2664d31b0 | ||
|
|
5c44fcd88e | ||
|
|
62e2f41100 | ||
|
|
5b501eb956 | ||
|
|
ceeb213756 | ||
|
|
64bd0c7965 | ||
|
|
b117fe4e18 | ||
|
|
6d53c4534a | ||
|
|
6d1b61c7a3 | ||
|
|
d58d7146ba | ||
|
|
61aae6b47a | ||
|
|
37cb6d7d19 | ||
|
|
42b9f18f65 | ||
|
|
7e17598fd9 | ||
|
|
63d9867705 | ||
|
|
851646f7fa | ||
|
|
615454a5bc | ||
|
|
4ff893467d | ||
|
|
d8d5fbd621 | ||
|
|
517d7ec897 | ||
|
|
c6207155f6 | ||
|
|
cb82e3ef27 | ||
|
|
d5c001aad7 | ||
|
|
964d2e639b | ||
|
|
219c7d12e2 | ||
|
|
4f9a63349c | ||
|
|
2cd0486837 | ||
|
|
e4ce57b9d5 | ||
|
|
e1cb974e76 | ||
|
|
72eddcf699 | ||
|
|
76c2bef1a1 | ||
|
|
feaf747b25 | ||
|
|
74dc98b140 | ||
|
|
4f941de39c | ||
|
|
7e9010ed04 | ||
|
|
66fa6d9944 | ||
|
|
afb2711120 | ||
|
|
9b9b3b4210 | ||
|
|
a9aa50d128 | ||
|
|
cbe8ec2aff | ||
|
|
9b7a530ee9 | ||
|
|
3d278042d6 | ||
|
|
87579e5b65 | ||
|
|
a13ec71c7a | ||
|
|
727847fd83 | ||
|
|
23eaab4f35 | ||
|
|
f4595f9c08 | ||
|
|
3227f6a6bc | ||
|
|
fa5616a17f | ||
|
|
6aa216e040 | ||
|
|
17e36df0a0 | ||
|
|
43914c45c1 | ||
|
|
9a3193012c | ||
|
|
67279fbe17 | ||
|
|
3a8ae3cfae | ||
|
|
a1a2ff05b9 | ||
|
|
b26614c468 | ||
|
|
7503e2a868 | ||
|
|
488d56e699 | ||
|
|
1a44d170c3 | ||
|
|
2e72b206d7 | ||
|
|
80ee13e0f4 | ||
|
|
44e666d053 | ||
|
|
0ef6694526 | ||
|
|
9f2a59fea8 | ||
|
|
8b9be05bea | ||
|
|
bfe03a5f5e | ||
|
|
206ed87210 | ||
|
|
052800ae0e | ||
|
|
3c22269bf5 | ||
|
|
7b9051f08c | ||
|
|
ac2f10996a | ||
|
|
a4ef0fbaa9 | ||
|
|
b5c9c70822 | ||
|
|
51bcfbe767 | ||
|
|
246c87f46a | ||
|
|
44a5ef3fd6 | ||
|
|
196d51d143 | ||
|
|
4f495d1b1c | ||
|
|
68ed12541a | ||
|
|
db4e31793e | ||
|
|
de5f2b1308 | ||
|
|
acd1b52893 | ||
|
|
7dce259068 | ||
|
|
86f14cf744 | ||
|
|
da882d26a5 | ||
|
|
e92613c747 | ||
|
|
65c5f973e4 | ||
|
|
5cc6f7fcd0 | ||
|
|
450b3aff88 | ||
|
|
5e12bc3199 | ||
|
|
d6a348d110 | ||
|
|
150a02358e | ||
|
|
fc3b7f43ce | ||
|
|
e544e21f04 | ||
|
|
2809ba5b6d | ||
|
|
e2d586ca3c | ||
|
|
2a754c8fc6 | ||
|
|
7fafb5cc4b | ||
|
|
637174373f | ||
|
|
aa29fe79f6 | ||
|
|
88670cc3eb | ||
|
|
6a796a2f8d | ||
|
|
5e0f2f89c1 | ||
|
|
1a78927854 | ||
|
|
92eb635700 | ||
|
|
073a698a6a | ||
|
|
8e17067104 | ||
|
|
1d0a42215c | ||
|
|
deca27006e | ||
|
|
d3fd46451f | ||
|
|
0710dd563f | ||
|
|
57380905f6 | ||
|
|
93cb50b244 | ||
|
|
d32beb4a9f | ||
|
|
a0bf6659f1 | ||
|
|
600aa2b2fb | ||
|
|
182e60e700 | ||
|
|
370199e17b | ||
|
|
20838c2f89 | ||
|
|
7fcd36f11c | ||
|
|
314bf15395 | ||
|
|
e9febecab1 | ||
|
|
f6f520591e | ||
|
|
8b7f126263 | ||
|
|
b33e7db70f | ||
|
|
11449b0832 | ||
|
|
b234881503 | ||
|
|
cdb0f5be29 | ||
|
|
17ed17be08 | ||
|
|
c3fe71112e | ||
|
|
a5b9cd4630 | ||
|
|
dda7a3e183 | ||
|
|
2e570b368c | ||
|
|
28bacbee41 | ||
|
|
484ef274e9 | ||
|
|
436c9d0db2 | ||
|
|
3c710f3094 | ||
|
|
4e087fc608 | ||
|
|
6739422b9a | ||
|
|
e4f638a17a | ||
|
|
4df77e3fac | ||
|
|
3349f68213 | ||
|
|
7587f1fbba | ||
|
|
cc0f2ce3b2 | ||
|
|
eab1eef242 | ||
|
|
9fd81e03e9 | ||
|
|
5852349e15 | ||
|
|
8655a7b0d8 | ||
|
|
25306df2cd | ||
|
|
31ec81bb19 | ||
|
|
9d96f5c4de | ||
|
|
78af325b22 | ||
|
|
1bcf3ef77e | ||
|
|
a3522d4eaa | ||
|
|
c75f719923 | ||
|
|
09e5df5ad6 | ||
|
|
ff55b0d8f0 | ||
|
|
6c98f67413 | ||
|
|
29878ceefb | ||
|
|
1de6f8f8ab | ||
|
|
12d4204465 | ||
|
|
e60bf088c9 | ||
|
|
995d0a8c1c | ||
|
|
036dad095c | ||
|
|
111aa66405 | ||
|
|
24d0a22d35 | ||
|
|
3fa576a94e | ||
|
|
c30f107c68 | ||
|
|
f126b9ff63 | ||
|
|
7d707b4b88 | ||
|
|
222f4c5831 | ||
|
|
10724379c4 | ||
|
|
9da722d5e2 | ||
|
|
39185fa8b3 | ||
|
|
f89d609de2 | ||
|
|
f48a7e3974 | ||
|
|
b28e2094cb | ||
|
|
a200192f42 | ||
|
|
40e94ebd99 | ||
|
|
44b5f16793 | ||
|
|
91c7c1dbba | ||
|
|
9b9f9ded08 | ||
|
|
d755be8a41 | ||
|
|
90fac52c16 | ||
|
|
e9ef9e0c93 | ||
|
|
830100cd84 | ||
|
|
1726744650 | ||
|
|
1603556577 | ||
|
|
2bd6158b36 | ||
|
|
fe8425deef | ||
|
|
0ebfebe8d1 | ||
|
|
e79770dcea | ||
|
|
d4a542150b | ||
|
|
88e7b7b7ae | ||
|
|
3593a7fabd | ||
|
|
7416f5f79e | ||
|
|
3e8fe0c64c | ||
|
|
f74f0fa64c | ||
|
|
6152d58a69 | ||
|
|
a663278f05 | ||
|
|
7696c01670 | ||
|
|
8c38429439 | ||
|
|
6c9a1db8b8 | ||
|
|
d22fd28d1d | ||
|
|
d1779989ed | ||
|
|
d531a0e4c3 | ||
|
|
8fb07c725b | ||
|
|
b876889c7e | ||
|
|
1e1ad94b6d | ||
|
|
4d208094e7 | ||
|
|
ef71aa7460 | ||
|
|
06a379c281 | ||
|
|
86e55f7968 | ||
|
|
e463959fee | ||
|
|
226c24d666 | ||
|
|
8e4ea799af | ||
|
|
c7e4978d44 | ||
|
|
b9d1cb12fe | ||
|
|
ef6b9acbb4 | ||
|
|
415ccc313f | ||
|
|
31b09f4ab9 | ||
|
|
b8a0515791 | ||
|
|
b00d25b0ab | ||
|
|
53d4f657af | ||
|
|
3e0771acf3 | ||
|
|
ea10810934 | ||
|
|
8173414bf5 | ||
|
|
a919292386 | ||
|
|
83529a7f76 | ||
|
|
0c4f82c881 | ||
|
|
9aef5b0977 | ||
|
|
8981a255a7 | ||
|
|
99358a7aaf | ||
|
|
242dc59471 | ||
|
|
a473322a98 | ||
|
|
099a9331bf | ||
|
|
9a77dd28f9 | ||
|
|
4baa629894 | ||
|
|
74edbb7934 | ||
|
|
16afe4b778 | ||
|
|
fc98d8e953 | ||
|
|
be34e9d396 | ||
|
|
9fee763265 | ||
|
|
7c789ba2a5 | ||
|
|
fb3dcccc01 | ||
|
|
12fea8a1d0 | ||
|
|
ab3abb7936 | ||
|
|
c4a0548e76 | ||
|
|
b71d9655be | ||
|
|
ff6d854298 | ||
|
|
a72802470a | ||
|
|
0b92e41935 | ||
|
|
1dea4a28dc | ||
|
|
518ddd9f46 | ||
|
|
b912761fcc | ||
|
|
63da5a821a | ||
|
|
588fdb34eb | ||
|
|
4cbe3212a5 | ||
|
|
e18c2bb4fc | ||
|
|
41061179b5 | ||
|
|
ca55193d23 | ||
|
|
1945c0f52d | ||
|
|
ccda402b9b | ||
|
|
9d2e465356 | ||
|
|
7236aec3fe | ||
|
|
75d2cc4dfe | ||
|
|
63a31593b4 | ||
|
|
5903ed606b | ||
|
|
aa05f2c2bb | ||
|
|
18bca83deb | ||
|
|
b47afe8bfb | ||
|
|
db800480bf | ||
|
|
4edc408893 | ||
|
|
9cf9893ed4 | ||
|
|
bc2e7a89cc | ||
|
|
fdae83e0a2 | ||
|
|
65db7a3b15 | ||
|
|
db659da876 | ||
|
|
82a8792153 | ||
|
|
0053a840b7 | ||
|
|
106bea2a40 | ||
|
|
33ef02cfc0 | ||
|
|
9cd6f9872a | ||
|
|
12d1ce4000 | ||
|
|
d4e7cb8d5f | ||
|
|
953dd70052 | ||
|
|
e17fee85e9 | ||
|
|
6a46f8b74c | ||
|
|
a1a25465da | ||
|
|
78b668687d | ||
|
|
c9a62b6b08 | ||
|
|
9da58082a7 | ||
|
|
f20addf39d | ||
|
|
c0e411dab2 | ||
|
|
0d6c792282 | ||
|
|
09c2af28c9 | ||
|
|
50abfd7e39 | ||
|
|
8e7e9039f9 | ||
|
|
d97cf675de | ||
|
|
4791d5f040 | ||
|
|
e565011a1c | ||
|
|
22b651917b | ||
|
|
d21318b753 | ||
|
|
01272308b4 | ||
|
|
f6ecaa7cb5 | ||
|
|
38531bc983 | ||
|
|
36ba566c95 | ||
|
|
b41f865c1d | ||
|
|
08b8a17d30 | ||
|
|
74d25aa2df | ||
|
|
33d2f59055 | ||
|
|
9f328f84a5 | ||
|
|
0d26818e81 | ||
|
|
7ceaa06800 | ||
|
|
bec1c46d21 | ||
|
|
c4ddfe4a2e | ||
|
|
2ac9f33be7 | ||
|
|
8c1a9763e6 | ||
|
|
7956074746 | ||
|
|
5a3a249af5 | ||
|
|
4cc21948bc | ||
|
|
f6435291f5 | ||
|
|
166bfe5abd | ||
|
|
c43283b3ec | ||
|
|
b68fcc71dd | ||
|
|
b91ad2aba0 | ||
|
|
f67e5bc023 | ||
|
|
6e6e3d2059 | ||
|
|
c35ddcfc1f | ||
|
|
443b67024a | ||
|
|
40810aa896 | ||
|
|
8a7bc97fea | ||
|
|
8945580ff5 | ||
|
|
d8b7dc4693 | ||
|
|
8fa14863f8 | ||
|
|
dec4d83b51 | ||
|
|
7e2bad5643 | ||
|
|
fe14a4b2a8 | ||
|
|
c6164ae2ab | ||
|
|
9e05028c05 | ||
|
|
c2bd5aa5ac | ||
|
|
c3c3782f27 | ||
|
|
25fb106c8a | ||
|
|
5c9fc2f61f | ||
|
|
63ca119e92 | ||
|
|
886621397e | ||
|
|
bccbec90e7 | ||
|
|
0f2d68e492 | ||
|
|
2d12da4903 | ||
|
|
b6d5516e84 | ||
|
|
6ba1a95767 | ||
|
|
75c468d897 | ||
|
|
d282d13d35 | ||
|
|
bbb986c48f | ||
|
|
d3d59d6922 | ||
|
|
1101384705 | ||
|
|
705e1944c9 | ||
|
|
83d6be39d6 | ||
|
|
3f8cc830f7 | ||
|
|
06ac451aa6 | ||
|
|
6a0837e908 | ||
|
|
10259b5fd2 | ||
|
|
ac3a4be7b0 | ||
|
|
2308f35e66 | ||
|
|
fd3e957f33 | ||
|
|
e9ae0a8e6d | ||
|
|
10d875ffbb | ||
|
|
48bfaaa50e | ||
|
|
6e8f62df24 | ||
|
|
8483e747ff | ||
|
|
76eb6cff48 | ||
|
|
8ea441fe4b | ||
|
|
47d2ff82a9 | ||
|
|
e21fa6477e | ||
|
|
4c65e244f5 | ||
|
|
99a91c4987 | ||
|
|
0d7a2c3c20 | ||
|
|
a3a60fca98 | ||
|
|
6322574a96 | ||
|
|
cd77c037de | ||
|
|
80439d1ec0 | ||
|
|
c12316f5b4 | ||
|
|
06b9f2b882 | ||
|
|
e7022d434d | ||
|
|
9f17ba102b | ||
|
|
f483edfeaa | ||
|
|
9d229e3f31 | ||
|
|
6773924a3a | ||
|
|
0e3cdaa15d | ||
|
|
8d0282f24e | ||
|
|
2310597ada | ||
|
|
725c447cef | ||
|
|
2987c4950e | ||
|
|
e4cdc3d167 | ||
|
|
430bbd2ccf | ||
|
|
92374ab879 | ||
|
|
07f6a8889b | ||
|
|
49de66fb85 | ||
|
|
2a03295c41 | ||
|
|
506ecfe3e2 | ||
|
|
fa3e1c139a | ||
|
|
e72886cfaf | ||
|
|
04ffc17466 | ||
|
|
1ec37bb983 | ||
|
|
adf82645e3 | ||
|
|
f18bd9fb0a | ||
|
|
f237a4cafa | ||
|
|
1b185bd7f9 | ||
|
|
ce1b43fb0c | ||
|
|
50d449e0e3 | ||
|
|
fca73867fa | ||
|
|
59de9a01a9 | ||
|
|
9bd2dda749 | ||
|
|
e9947c0a68 | ||
|
|
4c52a0dc41 | ||
|
|
4a9fcbc4af | ||
|
|
ae9105bd5b | ||
|
|
60ec6c87c2 | ||
|
|
4ecbb98b17 | ||
|
|
0de99d2436 | ||
|
|
32c1071265 | ||
|
|
822f433005 | ||
|
|
7ee5a68880 | ||
|
|
83e102a043 | ||
|
|
af2639ef42 | ||
|
|
a2c2ed0aef | ||
|
|
5463ae21f8 | ||
|
|
890119db3c | ||
|
|
a6ebdca958 | ||
|
|
8d445533e7 | ||
|
|
dc302afece | ||
|
|
eb946d468c | ||
|
|
5b8bfd26cd | ||
|
|
a4d76603c1 | ||
|
|
dae73fafae | ||
|
|
eaa4ceaa38 | ||
|
|
5f5737fcfe | ||
|
|
99ecb0b22b | ||
|
|
edf960805e | ||
|
|
f2c3e51ef4 | ||
|
|
7c67fc18c8 | ||
|
|
608dc61e24 | ||
|
|
8c5c4c9840 | ||
|
|
9e29236a0c | ||
|
|
0524e02ac4 | ||
|
|
011a8a83d6 | ||
|
|
86fceb962b | ||
|
|
708f6d36d6 | ||
|
|
366ad2a9ef | ||
|
|
681077bd81 | ||
|
|
8ac46112f0 | ||
|
|
f147e902a4 | ||
|
|
fa6709f8bb | ||
|
|
ef82f9ef71 | ||
|
|
e415afa5d0 | ||
|
|
cc970afc30 | ||
|
|
07ed3f976e | ||
|
|
ebaef4c6e3 | ||
|
|
3297906fd5 | ||
|
|
e84ab3c6bc | ||
|
|
995f144166 | ||
|
|
e3fa34e524 | ||
|
|
4327d0a0f1 | ||
|
|
f40a1c963d | ||
|
|
fd5dd15506 | ||
|
|
ad1b2423e1 | ||
|
|
17cfce2a12 | ||
|
|
2e62948309 | ||
|
|
bf313e7c43 | ||
|
|
681432ff4d | ||
|
|
7d4f01e9af | ||
|
|
ff080fe6ac | ||
|
|
f9662479b4 | ||
|
|
d7e5a445a9 | ||
|
|
65d2445237 | ||
|
|
bdbe5df54e | ||
|
|
f3437487e5 | ||
|
|
5707815f2a | ||
|
|
9022962734 | ||
|
|
6ee684029e | ||
|
|
5623155624 | ||
|
|
434c5c69e9 | ||
|
|
90bc8c9ef5 | ||
|
|
7675ec79e4 | ||
|
|
42db238cdb | ||
|
|
f92ff496b0 | ||
|
|
7b8bab4cd3 | ||
|
|
5b31f676f9 | ||
|
|
63cb45980c | ||
|
|
e2c530adfb | ||
|
|
9d87f0bbd3 | ||
|
|
9faec8c56a | ||
|
|
8eb216c1de | ||
|
|
0ac5e4e239 | ||
|
|
28af890329 | ||
|
|
33bc0cca26 | ||
|
|
03635f32af | ||
|
|
9d1de187e4 | ||
|
|
3c35c6c64d | ||
|
|
2c500ffb14 | ||
|
|
c1e9f783c3 | ||
|
|
f078b98c5d | ||
|
|
dba255d118 | ||
|
|
427c762eec | ||
|
|
3be07568a5 | ||
|
|
69b2293201 | ||
|
|
872bf11ac9 | ||
|
|
b1b3a8ab84 | ||
|
|
9112938369 | ||
|
|
87d95f1ce8 | ||
|
|
d79de72f1b | ||
|
|
2eff2f6888 | ||
|
|
f2579353ab | ||
|
|
0074e4c6cc | ||
|
|
a2ab4dbc06 | ||
|
|
2d1aab4a62 | ||
|
|
6a574bfa4f | ||
|
|
12b3bf0d01 | ||
|
|
e0152f84b5 | ||
|
|
474a00f9e8 | ||
|
|
e2d3a41dcb | ||
|
|
05d76a70d9 | ||
|
|
892aee68e4 | ||
|
|
ad05186769 | ||
|
|
0c8c1436ae | ||
|
|
25111deacb | ||
|
|
964483a031 | ||
|
|
b8982cddd0 | ||
|
|
4f0569e985 | ||
|
|
e4e3580535 | ||
|
|
f69c9722c6 | ||
|
|
6a7d38b083 | ||
|
|
ea123856f4 | ||
|
|
87f0c0838b | ||
|
|
695fbcdb07 | ||
|
|
5919a796a7 | ||
|
|
a5e5c500cf | ||
|
|
18f9be2c61 | ||
|
|
78cd69e34d | ||
|
|
f482801b94 | ||
|
|
754f02f9bb | ||
|
|
b4713fa3ff | ||
|
|
b18dd28caf | ||
|
|
ebedc88bfa | ||
|
|
5fc1da5209 | ||
|
|
fc748fcb19 | ||
|
|
ab26f089bf | ||
|
|
b6555a0022 | ||
|
|
c6026f1aa6 | ||
|
|
339c6620a2 | ||
|
|
a67d0d9da2 | ||
|
|
8a46395bcb | ||
|
|
10b320c6c0 | ||
|
|
ee2d8d31f4 | ||
|
|
a5a590cc4a | ||
|
|
fbfd1e6cb9 | ||
|
|
7c23f8c431 | ||
|
|
7a70d6a51e | ||
|
|
8ef4456323 | ||
|
|
cc5fa3c859 | ||
|
|
a36eff096b | ||
|
|
e1145f58aa | ||
|
|
26194e7e21 | ||
|
|
0c1877449d | ||
|
|
c766c8bc60 | ||
|
|
34238b12eb | ||
|
|
9ee7737c34 | ||
|
|
e9b9092e7d | ||
|
|
f0459f9a8d | ||
|
|
08f40d88df | ||
|
|
3e0ae01acf | ||
|
|
717ce95500 | ||
|
|
8fde665936 | ||
|
|
e8ae14d5e4 | ||
|
|
736ca494e6 | ||
|
|
9857dda5b5 | ||
|
|
b3ec557ab9 | ||
|
|
bae82e20fe | ||
|
|
e5860f90c5 | ||
|
|
78889a04b4 | ||
|
|
2227e2a32a | ||
|
|
66605777f2 | ||
|
|
cbb963b1ea | ||
|
|
15563adbb2 | ||
|
|
ff31cce0ab | ||
|
|
0bf6caa437 | ||
|
|
dc0b436e19 | ||
|
|
5bdfcd0769 | ||
|
|
bc5f7c2b0f | ||
|
|
42b09856fd | ||
|
|
d6fa3621e8 | ||
|
|
534fb67dc5 | ||
|
|
b923f51271 | ||
|
|
55e8cb4a55 | ||
|
|
506a2a1032 | ||
|
|
3a020341cb | ||
|
|
b015cecb2a | ||
|
|
a3a03f2851 | ||
|
|
4359d1ddef | ||
|
|
1c0bdfab69 | ||
|
|
cc7d024604 | ||
|
|
bd91cb1873 | ||
|
|
c7b94163ee | ||
|
|
65202c9460 | ||
|
|
88b6c7c477 | ||
|
|
1b832b82f7 | ||
|
|
cc102eab0f | ||
|
|
3eac8d164c | ||
|
|
8399114748 | ||
|
|
1b0d5c3670 | ||
|
|
180b7fddec | ||
|
|
2eedec1a39 | ||
|
|
78c11124e2 | ||
|
|
ea0938a699 | ||
|
|
79ddc8d44d | ||
|
|
c57de18593 | ||
|
|
24b4492abc | ||
|
|
d331fcbdef | ||
|
|
0cfb30459a | ||
|
|
909d15aa5d | ||
|
|
3a4819c5b8 | ||
|
|
5e8e5424dc | ||
|
|
5c565f8c3e | ||
|
|
2cb863a163 | ||
|
|
844aee7350 | ||
|
|
df22e1b205 | ||
|
|
e8945d4de3 | ||
|
|
054970f642 | ||
|
|
3f46921c6c | ||
|
|
64e8803ec4 | ||
|
|
1bf4065b6a | ||
|
|
c0410624b5 | ||
|
|
0a7eed3276 | ||
|
|
cfe9548b25 | ||
|
|
e9219e89f3 | ||
|
|
6afc56a7ca | ||
|
|
e861611611 | ||
|
|
74d357ed4b | ||
|
|
67300cfe47 | ||
|
|
ae76ba82e1 | ||
|
|
cd56294d44 | ||
|
|
b474445c52 | ||
|
|
58740a74c3 | ||
|
|
2dec8dacc9 | ||
|
|
c4cdaca038 | ||
|
|
6f00dd56c4 | ||
|
|
9aaa929800 | ||
|
|
84d206ced4 | ||
|
|
93de0030bb | ||
|
|
10bddd8a17 | ||
|
|
0f0eae6bd7 | ||
|
|
8f6e33bd79 | ||
|
|
05e2c5c52c | ||
|
|
49359cc221 | ||
|
|
dd641937eb | ||
|
|
d534aa41d5 | ||
|
|
519474da1c | ||
|
|
df195ee75c | ||
|
|
103a2fc2ae | ||
|
|
e363d48356 | ||
|
|
989ab9bf05 | ||
|
|
45cd12b77e | ||
|
|
ab84a43d33 | ||
|
|
5e65fcba13 | ||
|
|
625e696f68 | ||
|
|
7330928dca | ||
|
|
98a63cefa9 | ||
|
|
8c2c0f45b5 | ||
|
|
8a346da051 | ||
|
|
5ba63020d1 | ||
|
|
2aa43a8063 | ||
|
|
a22085d8db | ||
|
|
df1421b163 | ||
|
|
f871b5561e | ||
|
|
d6bccde06d | ||
|
|
989fa57047 | ||
|
|
48001b6115 | ||
|
|
180f901594 | ||
|
|
33da94a4bd | ||
|
|
198da97f0e | ||
|
|
c072052b38 | ||
|
|
c1f8cc0f7b | ||
|
|
db81a4a3e7 | ||
|
|
75c25c813d | ||
|
|
3b05013b62 | ||
|
|
4369b1f288 | ||
|
|
4700ea92db | ||
|
|
182dd322a5 | ||
|
|
1ba2d767a8 | ||
|
|
fc36eed4cd | ||
|
|
612e589016 | ||
|
|
1859eb0310 | ||
|
|
2ac67e04b6 | ||
|
|
f6467e8671 | ||
|
|
c304415b07 | ||
|
|
7a10702355 | ||
|
|
112a94c69d | ||
|
|
2ec05940f7 | ||
|
|
b3f8cce0ae | ||
|
|
7cbb9d081b | ||
|
|
8409a62a6a | ||
|
|
c4fae3c1dd | ||
|
|
a1be614279 | ||
|
|
ce3f7f2224 | ||
|
|
55eef6370e | ||
|
|
ee0fac37f9 | ||
|
|
2cf86f41fa | ||
|
|
74e79a6c59 | ||
|
|
c3bfc44ec3 | ||
|
|
24b79880d0 | ||
|
|
cea46daba9 | ||
|
|
afbc00d78c | ||
|
|
b5a085dd23 | ||
|
|
849ec56421 | ||
|
|
41318639f8 | ||
|
|
eb552ab7a2 | ||
|
|
f85205afb8 | ||
|
|
1a8cfb91e7 | ||
|
|
a457e797ee | ||
|
|
e418b04c3e | ||
|
|
abf2ee968a | ||
|
|
7f1b8c8aa6 | ||
|
|
f399c2e9fa | ||
|
|
a62d69c1c4 | ||
|
|
3dfeaabe2f | ||
|
|
5ff9dbb67e | ||
|
|
ae02d6aea0 | ||
|
|
50acf56ec8 | ||
|
|
eeab786848 | ||
|
|
6cb33ca334 | ||
|
|
c20036297f | ||
|
|
20ad992a7b | ||
|
|
eaaf213902 | ||
|
|
b3c044ab65 | ||
|
|
6cbcdb694d | ||
|
|
0834acc020 | ||
|
|
e50f5f0935 | ||
|
|
f86e871f07 | ||
|
|
ceb1826bed | ||
|
|
36dff411fd | ||
|
|
90e0a99486 | ||
|
|
c51fa1fcae | ||
|
|
9cdbc5b981 | ||
|
|
7542fa8032 | ||
|
|
b1bb684a04 | ||
|
|
ade954ab69 | ||
|
|
9f8adfee9b | ||
|
|
297c246570 | ||
|
|
13e6712721 | ||
|
|
dce4496393 | ||
|
|
db24d6e435 | ||
|
|
3bd2eb431a | ||
|
|
e247c99cd5 | ||
|
|
072f0f7562 | ||
|
|
392e729d57 | ||
|
|
f7748cc6db | ||
|
|
6d9172f635 | ||
|
|
c3e78ec8f5 | ||
|
|
5b9cf0f834 | ||
|
|
0381c72ca2 | ||
|
|
d156aba1f9 | ||
|
|
1388b8495c | ||
|
|
ef52d17303 | ||
|
|
9957fbfd33 | ||
|
|
ff2ebbb09f | ||
|
|
7d6b011362 | ||
|
|
e911e93aaf | ||
|
|
8b7c167592 | ||
|
|
868f332706 | ||
|
|
e654c5739e | ||
|
|
a6aff72d86 | ||
|
|
dc2f55570c | ||
|
|
22f21f752c | ||
|
|
78f65522b7 | ||
|
|
d14cf27acf | ||
|
|
94176776fb | ||
|
|
890f9262e0 | ||
|
|
f57e3bed00 | ||
|
|
08b112a20f | ||
|
|
83f3b80a8c | ||
|
|
ae7714aeff | ||
|
|
66c893e251 | ||
|
|
74c7d865d7 | ||
|
|
d4ebc44a98 | ||
|
|
8c08f55d8f | ||
|
|
8198da1aa4 | ||
|
|
92a3501c81 | ||
|
|
aac4a51f23 | ||
|
|
1b3e85f0fb | ||
|
|
c6eee95a55 | ||
|
|
4ce0e1f657 | ||
|
|
98463d6774 | ||
|
|
7d022f709b | ||
|
|
fd8a9195fb | ||
|
|
57f78d1a6b | ||
|
|
8ad2bdbb29 | ||
|
|
0fa5ef45e2 | ||
|
|
257f784318 | ||
|
|
e66d997557 | ||
|
|
7e85253f26 | ||
|
|
e84a1bc3ea | ||
|
|
f4daaa91a4 | ||
|
|
5c3f75d504 | ||
|
|
0901e77866 | ||
|
|
621175533b | ||
|
|
565400eec5 | ||
|
|
9d5e792b34 | ||
|
|
ee62847781 | ||
|
|
077fd2bf21 | ||
|
|
982b6c08d9 | ||
|
|
ad80432252 | ||
|
|
4a9825cd57 | ||
|
|
153b494e61 | ||
|
|
d9bed4563e | ||
|
|
2e2d2bebd7 | ||
|
|
77cc5d14a9 | ||
|
|
99dadbc17c | ||
|
|
663a532967 | ||
|
|
c615fd239b | ||
|
|
a8b29e44f3 | ||
|
|
6156c4c765 | ||
|
|
a94fa2917e | ||
|
|
1be2007b9e |
71
.github/workflows/commit.yml
vendored
71
.github/workflows/commit.yml
vendored
@@ -3,29 +3,72 @@ name: Commit Build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- '**'
|
||||
tags-ignore:
|
||||
- v*
|
||||
- '**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
buildLinux:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: rlespinasse/github-slug-action@1.1.0
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Get Commit Ref
|
||||
run: |
|
||||
COMMIT_REF=$(git rev-parse --short $GITHUB_SHA)
|
||||
echo "COMMIT_REF: $COMMIT_REF"
|
||||
echo "COMMIT_REF=$COMMIT_REF" >>$GITHUB_ENV
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
sudo apt-get install libncurses-dev
|
||||
make
|
||||
make clean
|
||||
export TZ='America/Los_Angeles'
|
||||
sudo apt-get install srecord
|
||||
make dist
|
||||
rm -rf .git*
|
||||
|
||||
|
||||
- name: List Output
|
||||
run: |
|
||||
cd Binary
|
||||
ls -l
|
||||
find -type f -exec md5sum '{}' \;
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v1
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
with:
|
||||
name: RomWBW-${{env.GITHUB_REF_SLUG}}-${{env.GITHUB_SHA_SHORT}}
|
||||
path: .
|
||||
name: RomWBW-${{env.COMMIT_REF}}-Linux
|
||||
path: .
|
||||
|
||||
buildMacOS:
|
||||
runs-on: macOS-latest
|
||||
|
||||
steps:
|
||||
- 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
|
||||
rm -rf .git*
|
||||
|
||||
- name: List Output
|
||||
run: |
|
||||
cd Binary
|
||||
ls -l
|
||||
find . -type f -exec md5 -r -- '{}' +;
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
with:
|
||||
name: RomWBW-${{env.COMMIT_REF}}-MacOS
|
||||
path: .
|
||||
|
||||
124
.github/workflows/release.yml
vendored
124
.github/workflows/release.yml
vendored
@@ -1,8 +1,9 @@
|
||||
name: Release Build
|
||||
|
||||
on:
|
||||
release:
|
||||
types: published
|
||||
push:
|
||||
tags:
|
||||
- '**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -10,42 +11,99 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Create Package Label
|
||||
run: |
|
||||
LABEL=`echo "$GITHUB_REF" | sed "s|^refs/tags/||"`
|
||||
echo "::set-env name=PKGLBL::$LABEL"
|
||||
|
||||
- name: Display Diagnostics
|
||||
run: |
|
||||
echo PKGLBL: "$PKGLBL"
|
||||
echo Upload URL: "${{github.event.release.upload_url}}"
|
||||
echo GITHUB_TOKEN: "${{secrets.GITHUB_TOKEN}}"
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
export TZ='America/Los_Angeles'
|
||||
sudo apt-get install libncurses-dev
|
||||
make
|
||||
make clean
|
||||
sudo apt-get install srecord
|
||||
make dist
|
||||
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 }}
|
||||
|
||||
26
.gitignore
vendored
26
.gitignore
vendored
@@ -20,6 +20,7 @@
|
||||
|
||||
Binary/**/*.mym
|
||||
Binary/**/*.pt3
|
||||
!Binary/cpnos-wbw.sys
|
||||
|
||||
Source/**/eeprom
|
||||
Source/Apps/Assign.com
|
||||
@@ -49,6 +50,9 @@ Source/Images/blankhd
|
||||
Source/Prop/Spin/ParPortProp.list
|
||||
Source/Prop/Spin/PropIO.list
|
||||
Source/Prop/Spin/PropIO2.list
|
||||
Source/Prop/ParPortProp.list
|
||||
Source/Prop/PropIO.list
|
||||
Source/Prop/PropIO2.list
|
||||
Source/ZPM3/bnkbios3.spr
|
||||
Source/ZPM3/gencpm.com
|
||||
Source/ZPM3/gencpm.com
|
||||
@@ -73,24 +77,34 @@ Tools/unix/zx/zx
|
||||
|
||||
!Source/ver.lib
|
||||
!Source/Apps/FAT/FAT.COM
|
||||
!Source/Apps/ZMP/zmpx.com
|
||||
!Source/Apps/ZMD/zmdsubs.rel
|
||||
!Source/Apps/Test/vdctest/font.asm
|
||||
!Source/BPBIOS/bpbuild.com
|
||||
!Source/BPBIOS/movp112.com
|
||||
!Source/BPBIOS/*.lib
|
||||
!Source/BPBIOS/Z34RCP11/cledinst.com
|
||||
!Source/BPBIOS/Z34RCP11/cledsave.com
|
||||
!Source/Fonts
|
||||
!Source/Images/**/*.[Cc][Oo][Mm]
|
||||
!Source/RomDsk/**/*.[Cc][Oo][Mm]
|
||||
!Source/Fonts/*
|
||||
!Source/Images/**
|
||||
!Source/RomDsk/**
|
||||
!Source/UBIOS/FSFAT.BIN
|
||||
!Source/UBIOS/UNA-BIOS.BIN
|
||||
!Source/ZCCP/*.[Cc][Oo][Mm]
|
||||
!Source/ZCPR-DJ/*.[Cc][Oo][Mm]
|
||||
!Source/ZPM3/*.[Cc][Oo][Mm]
|
||||
!Source/ZSDOS/*.[Cc][Oo][Mm]
|
||||
!Tools/cpm/bin
|
||||
!Tools/unix/zx
|
||||
!Tools/zx
|
||||
!Source/ZRC/*.bin
|
||||
!Source/ZZRC/*.bin
|
||||
!Source/ZZRC/*.hex
|
||||
!Tools/cpm/**
|
||||
!Tools/unix/zx/*
|
||||
!Tools/zx/*
|
||||
|
||||
Source/ZPM3/gencpm.com
|
||||
Source/ZPM3/startzpm.com
|
||||
Source/ZPM3/zccp.com
|
||||
Source/ZPM3/zpmldr.com
|
||||
Source/ZPM3/genbnk.dat
|
||||
|
||||
Source/ZSDOS/zsdos.err
|
||||
@@ -2,5 +2,11 @@
|
||||
setlocal
|
||||
|
||||
if exist *.com del *.com
|
||||
if exist *.ovr del *.ovr
|
||||
if exist *.doc del *.doc
|
||||
if exist *.hlp del *.hlp
|
||||
if exist Tunes\*.pt? del Tunes\*.pt?
|
||||
if exist Tunes\*.mym del Tunes\*.mym
|
||||
if exist Tunes\*.vgm del Tunes\*.vgm
|
||||
|
||||
pushd Test && call Clean || exit /b 1 & popd
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
TOOLS = ../../Tools
|
||||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.com Tunes/*)
|
||||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.com)
|
||||
SUBDIRS = Test
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
all::
|
||||
mkdir -p Tunes
|
||||
|
||||
clobber::
|
||||
rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.COM *.BIN Tunes/*.mym Tunes/*.pt?
|
||||
clean::
|
||||
@rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm
|
||||
|
||||
@@ -11,4 +11,11 @@ are specific to RomWBW. The source for these applications is found
|
||||
in the Source\Apps directory of the distribution.
|
||||
|
||||
The Tunes subdirectory contains some sample ProTracker and MYM sound
|
||||
files that can be played by the TUNE application.
|
||||
files that can be played by the TUNE application.
|
||||
|
||||
All of these files are already included in the pre-built boot disk
|
||||
images. They are also included on the ROM disk except for
|
||||
FAT.COM, TUNE.COM, and the sample tune files in the Tunes directory.
|
||||
|
||||
If you upgrade your ROM to a new version, you should also copy
|
||||
these files over to any hard disk images you are using.
|
||||
4
Binary/Apps/Test/Clean.cmd
Normal file
4
Binary/Apps/Test/Clean.cmd
Normal file
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.com del *.com
|
||||
7
Binary/Apps/Test/Makefile
Normal file
7
Binary/Apps/Test/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
TOOLS = ../../../Tools
|
||||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.com)
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
clean::
|
||||
@rm -f *.com
|
||||
16
Binary/Apps/Test/ReadMe.txt
Normal file
16
Binary/Apps/Test/ReadMe.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
***********************************************************************
|
||||
*** ***
|
||||
*** R o m W B W ***
|
||||
*** ***
|
||||
*** Z80/Z180 System Software ***
|
||||
*** ***
|
||||
***********************************************************************
|
||||
|
||||
This directory contains various hardware test application files that
|
||||
are specific to RomWBW. The source for these applications is found
|
||||
in the Source\Apps\Test directory of the distribution.
|
||||
|
||||
These files are included on the pre-built disk images in user area 2.
|
||||
|
||||
N.B., these files may be specific to certain hardware. They should
|
||||
be used as directred by the instructions for your specific hardware.
|
||||
@@ -7,4 +7,4 @@
|
||||
***********************************************************************
|
||||
|
||||
This directory contains some sample ProTracker and MYM sound
|
||||
files that can be played by the TUNE application.
|
||||
files that can be played by the TUNE or VGMPLAY application.
|
||||
11
Binary/CPM3/Clean.cmd
Normal file
11
Binary/CPM3/Clean.cmd
Normal file
@@ -0,0 +1,11 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.spr del *.spr
|
||||
if exist *.com del *.com
|
||||
if exist *.sys del *.sys
|
||||
if exist *.pat del *.pat
|
||||
if exist *.dat del *.dat
|
||||
if exist *.1st del *.1st
|
||||
if exist *.spr del *.spr
|
||||
if exist *.pat del *.pat
|
||||
7
Binary/CPM3/Makefile
Normal file
7
Binary/CPM3/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
TOOLS = ../../Tools
|
||||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr)
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
clean::
|
||||
@rm -f *.spr *.com *.sys *.dat cpm3fix.pat readme.1st
|
||||
17
Binary/CPM3/ReadMe.txt
Normal file
17
Binary/CPM3/ReadMe.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
***********************************************************************
|
||||
*** ***
|
||||
*** R o m W B W ***
|
||||
*** ***
|
||||
*** Z80/Z180 System Software ***
|
||||
*** ***
|
||||
***********************************************************************
|
||||
|
||||
This directory contains the CP/M 3 system files for the RomWBW CP/M 3
|
||||
adaptation. All of these files are already included on the CP/M 3
|
||||
boot disk images. However if you are creating a CP/M 3 boot disk
|
||||
manually, you should copy all of these files to the boot disk.
|
||||
|
||||
These files should also be copied to any CP/M 3 boot disks on your
|
||||
system when you upgrade your ROM firmware. Some of these files
|
||||
*must* match the version of the RomWBW firmware you are using for
|
||||
proper operation of your system.
|
||||
@@ -2,11 +2,15 @@
|
||||
setlocal
|
||||
|
||||
if exist *.bin del *.bin
|
||||
if exist *.dat del *.dat
|
||||
if exist *.com del *.com
|
||||
if exist *.img del *.img
|
||||
if exist *.rom del *.rom
|
||||
if exist *.hex del *.hex
|
||||
if exist *.upd del *.upd
|
||||
if exist *.pdf del *.pdf
|
||||
if exist *.log del *.log
|
||||
if exist *.eeprom del *.eeprom
|
||||
|
||||
setlocal & cd Apps && call Clean || exit /b 1 & endlocal
|
||||
pushd Apps && call Clean || exit /b 1 & popd
|
||||
pushd CPM3 && call Clean || exit /b 1 & popd
|
||||
pushd ZPM3 && call Clean || exit /b 1 & popd
|
||||
|
||||
@@ -1,167 +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.
|
||||
|
||||
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)
|
||||
@@ -1,8 +1,8 @@
|
||||
TOOLS = ../Tools
|
||||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.img *.rom *.com *.eeprom)
|
||||
SUBDIRS = Apps
|
||||
SUBDIRS = Apps CPM3 ZPM3
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
clobber::
|
||||
rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom
|
||||
clean::
|
||||
@rm -f *.bin *.com *.img *.rom *.upd *.hex *.pdf *.log *.eeprom *.dat
|
||||
|
||||
@@ -42,6 +42,15 @@ 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.
|
||||
|
||||
ROM Firmware Update Images (<plt>_<cfg>.upd)
|
||||
-------------------------------------
|
||||
|
||||
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 RomWBW User Guide for more information.
|
||||
|
||||
ROM Executable Images (<plt>_<cfg>.com)
|
||||
---------------------------------------
|
||||
|
||||
@@ -66,8 +75,8 @@ The VDU video board requires a dedicated onboard ROM containing the
|
||||
font data. The "vdu.rom" file contains the binary data to program
|
||||
onto that chip.
|
||||
|
||||
Disk Images (fd_*.img, hd_*.img)
|
||||
------------------------------
|
||||
Disk Images (fd_*.img, hd_*.img, psys.img)
|
||||
------------------------------------------
|
||||
|
||||
RomWBW includes a mechanism for generating floppy disk and hard disk
|
||||
binary images that are ready to copy directly to a floppy, hard disk,
|
||||
@@ -87,10 +96,18 @@ RawWriteWin (as long as you have access to a floppy drive on your
|
||||
Windows computer). The resulting floppy disks will be usable on any
|
||||
RomWBW-based system with floppy drive(s).
|
||||
|
||||
Likewise, the hd_*.img files are hard disk images. Each file is
|
||||
intended to be copied to the start of any type of hard disk media
|
||||
(typically a CF Card or SD Card). The resulting media will be usable
|
||||
on any RomWBW-based system that accepts the corresponding media type.
|
||||
Likewise, the hd512_*.img and hd1k_*.img files are hard disk images.
|
||||
Each file is intended to be copied to the start of any type of hard
|
||||
disk media (typically a CF Card or SD Card). The resulting media will
|
||||
be usable on any RomWBW-based system that accepts the corresponding
|
||||
media type.
|
||||
|
||||
NOTE: The hd512_*.img files are equivalent to the hd_*.img
|
||||
files in previous distributions. The hd1k_*.img files
|
||||
contained a revised file system format that increases the
|
||||
maximum number of CP/M directory entries from 512 to 1024.
|
||||
Refer to the ReadMe.txt in the Source/Images directory
|
||||
for details.
|
||||
|
||||
Documentation of the pre-built disk images is contained in the
|
||||
DiskList.txt file in this directory.
|
||||
@@ -100,6 +117,12 @@ the BuildImages.cmd script in the Source directory. Additional
|
||||
information on how to generate custom disk images is found in the
|
||||
Source\Images ReadMe.txt file.
|
||||
|
||||
The psys.img file contains a full implementation of the UCSD p-System
|
||||
for the Z80 running under RomWBW. This image file must be placed on
|
||||
disk media by itself (not appended or concatenated with hd*.img files.
|
||||
Refer to the Source/pSys/ReadMe.txt file for more information on the
|
||||
p-System implementation.
|
||||
|
||||
Propeller ROM Images (*.eeprom)
|
||||
-------------------------------
|
||||
|
||||
|
||||
@@ -1,218 +0,0 @@
|
||||
***********************************************************************
|
||||
*** ***
|
||||
*** R o m W B W ***
|
||||
*** ***
|
||||
*** Z80/Z180 System Software ***
|
||||
*** ***
|
||||
***********************************************************************
|
||||
|
||||
This directory ("Binary") is part of the RomWBW System Software
|
||||
distribution archive. Refer to the ReadMe.txt file in this
|
||||
directory for more information on the overall contents of the
|
||||
directory.
|
||||
|
||||
When distributed, RomWBW contains a set of pre-built ROM images that
|
||||
are ready to program onto the EEPROM of any of the Z80/Z180 based
|
||||
RetroBrew Computers CPU boards. Additionally, any custom built ROM
|
||||
images will be placed in this directory.
|
||||
|
||||
All of the pre-built ROM images are 512KB. This size is compatible
|
||||
with all of the Z80/Z180 systems. Some systems can accept different
|
||||
size ROM images. Creating alternative sizes requires a custom ROM
|
||||
build (see ReadMe.txt in the Source directory).
|
||||
|
||||
It is critical that the right ROM Imgae be selected for the target
|
||||
platform being used. The table below indicates the correct ROM
|
||||
image to use for each platform:
|
||||
|
||||
SBC V1/V2 SBC_std.rom
|
||||
SBC SimH SBC_simh.rom
|
||||
Zeta V1 ZETA_std.rom
|
||||
Zeta V2 ZETA2_std.rom
|
||||
N8 N8_std.rom
|
||||
Mark IV MK4_std.rom
|
||||
RC2014 w/ Z80 RCZ80_std.rom
|
||||
RC2014 w/ Z180 RCZ180_nat.rom (native Z180 memory addressing)
|
||||
RC2014 w/ Z180 RCZ180_ext.rom (external 512K RAM/ROM module)
|
||||
SC-series SC126, SC130
|
||||
Easy Z80 EZZ180_std.rom
|
||||
Dyno DYNO_std.rom
|
||||
|
||||
You will find there is one additional ROM image called
|
||||
"UNA_std.rom". This ROM image is an UNA-based RomWBW ROM image. As
|
||||
such, this ROM image can be used on any Z80/Z180 platform supported
|
||||
by John Coffman's UNA BIOS. Refer to RetroBrew Computers Wiki for
|
||||
more information on UNA hardware support.
|
||||
|
||||
For each of the ROM Images (".rom"), there are corresponding files
|
||||
with the extensions of ".com" and ".img". The .com variant can be
|
||||
copied to a functional RomWBW-based system and executed like a
|
||||
normal application under CP/M or Z-System. This will load the new
|
||||
ROM on-the-fly. It is an excellent way to test a ROM Image before
|
||||
actually burning it. Similarly, the .img files can be loaded using
|
||||
the UNA FAT loader for testing.
|
||||
|
||||
WARNING: In a few cases the .com file is too big to load. If you get
|
||||
a message like "Full" or "BAD LOAD" when trying to load one of the
|
||||
.com files, it is too big. In these cases, you will not be able to
|
||||
test the ROM prior to programming it.
|
||||
|
||||
All of the standard ROM Images are configured for:
|
||||
- 512KB ROM Disk
|
||||
- 512KB RAM Disk
|
||||
- 38.4Kbps baud serial console (*)
|
||||
- Auto-discovery of all serial ports
|
||||
|
||||
* RC2014 and Stephen Cousins' kits run at 115,200Kbps baud
|
||||
|
||||
All hard disk type devices (IDE, PPIDE, CF Card, SD Card) will be
|
||||
automatically assigned two drive letters per device. The drive
|
||||
letters will refer to the first 2 slices of the device. The ASSIGN
|
||||
command can be used to display and reassign drives to disk devices
|
||||
and slices as desired.
|
||||
|
||||
Standard ROM Image Notes
|
||||
------------------------
|
||||
|
||||
The standard ROM images will detect and install support for certain
|
||||
devices and peripherals that are on-board or frequently used with
|
||||
each platform as documented below. If the device or peripheral is
|
||||
not detected at boot, the ROM will simply bypass support
|
||||
appropriately.
|
||||
|
||||
SBC (SBC_std.rom):
|
||||
- CPU speed is detected at startup
|
||||
- Console on onboard UART serial port at 38400 baud
|
||||
- Includes support for PPIDE/CF Card(s) connected to on-board
|
||||
parallel port.
|
||||
- Includes support for CVDU and VGA3 boards. If detected at
|
||||
startup, support for video and keyboard is installed
|
||||
including VT-100/ANSI terminal emulation.
|
||||
- Auto-detects PropIO or PropIO V2 and installs associated
|
||||
video, keyboard and SD Card support if present.
|
||||
- If PropIO, PropIO V2, CVDU, or VGA hardware is detected,
|
||||
initial console output is determined by JP2. If JP2 is
|
||||
shorted, console will go to on-board serial port, if JP2
|
||||
is open, console will go to the detected video and keyboard
|
||||
ports.
|
||||
- SBC V1 has a known race condition in the bank switching
|
||||
circuit which is likely to cause system instability. SBC
|
||||
V2 does not have this issue.
|
||||
|
||||
SBC (SBC_simh.rom):
|
||||
- SBC variant customized to run under SimH
|
||||
- Implments two emulated SimH hard disk images
|
||||
- Uses SimH RTC
|
||||
|
||||
ZETA (ZETA_std.rom):
|
||||
- CPU speed is detected at startup
|
||||
- Console on onboard UART serial port at 38400 baud
|
||||
- Includes support for on-board floppy disk controller and
|
||||
two attached floppy disks.
|
||||
- Auto-detects ParPortProp and includes support for it if it
|
||||
is attached.
|
||||
- If ParPortProp is installed, initial console output is
|
||||
determined by JP1. If JP1 is shorted, console will go to
|
||||
on-board serial port, if JP1 is open, console will go to
|
||||
ParPortProp video and keyboard ports.
|
||||
|
||||
ZETA2 (ZETA2_std.rom):
|
||||
- CPU speed is detected at startup
|
||||
- Console on onboard UART serial port at 38400 baud
|
||||
- Includes support for on-board floppy disk controller and
|
||||
two attached floppy disks.
|
||||
- Auto-detects ParPortProp and includes support for it if it
|
||||
is attached.
|
||||
- Uses CTC to generate periodic timer interrupts.
|
||||
- If ParPortProp is installed, initial console output is
|
||||
determined by JP1. If JP1 is shorted, console will go to
|
||||
on-board serial port, if JP1 is open, console will go to
|
||||
ParPortProp video and keyboard ports.
|
||||
|
||||
N8 (N8_std.rom):
|
||||
- CPU speed is detected at startup
|
||||
- Console on Z180 onboard primary ASCI serial port at 38400 baud
|
||||
- Includes support for on-board floppy disk controller and
|
||||
two attached floppy disks.
|
||||
- Includes support for on-board TMS9918 video and keyboard
|
||||
including VT-100/ANSI terminal emulation.
|
||||
- Includes support for on-board SD Card as hard disk and
|
||||
assumes a production level N8 board (date code >= 2312).
|
||||
|
||||
MK4 (MK4_std.rom):
|
||||
- CPU speed is detected at startup
|
||||
- Console on Z180 onboard primary ASCI serial port at 38400 baud
|
||||
- Includes support for on-board IDE port (CF Card via adapter).
|
||||
- Includes support for on-board SD Card port.
|
||||
- Auto-detects PropIO or PropIO V2 and installs associated
|
||||
video, keyboard and SD Card support if present.
|
||||
- Includes support for CVDU and VGA3 boards. If detected at
|
||||
startup, support for video and keyboard is installed
|
||||
including VT-100/ANSI terminal emulation.
|
||||
|
||||
RCZ80 (RCZ80_std.rom):
|
||||
- Assumes CPU oscillator of 7.3728 MHz
|
||||
- Requires 512K RAM/ROM module
|
||||
- Auto detects Serial I/O Module (ACIA) and Dual Serial
|
||||
Module (SIO/2). Either one may be used.
|
||||
- Console on whichever serial module is installed,
|
||||
but will use the SIO/2 if both are installed. Baud
|
||||
rate is determined by hardware, but normally 115200.
|
||||
- Includes support for RC2014 Compact Flash Module
|
||||
- Support for RC2014 PPIDE Module may be enabled in config
|
||||
- Support for Scott Baker SIO board may be enabled in config
|
||||
- Support for Scott Baker floppy controllers (SMC & WDC) may
|
||||
be enabled in config
|
||||
|
||||
RCZ80 w/ KIO (RCZ80_kio.rom):
|
||||
- Assumes CPU oscillator of 7.3728 MHz
|
||||
- Requires 512K RAM/ROM module
|
||||
- Requires KIO module
|
||||
- Console on KIO primary serial port at 115200 baud
|
||||
- Includes support for RC2014 Compact Flash Module
|
||||
- Includes support for RC2014 PPIDE Module
|
||||
- Support for Scott Baker SIO board may be enabled in config
|
||||
- Support for Scott Baker floppy controllers (SMC & WDC) may
|
||||
be enabled in config
|
||||
|
||||
RCZ180 (RCZ180_nat.rom & RCZ180_ext.rom):
|
||||
- Assumes CPU oscillator of 18.432 MHz
|
||||
- Console on Z180 onboard primary ASCI serial port at 115200 baud
|
||||
- Includes support for RC2014 Compact Flash Module
|
||||
- Includes support for RC2014 PPIDE Module
|
||||
- Support for alternative serial modules may be enabled in config
|
||||
- Support for Scott Baker floppy controllers (SMC & WDC) may
|
||||
be enabled in config
|
||||
- You must pick the _nat or _ext variant depending on which
|
||||
memory module you are using:
|
||||
- RCZ180_nat.rom uses the built-in Z180 memory manager
|
||||
for use with memory modules allow direct physical
|
||||
addressing of memory, such as the SC119
|
||||
- RCZ180_ext.rom uses external bank management to access
|
||||
memory, such as the 512K RAM/ROM module.
|
||||
|
||||
SCZ180 (SCZ180_126.rom, SCZ180_130.rom, SCZ180_131.rom):
|
||||
- Assumes CPU oscillator of 18.432 MHz
|
||||
- Console on Z180 onboard primary ASCI serial port at 115200 baud
|
||||
- Includes support for RC2014 Compact Flash Module
|
||||
- Includes support for RC2014 PPIDE Module
|
||||
- Support for alternative serial modules may be enabled in config
|
||||
- Support for Scott Baker floppy controllers (SMC & WDC) may
|
||||
be enabled in config
|
||||
- The 3 different variants of SCZ180 are provided to match the
|
||||
3 corresponding systems (SC126, SC130, and SC131) designed by
|
||||
Stephen Cousins.
|
||||
|
||||
EZZ80 (EZZ80_std.rom):
|
||||
- Assumes CPU oscillator of 10.000 MHz
|
||||
- Console on primary SIO serial port at 115200 baud
|
||||
- Includes support for on-board SIO
|
||||
- Includes support for RC2014 Compact Flash Module
|
||||
- Includes support for RC2014 PPIDE Module
|
||||
|
||||
DYNO (DYNO_std.rom):
|
||||
- Assumes CPU oscillator of 18.432 MHz
|
||||
- Console on Z180 onboard serial ports at 38400 baud
|
||||
- Includes support for BQ4842 RTC
|
||||
- Includes support for onboard PPIDE
|
||||
- Support for Dyno floppy controllers may be enabled in config
|
||||
10
Binary/ZPM3/Clean.cmd
Normal file
10
Binary/ZPM3/Clean.cmd
Normal file
@@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.spr del *.spr
|
||||
if exist *.com del *.com
|
||||
if exist *.sys del *.sys
|
||||
if exist *.pat del *.pat
|
||||
if exist *.dat del *.dat
|
||||
if exist *.zpm del *.zpm
|
||||
if exist *.spr del *.spr
|
||||
7
Binary/ZPM3/Makefile
Normal file
7
Binary/ZPM3/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
TOOLS = ../../Tools
|
||||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr)
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
clean::
|
||||
@rm -f *.spr *.com *.sys *.dat *.zpm
|
||||
17
Binary/ZPM3/ReadMe.txt
Normal file
17
Binary/ZPM3/ReadMe.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
***********************************************************************
|
||||
*** ***
|
||||
*** R o m W B W ***
|
||||
*** ***
|
||||
*** Z80/Z180 System Software ***
|
||||
*** ***
|
||||
***********************************************************************
|
||||
|
||||
This directory contains the ZPM3 system files for the RomWBW ZPM3
|
||||
adaptation. All of these files are already included on the ZPM3
|
||||
boot disk images. However if you are creating a CP/M 3 boot disk
|
||||
manually, you should copy all of these files to the boot disk.
|
||||
|
||||
These files should also be copied to any ZPM3 boot disks on your
|
||||
system when you upgrade your ROM firmware. Some of these files
|
||||
*must* match the version of the RomWBW firmware you are using for
|
||||
proper operation of your system.
|
||||
BIN
Binary/cpnos-wbw.sys
Normal file
BIN
Binary/cpnos-wbw.sys
Normal file
Binary file not shown.
6
Build.cmd
Normal file
6
Build.cmd
Normal file
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
pushd Source && call Build %* || exit /b & popd
|
||||
|
||||
if "%*" == "" pause
|
||||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
wwarthen@gmail.com.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
5
Clean.cmd
Normal file
5
Clean.cmd
Normal file
@@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
pushd Binary && call Clean || exit /b 1 & popd
|
||||
pushd Source && call Clean || exit /b 1 & popd
|
||||
@@ -1,3 +1,125 @@
|
||||
Version 3.3
|
||||
-----------
|
||||
- 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
|
||||
|
||||
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
|
||||
- WBW: Preliminary hard disk partition support (backward compatible)
|
||||
- WBW: Change Propeller VGA signal timings to 60Hz refresh
|
||||
- WBW: Enhanced SYSTEM RESET function to allow a warm start back to boot loader
|
||||
- C?O: Add DUART driver
|
||||
- WBW: Early Z280 support (requires 512K RAM/ROM board)
|
||||
- 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 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
|
||||
- PMS: Added "updater.asm" which allows uploading and updating ROM in one step
|
||||
- WBW: Support for Z280 w/ native memory and interrupt mode 3
|
||||
- WBW: Support for Z280 UART (interrupt driven only in interrupt mode 3)
|
||||
- WBW: Add support Z80-512K (watchdog and LED)
|
||||
- WBW: Add support for ZZ80MB address map
|
||||
- PLS: Add support for Z180 invalid opcode trap
|
||||
- WBW: Add support for ZZRCC
|
||||
- WBW: Allow selection of RAM/ROM disk individually in build
|
||||
- WBW: Support 256KB ROM size
|
||||
- WBW: CP/M 3 RTC support is now complete (reads and writes RTC date/time)
|
||||
- WBW: Add config to allow swapping logical order of MT011 SPI ports
|
||||
- WBW: COPY.COM updated from v1.72 -> v1.73 throughout distribution
|
||||
- D?M: CP/NET for CP/M 2.2 and CP/M 3 (requires MT011)
|
||||
- D?M: SD driver fixes for MT011
|
||||
- J?C: Added FIND application from Jay Cotton
|
||||
- PMS: Preliminary support for I2C-based DS1307 clock
|
||||
- WBW: FD driver auto hardware detect (thanks Alan Cox)
|
||||
- D?N: Added support for TMS V9958 VDU
|
||||
- D?N: Added support for MSX keyboard
|
||||
- D?N: Added support for RP5C01 RTC
|
||||
- L?N: Slightly enhanced ZCPRD&J w/ a couple bug fixes
|
||||
- L?N: UNZIPZ4 which handles most modern ZIP file compression algorithms
|
||||
- AJL: Preliminary support for MBC systems
|
||||
- WBW: Added preliminary support for DSKYng
|
||||
- WBW: Elevated MBC to a platform
|
||||
- WBW: Added support for MBC user LEDs
|
||||
- PMS: Early DMA support
|
||||
- W?S: Updated FLASH software to v1.3.5 (supports 128KB A29010B, 512KB A29040B)
|
||||
- DDW: Support for DSKYng capabitlities
|
||||
- WBW: Added Phil Summers' ROM Updater into ROM Loader
|
||||
- AJL: Added ramtest app (requires SBC and MBC for now)
|
||||
- L?N: Provided SCOPY, XSUB01, and EX applications
|
||||
- WBW: Added support for MBC FDC to FDU application
|
||||
- WBW: Added support for MBC FDC to HBIOS
|
||||
- WBW: Refactored make process
|
||||
- WBW: Added ROM verification to boot process
|
||||
- WBW: Added Z80 instruction test apps to user area 5 in CP/M & ZSDOS
|
||||
- WBW: Add support for LINC sound card
|
||||
- WBW: Add interrupt receive support to UART driver
|
||||
- PMS: Add XModem transfer within Debug Monitor
|
||||
- PMS & AJL: Add DMAMON test application
|
||||
- PMS: Add ZMP adaptation
|
||||
- LWN: Substantial BPBIOS cleanup
|
||||
- AJL: Add ZMD adaptation
|
||||
- D?T: Substantial update to TastyBasic incuding a .COM executable
|
||||
- PMS: Added VGM audio file player
|
||||
- WBW: ZPMLDR and ZPM3 fixes, credit to Lars Nelson for finding ZPM3 source!
|
||||
- DDW: Add support for MBC sound card
|
||||
- WBW: Add support for "romless" booting
|
||||
- L?N: Fixes for ZCPR-D&J (buffer overflow, default drive/user)
|
||||
- J?P: Add support for DS1501 RTC
|
||||
- LLS: Added a user defined mode for SD Card interfaces (not complete)
|
||||
- L?N: Updated ZDE to v1.8 including time stamp preservation fixes
|
||||
- D?M: Minor update to CP/NET client files, fix to CPNBOOT
|
||||
- WBW: Added p-System IV.0 Z80 implementation
|
||||
- WBW: Hacked SURVEY to work around bank switching crash
|
||||
|
||||
Version 3.1
|
||||
-----------
|
||||
- WBW: Refactored ROM Loader
|
||||
- WBW: INTRTC periodic timer based clock
|
||||
- WBW: FDISK80 updated to allow reserving up to 256 slices
|
||||
- WBW: Added support dual 16C550 UART on 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
|
||||
- WBW: Updated IDE and PPIDE drivers to improve old CF Card compatibility
|
||||
- WBW: Support TIMER mode in CTC driver
|
||||
- DEN: Added sound driver support
|
||||
- DEN: Added SN76489 sound chip driver
|
||||
- M?O: RomWBW Disk Catalog document
|
||||
- DEN: Updated TMS to optionally trigger SYSTIMER interrupt (TMSTIMENABLE)
|
||||
- J?M: Updated KERMIT applications with VT100 terminal support
|
||||
- A?C: Added support for EPFDC
|
||||
- PMS: Added AY driver with new sound API support
|
||||
- DEN: Allow immediate autoboot startup
|
||||
- DEN: Support for floppy device count parameter
|
||||
|
||||
Version 3.0.1
|
||||
-------------
|
||||
- WBW: Increase XModem timeout waiting for host to start sending
|
||||
- WBW: Update TMS driver to dynamically increase Z180 I/O W/S inside driver
|
||||
- MJS: Update CLRDIR for CP/M 3 compatibility
|
||||
- WBW: Corrected cursor on/off esc sequence in pre-configured ZDE
|
||||
- WBW: Fix automatic CRT console switching under CP/M 3 and ZPM3
|
||||
- WBW: DSRTC driver now correctly returns an error if there is no RTC present
|
||||
|
||||
Version 3.0.0
|
||||
-------------
|
||||
- WBW: v2.9.2 -> 3.0 version upgrade due to scope of changes
|
||||
@@ -11,8 +133,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
|
||||
@@ -31,7 +153,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
|
||||
@@ -59,7 +181,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
|
||||
@@ -69,7 +191,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
|
||||
@@ -81,32 +203,32 @@ Version 2.9.1
|
||||
- PMS: Added Forth, Nascom BASIC, and Tasty BASIC to ROM
|
||||
- PMS: Refactored ROM Loader to support more ROM images, now table driven
|
||||
- WBW: Refactored DSKY code
|
||||
- SK: Initial support for Easy Z80
|
||||
- S?K: Initial support for Easy Z80
|
||||
- PMS: Enhance VDU driver to support alternative screen dimensions
|
||||
- WBW: DDT and DDTZ modified to use RST 30 instead of RST 38 to avoid conflicts with IM 1 interrupts
|
||||
- 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)
|
||||
@@ -259,7 +381,7 @@ Version 2.0
|
||||
- DWG: Entire new suite of Apps written in Aztec C
|
||||
- DWG: BANKER.COM - displays bank identification and version information
|
||||
- DWG: CPMNAME.COM - displays CBIOS header data and SYSCFG data, names and vaues
|
||||
- DWG: CHARS.COM - displays ascii map as reference
|
||||
- DWG: CHARS.COM - displays ascii map as reference
|
||||
- DWG: CLS.COM - clears screen
|
||||
- DWG: LABEL.COM - displays and changes drive labels for drives with reserved tracks
|
||||
- DWG: MAP.COM - like old map command, displays drives and logical unit labels and changes LU values
|
||||
@@ -291,7 +413,7 @@ Version 1.5.1
|
||||
- WBW: Added ZSDOS clock drivers (see Support\Clock)
|
||||
- WBW: Overhaul of ZSystem ROM Disk (see Doc\ZSystem.txt)
|
||||
- WBW: Update PropIO ANSI emulation for compatiblity with ASSIGN
|
||||
- DWG: Added version tags to all applications, and IDENT program to
|
||||
- DWG: Added version tags to all applications, and IDENT program to
|
||||
check version of utilities.
|
||||
- DWG: Added MULTIFMT program which prepares new media for use by
|
||||
initializing the metadata and clearing the directory sectors of
|
||||
@@ -301,8 +423,8 @@ Version 1.5.1
|
||||
- DWG: ANALYSE and HELLO programs removed from ROM due space concerns
|
||||
- DWG: Additional macro librarties added supporting program identification
|
||||
(IDENTITY.LIB/ASM) and access to drive metadata (METADATA.LIB/ASM),
|
||||
and realtime selection of logical units from within new application
|
||||
programs (LOGICALS.LIB/ASM).
|
||||
and realtime selection of logical units from within new application
|
||||
programs (LOGICALS.LIB/ASM).
|
||||
- DWG: Added TERM_VT52 for VDU compatbility, all apps now compliant
|
||||
- DGG: Contributed Linux build (see Doc\BuildLinux.txt)
|
||||
|
||||
@@ -330,7 +452,7 @@ Version 1.4
|
||||
- DWG: Add various .SUB files used for application maintenance
|
||||
- DWG: Enhanced utility building .SUB files to only contain libs utilitized
|
||||
- DWG: Add BUILD.SUB to build all applications and DEVFILES.LBR
|
||||
- DWG: Add/update RMAC macro libraries used in Apps -
|
||||
- DWG: Add/update RMAC macro libraries used in Apps -
|
||||
- DWG: BIOSHDR, STDLIB, STRCPY, STRLEN, CPMBIOS, CPMBDOS, TERMINAL, HARDWARE,
|
||||
- DWG: CPMAPPL, GLOBALS, ATOI, LUBIND, APPLVERS, MEMORY(memcpy,memset), PORTAB
|
||||
- DWG: Add/Repair BIOS support for Boot Drive login during CP/M Coldstart
|
||||
@@ -349,7 +471,7 @@ Version 1.4
|
||||
- DWG: Add LABEL utility to insert label into drive/slice metadata
|
||||
- DWG: Add 16 char label field to metadata
|
||||
- DWG: ASSIGN utility displays and manipulates DPH/DPB & logical unit parameters
|
||||
- DWG/WBW: Collaborated on design of Logical Unit DPH enhancemnt
|
||||
- DWG/WBW: Collaborated on design of Logical Unit DPH enhancemnt
|
||||
- WBW: Proposed MAP utility functionality
|
||||
- WBW: Implement slice selection API for DSK devices
|
||||
- WBW: Record boot drive in config memory at load time
|
||||
|
||||
@@ -1,186 +0,0 @@
|
||||
|
||||
FLASH4 (c) 2014 William R Sowerbutts <will@sowerbutts.com>
|
||||
http://sowerbutts.com/8bit/
|
||||
|
||||
= Warning =
|
||||
|
||||
FLASH4 has been tested and confirmed working on:
|
||||
* N8VEM SBCv2
|
||||
* N8VEM N8-2312
|
||||
* N8VEM Mark IV SBC
|
||||
* DX-Designs P112
|
||||
* ZETA SBC v2
|
||||
|
||||
However it remains somewhat experimental. If it works for you, please let me
|
||||
know. If it breaks please also let me know so I can fix it!
|
||||
|
||||
|
||||
= Introduction =
|
||||
|
||||
FLASH4 is a CP/M program which can read, write and verify Flash ROM contents to
|
||||
or from an image file stored on a CP/M filesystem. It is intended for in-system
|
||||
programming of Flash ROM chips on Z80 and Z180 systems.
|
||||
|
||||
FLASH4 aims to support a range of Flash ROM chips. Ideally I would like to
|
||||
support all Flash ROM chips that are in use in Z80/Z180 N8VEM machines. If
|
||||
FLASH4 does not support your chip please let me know and I will try to add
|
||||
support.
|
||||
|
||||
When writing to the Flash ROM chip, FLASH4 will only reprogram the sectors
|
||||
whose contents have changed. This helps to reduce wear on the flash memory,
|
||||
makes the reprogram operation faster, and reduces the risk of leaving the
|
||||
system unbootable if power fails during a reprogramming operation. FLASH4
|
||||
always performs a full verify operation after writing to the chip to confirm
|
||||
that the correct data has been loaded.
|
||||
|
||||
FLASH4 is reasonably fast. Reprogramming and verifying every sector on a 512KB
|
||||
SST 39F040 chip takes 21 seconds on my Mark IV SBC, versus 45 seconds to
|
||||
perform the same task using a USB MiniPro TL866 EEPROM programmer under Linux
|
||||
on my PC. If only a subset of sectors require reprogramming FLASH4 will be
|
||||
even faster.
|
||||
|
||||
FLASH4 works with binary ROM image files, it does not support Intel Hex format
|
||||
files. Hex files can be easily converted to or from binaries using "hex2bin" or
|
||||
the "srec_cat" program from SRecord:
|
||||
|
||||
$ srec_cat image.hex -intel -fill 0xFF 0 0x80000 -output image.bin -binary
|
||||
$ srec_cat image.bin -binary -output image.hex -intel
|
||||
|
||||
FLASH4 can use several different methods to access the Flash ROM chip. The best
|
||||
available method is determined automatically at run time. Alternatively you may
|
||||
provide a command-line option to force the use of a specific method.
|
||||
|
||||
The first two methods use bank switching to map sections of the ROM into the
|
||||
CPU address space. FLASH4 will detect the presence of RomWBW or UNA BIOS and
|
||||
use the bank switching methods they provide.
|
||||
|
||||
On P112 systems the P112 B/P BIOS is detected and P112 bank switching is used.
|
||||
|
||||
If no bank switching method can be auto-detected, and the system has a Z180
|
||||
CPU, FLASH4 will use the Z180 DMA engine to access the Flash ROM chip. This
|
||||
does not require any bank switching but it is slower and will not work on all
|
||||
platforms.
|
||||
|
||||
Z180 DMA access requires the flash ROM to be linearly mapped into the lower
|
||||
region of physical memory, as it is on the Mark IV SBC (for example). The
|
||||
N8-2312 has additional memory mapping hardware, consequently Z180 DMA access on
|
||||
the N8-2312 is NOT SUPPORTED and if forced will corrupt the contents of RAM;
|
||||
use one of the supported bank switching methods instead.
|
||||
|
||||
Z180 DMA access requires the Z180 CPU I/O base control register configured to
|
||||
locate the internal I/O addresses at 0x40 (ie ICR bits IOA7, IOA6 = 0, 1).
|
||||
|
||||
|
||||
= Usage =
|
||||
|
||||
The three basic operations are:
|
||||
|
||||
FLASH4 WRITE filename [options]
|
||||
|
||||
This will rewrite the flash ROM contents from the named file. The file size
|
||||
must exactly match the size of the ROM chip. After the write operation, a
|
||||
verify operation will be performed automatically.
|
||||
|
||||
FLASH4 VERIFY filename [options]
|
||||
|
||||
This will read out the flash ROM contents and report if it matches the contents
|
||||
of the named file. The file size must exactly match the size of the ROM chip.
|
||||
|
||||
FLASH4 READ filename [options]
|
||||
|
||||
This will read out the entire flash ROM contents and write it to the named
|
||||
file.
|
||||
|
||||
If your ROM chip is larger than the image you wish to write, use the "/PARTIAL"
|
||||
(or "/P") command line option. To avoid accidentally flashing the wrong file,
|
||||
the image file must be an exact multiple of 32KB in length. The portion of the
|
||||
ROM not occupied by the image file is left either unmodified or erased.
|
||||
|
||||
If you are using an ROM/EPROM/EEPROM chip which cannot be programmed in-system,
|
||||
FLASH4 will not be able to recognise it, however the software can still
|
||||
usefully READ and VERIFY the chip. Use the "/ROM" command line option to enable
|
||||
"READ" or "VERIFY" mode with unrecognised chips. This mode assumes a 512K ROM
|
||||
is fitted; smaller ROMs will be treated as a 512K ROM with the data repated
|
||||
multiple times -- with a 256K chip the data is repeated twice, four times for a
|
||||
128K chip, etc.
|
||||
|
||||
One of the following optional command line arguments may be specified at the
|
||||
end of the command line to force FLASH4 to use a particular method to access
|
||||
the flash ROM chip:
|
||||
|
||||
BIOS interfaces:
|
||||
/ROMWBW For ROMWBW BIOS version 2.6 and later
|
||||
/ROMWBWOLD For ROMWBW BIOS version 2.5 and earlier
|
||||
/UNABIOS For UNA BIOS
|
||||
|
||||
Direct hardware interfaces:
|
||||
/Z180DMA For Z180 DMA
|
||||
/P112 For DX-Designs P112
|
||||
/N8VEMSBC For N8VEM SBC (v1, v2), Zeta (v1) SBC
|
||||
|
||||
If no option is specified FLASH4 attempts to determine the best available
|
||||
method automatically.
|
||||
|
||||
|
||||
= Supported chips and features =
|
||||
|
||||
FLASH4 will interrogate your flash ROM chip to identify it automatically.
|
||||
FLASH4 assumes that you have a single flash ROM device and it is located at the
|
||||
bottom of the physical memory map.
|
||||
|
||||
FLASH4 does not support setting or resetting the protection bits on individual
|
||||
sectors within Flash ROM devices. If your Flash ROM chip has protected sectors
|
||||
you will need to unprotect them by other means before FLASH4 can erase and
|
||||
reprogram them.
|
||||
|
||||
AT29C series chips employ an optional "software data protection" feature. This
|
||||
is supported by FLASH4 and is left activated after programming the chip to
|
||||
prevent accidental reprogramming of sectors.
|
||||
|
||||
The following chips are supported:
|
||||
|
||||
AT29F010
|
||||
AT29F040
|
||||
M29F010
|
||||
M29F040
|
||||
MX29F040
|
||||
SST 39F010
|
||||
SST 39F020
|
||||
SST 39F040
|
||||
AT29C512
|
||||
AT29C040
|
||||
AT29C010
|
||||
AT29C020
|
||||
|
||||
The following chips are supported but have unequal sector sizes; FLASH4 will
|
||||
only erase and reprogram the entire chip at once rather than its normal
|
||||
sector-by-sector operation:
|
||||
|
||||
AT49F001NT
|
||||
AT49F001N
|
||||
AT49F002N
|
||||
AT49F002NT
|
||||
AT49F040
|
||||
|
||||
If you use a flash ROM chip that is not listed above please email me
|
||||
(will@sowerbutts.com) and I will try to add support for it.
|
||||
|
||||
|
||||
= Compiling =
|
||||
|
||||
The software is written in a mix of C and assembler. It builds using the SDCC
|
||||
toolchain and the SRecord tools. A Makefile is provided to build the executable
|
||||
in Linux and I imagine it can be easily modified to build in Windows.
|
||||
|
||||
You may need to adjust the path to the SDCC libraries in the Makefile if your
|
||||
sdcc installation is not in /usr/local
|
||||
|
||||
|
||||
= License =
|
||||
|
||||
FLASH4 is licensed under the The GNU General Public License version 3 (see
|
||||
included "LICENSE.txt" file).
|
||||
|
||||
FLASH4 is provided with NO WARRANTY. In no event will the author be liable for
|
||||
any damages. Use of this program is at your own risk. May cause rifts in space
|
||||
and time.
|
||||
BIN
Doc/Contrib/How to Make Disk Images in Linux with DD Command.pdf
Normal file
BIN
Doc/Contrib/How to Make Disk Images in Linux with DD Command.pdf
Normal file
Binary file not shown.
Binary file not shown.
39
Doc/Contrib/PPI_Bus.txt
Normal file
39
Doc/Contrib/PPI_Bus.txt
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
PPI Signal PPIDE PPISD DSKY DSKYNG (PROTO) DSKYNG (FINAL)
|
||||
---------- ----- ----- ----- ----- -----
|
||||
PA0 <>D0 >ID0 <>D0 <>D0
|
||||
PA1 <>D1 >ID1 <>D1 <>D1
|
||||
PA2 <>D2 >ID2 <>D2 <>D2
|
||||
PA3 <>D3 >ID3 <>D3 <>D3
|
||||
PA4 <>D4 >ID4 /SHUTDOWN <>D4 <>D4
|
||||
PA5 <>D5 >ID5 /DECODE <>D5 <>D5
|
||||
PA6 <>D6 >ID6 HEXA/CODEB <>D6 <>D6
|
||||
PA7 <>D7 >ID7 DAT_COMING <>D7 <>D7
|
||||
|
||||
PB0 <>D8 +<ROW5
|
||||
PB1 <>D9 +<ROW4
|
||||
PB2 <>D10 +<ROW3
|
||||
PB3 <>D11 +<ROW2
|
||||
PB4 <>D12 +<ROW1
|
||||
PB5 <>D13 +<ROW0
|
||||
PB6 <>D14 +
|
||||
PB7 <>D15 <MISO +
|
||||
|
||||
PC0 >DA0 >MOSI >COL0 >A0 >A0
|
||||
PC1 >DA1 >CLK >COL1 >/WR
|
||||
PC2 >DA2 >COL2 >/RD
|
||||
PC3 >CS0* >COL3 >CS&* >CS&*
|
||||
PC4 >CS1* >/CS >CS&* >CS&*
|
||||
PC5 >DIOW* >/WR
|
||||
PC6 >DIOR* >/WR >/RD
|
||||
PC7 >RESET* >MODE >RESET >RESET
|
||||
|
||||
* Inverted by adapter
|
||||
+ Pullup
|
||||
& Both signals must be asserted
|
||||
|
||||
Compatibility:
|
||||
|
||||
- PPISD & DSKY
|
||||
- PPIDE & DSKYNG
|
||||
- PPISD & DSKYNG
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
564
Doc/DDTZ.doc
564
Doc/DDTZ.doc
@@ -1,564 +0,0 @@
|
||||
|
||||
DDTZ v2.7
|
||||
by C.B. Falconer
|
||||
edited by George A. Havach
|
||||
|
||||
Introduction:
|
||||
============
|
||||
DDTZ v2.7 is a complete replacement for DDT, Digital Research's
|
||||
famous Dynamic Debugging Tool, with improved functionality, bug
|
||||
extermination, and full Z80 support. In general, DDTZ is fully
|
||||
compatible with the original utility, but it has extra and
|
||||
extended commands and many fewer quirks. All Z80-specific
|
||||
instructions can be (dis)assembled, though in Intel rather then
|
||||
Zilog format. Furthermore, DDTZ will correctly trace ('T' and 'U'
|
||||
commands) both 8080 and Z80 instructions, depending on which CPU
|
||||
is operating. On startup, the program announces which CPU it is
|
||||
running on.
|
||||
|
||||
DDTZ v2.7 now handles the 64180 added opcodes. It does NOT test
|
||||
for a 64180 CPU, since this cannot be done without executing
|
||||
illegal Z80 instructions, which in turn will crash some
|
||||
simulators. However v2.7 does not execute any 64180 instructions
|
||||
internally, only in the subject program.
|
||||
|
||||
This issue supplies the "M" version assembled, to avoid errors
|
||||
when switching between MSDOS and CPM systems. The command table
|
||||
is updated accordingly. Most CPM users are also MSDOS users, but
|
||||
not vice-versa.
|
||||
|
||||
The program is invoked by typing
|
||||
|
||||
ddtz<ret>
|
||||
or
|
||||
ddtz [d:]filespec<ret>
|
||||
|
||||
In the second form, DDTZ will load the specified file into
|
||||
memory starting at 0100H, unless it's a .HEX file that sets its
|
||||
own load address. Besides reporting the NEXT free address and
|
||||
the PC (program counter) after a successful load, DDTZ also shows
|
||||
the number of memory pages needed for a SAVE. Instead of having
|
||||
to write all this down, just use the 'X' command at any time to
|
||||
redisplay these three values for the current application.
|
||||
|
||||
NOTE: loading more code above the NEXT pointer revises these
|
||||
values.
|
||||
|
||||
As in DDT, when a program is loaded above the area holding the
|
||||
'A' and 'U' (and now 'W') command code, these commands are
|
||||
disabled, and the extra memory is released to the user. Thus,
|
||||
DDTZ can occupy as little as 3K total memory space. Unlike DDT,
|
||||
however, DDTZ will not overwrite itself or the system on program
|
||||
loads (except .HEX files).
|
||||
|
||||
At initialization, the stack pointer (SP) points to a return to
|
||||
DDTZ, just like for the CCP. Thus, programs that normally return
|
||||
to the CCP will be returned to DDTZ. The 'B' command
|
||||
reinitializes this condition.
|
||||
|
||||
|
||||
The intercept vector copies the BDOS version number, etc., so
|
||||
an object program does not know that DDTZ is running (except
|
||||
for BIOS-BDOS vector size). Thus, programs that check the version
|
||||
number should execute correctly under DDTZ.
|
||||
|
||||
All input parameters can now be entered in any of three formats:
|
||||
|
||||
(1) hexadecimal (as in DDT),
|
||||
(2) decimal, by adding a leading '#' character,
|
||||
(3) ASCII, by enclosing between either single or double
|
||||
quotes; either one or two characters are allowed.
|
||||
|
||||
Leading blanks in command lines and parameters are absorbed.
|
||||
Either a comma or a (single) space is a valid delimiter.
|
||||
Either uppercase or lowercase input is accepted.
|
||||
|
||||
The default command (for anything not otherwise recognizable)
|
||||
is 'H'. This allows convenient calculation, along with the other
|
||||
features described below. So, to convert a number, just enter
|
||||
it!
|
||||
|
||||
As in DDT, the prompt character is '-', and the only error
|
||||
message is the query ('?'), which generally kicks you back to
|
||||
command mode.
|
||||
|
||||
New Commands (Over DDT):
|
||||
=======================
|
||||
|
||||
NOTE: letters in parenthesis, e.g. "(U)", show the equivalent
|
||||
command for DDTZM version (compatible with MSDOS debug).
|
||||
|
||||
@ Sets or shows (with no parameter) the internally stored
|
||||
"base" value. Also used with the 'S' and 'D' commands as
|
||||
an optional parameter (though without the '@') to display
|
||||
memory from an arbitrary base marker (offset). When set to
|
||||
zero (the default), it does not affect any screen displays.
|
||||
|
||||
B B)egin: resets the USER stack pointer to its initial value,
|
||||
such that any program that exits by an RET will return to
|
||||
DDTZ. DDTZ provides a default stack space of
|
||||
approximately 24 bytes for user programs.
|
||||
|
||||
C C)ompare first_address,last_address,against_address: shows
|
||||
all the byte differences between two memory areas, in the
|
||||
format
|
||||
|
||||
XXXX aa YYYY bb
|
||||
|
||||
where XXXX and YYYY are the comparative memory addresses,
|
||||
and aa and bb are the corresponding byte values. Can be
|
||||
used to verify the identity of two files by first
|
||||
loading them into different memory areas with the 'R'
|
||||
command (see below).
|
||||
|
||||
|
||||
W Write: stores the modified memory area to disk under the
|
||||
(K) filename specified by the 'I' command, overwriting the
|
||||
original file from which it was loaded (the user is queried
|
||||
before doing so). By default, the image of memory from
|
||||
0100H through the "NEXT" value -1 is saved. "K first_addr,
|
||||
last_address" overrides this and allows writing ANY memory
|
||||
area to a file. Almost a necessity for CPM 3.0 (no SAVE!).
|
||||
K)eep on DDTZ
|
||||
|
||||
X eXamine: redisplays the "NEXT PC SAVE" report at any time.
|
||||
(Q) Q)uery size on DDTZ.
|
||||
|
||||
S S)earch first_address, last_addr, value: searches the
|
||||
(W) specified memory area for the value (a 16-bit word, not a
|
||||
byte) and shows the locations of all such. Very useful for
|
||||
finding CALL's or JMP's to a particular address, etc.
|
||||
W)here on DDTZ
|
||||
|
||||
Y Y)our_option parm1,parm2,address: executes an arbitrary
|
||||
routine at the specified address, with the BC and DE
|
||||
registers set to parm1 and parm2, respectively.
|
||||
|
||||
Z Displays (but does not alter) the Z80's alternate register
|
||||
set, including the index registers (disabled if running on
|
||||
an 8080). On Z80's, automatically included as the last
|
||||
part of the display by the 'X' command.
|
||||
|
||||
|
||||
Based (Offset) Displays:
|
||||
=======================
|
||||
|
||||
The 'D' and 'E' commands can use a stored base value (offset),
|
||||
as set by the '@' command. The current @ value may be
|
||||
overridden for a single execution of these commands by adding the
|
||||
base as an extra parameter in the command line. The effect is
|
||||
to add this value to the first/last address and display
|
||||
accordingly. The address listing on the left becomes XXXX:YYYY,
|
||||
where XXXX is the offset address and YYYY is the actual memory
|
||||
address being displayed. For example, if you have a data area
|
||||
located at 42B7H and wish to preserve easy access, just enter
|
||||
"@42b7". Now, "d0,3f" will dump memory starting at 4237H.
|
||||
|
||||
|
||||
Further Changes from DDT:
|
||||
========================
|
||||
|
||||
A A)ssemble now accepts the full Z80 as well as 8080
|
||||
instruction set, although it expects them in Intel rather
|
||||
than Zilog format (see notes below under the 'L'
|
||||
command). When in doubt, see the mnemnonic list below.
|
||||
|
||||
D D)isplay or D)ump will accept an optional third parameter
|
||||
to set the base value for a single execution only. Format
|
||||
has been cleaned up.
|
||||
|
||||
H H)ex_arithmetic on two values also shows their
|
||||
difference in decimal. With only one value, converts to
|
||||
hexadecimal, decimal, and ASCII (low-order byte only).
|
||||
|
||||
|
||||
N N)ame now allows drive specification (d:...) and sets up
|
||||
(I) the complete command line, including both FCB's (at
|
||||
addresses 005CH and 006CH). The tail (stored at 0081H up)
|
||||
is NOT upshifted.
|
||||
I)nput on DDTZ
|
||||
|
||||
U U)nassemble now displays the raw hexcode, especially handy
|
||||
(L) when examining non-code areas. Intel (8080 style) mnemonics
|
||||
are used, so some disassembled instructions may look
|
||||
strange. E.g., the Z80's 'IN B,(C)' and 'OUT (C),B' become
|
||||
'INP B' and 'OUTP B', respectively; 'LD (nnnn),BC' becomes
|
||||
'SBCD nnnn', 'ADD IX, BC' becomes 'DADX B', and 'JP (IX)'
|
||||
becomes 'PCIX'.
|
||||
L)ist on DDTZ
|
||||
|
||||
L L)oad now permits loading a file into memory with an
|
||||
(R) offset, which is added to the default load address of
|
||||
0100H. When reading in a .HEX file with a preset bias,
|
||||
the 'R' command will not transfer control to an invalid
|
||||
execution point. Another execution of the 'R' command will
|
||||
reread the input file, e.g.:
|
||||
|
||||
n blah<ret>
|
||||
l<ret>
|
||||
...modify the code and generally mess about...
|
||||
l<ret>
|
||||
|
||||
The original file is reloaded, and the modifications are
|
||||
removed.
|
||||
R)ead on DDTZ
|
||||
|
||||
E E)nter, like D)isplay, now accepts an optional second
|
||||
(S) parameter to set the base value for a single execution
|
||||
only.
|
||||
S)ubstitute or S)et on DDTZ
|
||||
|
||||
T T)rap/trace on termination now shows the complete CPU
|
||||
state. Traps and traces no longer lock up when a user RST
|
||||
7 instruction is executed. Tracing of BDOS/BIOS calls is
|
||||
heavily trun cated, avoiding clutter and preventing system
|
||||
crashes.
|
||||
|
||||
NOTE: Most of the UNDOCUMENTED Z80 op-codes are handled. Others
|
||||
can crash the system.
|
||||
|
||||
R R)egisters also shows what two-byte values the HL and SP
|
||||
(X) registers are actually pointing to. On Z80's, displays the
|
||||
alternate register set.
|
||||
eX)amine on DDTZ
|
||||
|
||||
NOTE: Any use of the 'W' or 'L' command resets the system DMA
|
||||
transfer address to the standard default value of 0080H.
|
||||
|
||||
|
||||
; This is the output of DDTZ when disassembling OPTYPE.TRY
|
||||
NOP LDA 06A4 MOV M,H
|
||||
LXI B,06A4 DCX SP MOV M,L
|
||||
STAX B INR A HLT
|
||||
INX B DCR A MOV M,A
|
||||
INR B MVI A,20 MOV A,B
|
||||
DCR B CMC MOV A,C
|
||||
MVI B,20 MOV B,B MOV A,D
|
||||
RLC MOV B,C MOV A,E
|
||||
EXAF MOV B,D MOV A,H
|
||||
DAD B MOV B,E MOV A,L
|
||||
LDAX B MOV B,H MOV A,M
|
||||
DCX B MOV B,L MOV A,A
|
||||
INR C MOV B,M ADD B
|
||||
DCR C MOV B,A ADD C
|
||||
MVI C,20 MOV C,B ADD D
|
||||
RRC MOV C,C ADD E
|
||||
DJNZ 0134 MOV C,D ADD H
|
||||
LXI D,06A4 MOV C,E ADD L
|
||||
STAX D MOV C,H ADD M
|
||||
INX D MOV C,L ADD A
|
||||
INR D MOV C,M ADC B
|
||||
DCR D MOV C,A ADC C
|
||||
MVI D,20 MOV D,B ADC D
|
||||
RAL MOV D,C ADC E
|
||||
JR 0134 MOV D,D ADC H
|
||||
DAD D MOV D,E ADC L
|
||||
LDAX D MOV D,H ADC M
|
||||
DCX D MOV D,L ADC A
|
||||
INR E MOV D,M SUB B
|
||||
DCR E MOV D,A SUB C
|
||||
MVI E,20 MOV E,B SUB D
|
||||
RAR MOV E,C SUB E
|
||||
JRNZ 0134 MOV E,D SUB H
|
||||
LXI H,06A4 MOV E,E SUB L
|
||||
SHLD 06A4 MOV E,H SUB M
|
||||
INX H MOV E,L SUB A
|
||||
INR H MOV E,M SBB B
|
||||
DCR H MOV E,A SBB C
|
||||
MVI H,20 MOV H,B SBB D
|
||||
DAA MOV H,C SBB E
|
||||
JRZ 0134 MOV H,D SBB H
|
||||
DAD H MOV H,E SBB L
|
||||
LHLD 06A4 MOV H,H SBB M
|
||||
DCX H MOV H,L SBB A
|
||||
INR L MOV H,M ANA B
|
||||
DCR L MOV H,A ANA C
|
||||
MVI L,20 MOV L,B ANA D
|
||||
CMA MOV L,C ANA E
|
||||
JRNC 0134 MOV L,D ANA H
|
||||
LXI SP,06A4 MOV L,E ANA L
|
||||
STA 06A4 MOV L,H ANA M
|
||||
INX SP MOV L,L ANA A
|
||||
INR M MOV L,M XRA B
|
||||
DCR M MOV L,A XRA C
|
||||
MVI M,20 MOV M,B XRA D
|
||||
STC MOV M,C XRA E
|
||||
JRC 0134 MOV M,D XRA H
|
||||
DAD SP MOV M,E XRA L
|
||||
|
||||
|
||||
XRA M JPE 06A4 SLAR M
|
||||
XRA A XCHG SLAR A
|
||||
ORA B CPE 06A4 SRAR B
|
||||
ORA C XRI 20 SRAR C
|
||||
ORA D RST 5 SRAR D
|
||||
ORA E RP SRAR E
|
||||
ORA H POP PSW SRAR H
|
||||
ORA L JP 06A4 SRAR L
|
||||
ORA M DI SRAR M
|
||||
ORA A CP 06A4 SRAR A
|
||||
CMP B PUSH PSW SLLR B
|
||||
CMP C ORI 20 SLLR C
|
||||
CMP D RST 6 SLLR D
|
||||
CMP E RM SLLR E
|
||||
CMP H SPHL SLLR H
|
||||
CMP L JM 06A4 SLLR L
|
||||
CMP M EI SLLR M
|
||||
CMP A CM 06A4 SLLR A
|
||||
RNZ CPI 20 SRLR B
|
||||
POP B RST 7 SRLR C
|
||||
JNZ 06A4 RLCR B SRLR D
|
||||
JMP 06A4 RLCR C SRLR E
|
||||
CNZ 06A4 RLCR D SRLR H
|
||||
PUSH B RLCR E SRLR L
|
||||
ADI 20 RLCR H SRLR M
|
||||
RST 0 RLCR L SRLR A
|
||||
RZ RLCR M BIT 0,B
|
||||
RET RLCR A BIT 0,C
|
||||
JZ 06A4 RRCR B BIT 0,D
|
||||
CZ 06A4 RRCR C BIT 0,E
|
||||
CALL 06A4 RRCR D BIT 0,H
|
||||
ACI 20 RRCR E BIT 0,L
|
||||
RST 1 RRCR H BIT 0,M
|
||||
RNC RRCR L BIT 0,A
|
||||
POP D RRCR M BIT 1,B
|
||||
JNC 06A4 RRCR A BIT 1,C
|
||||
OUT 20 RALR B BIT 1,D
|
||||
CNC 06A4 RALR C BIT 1,E
|
||||
PUSH D RALR D BIT 1,H
|
||||
SUI 20 RALR E BIT 1,L
|
||||
RST 2 RALR H BIT 1,M
|
||||
RC RALR L BIT 1,A
|
||||
EXX RALR M BIT 2,B
|
||||
JC 06A4 RALR A BIT 2,C
|
||||
IN 20 RARR B BIT 2,D
|
||||
CC 06A4 RARR C BIT 2,E
|
||||
SBI 20 RARR D BIT 2,H
|
||||
RST 3 RARR E BIT 2,L
|
||||
RPO RARR H BIT 2,M
|
||||
POP H RARR L BIT 2,A
|
||||
JPO 06A4 RARR M BIT 3,B
|
||||
XTHL RARR A BIT 3,C
|
||||
CPO 06A4 SLAR B BIT 3,D
|
||||
PUSH H SLAR C BIT 3,E
|
||||
ANI 20 SLAR D BIT 3,H
|
||||
RST 4 SLAR E BIT 3,L
|
||||
RPE SLAR H BIT 3,M
|
||||
PCHL SLAR L BIT 3,A
|
||||
|
||||
|
||||
BIT 4,B RES 3,D SET 2,H
|
||||
BIT 4,C RES 3,E SET 2,L
|
||||
BIT 4,D RES 3,H SET 2,M
|
||||
BIT 4,E RES 3,L SET 2,A
|
||||
BIT 4,H RES 3,M SET 3,B
|
||||
BIT 4,L RES 3,A SET 3,C
|
||||
BIT 4,M RES 4,B SET 3,D
|
||||
BIT 4,A RES 4,C SET 3,E
|
||||
BIT 5,B RES 4,D SET 3,H
|
||||
BIT 5,C RES 4,E SET 3,L
|
||||
BIT 5,D RES 4,H SET 3,M
|
||||
BIT 5,E RES 4,L SET 3,A
|
||||
BIT 5,H RES 4,M SET 4,B
|
||||
BIT 5,L RES 4,A SET 4,C
|
||||
BIT 5,M RES 5,B SET 4,D
|
||||
BIT 5,A RES 5,C SET 4,E
|
||||
BIT 6,B RES 5,D SET 4,H
|
||||
BIT 6,C RES 5,E SET 4,L
|
||||
BIT 6,D RES 5,H SET 4,M
|
||||
BIT 6,E RES 5,L SET 4,A
|
||||
BIT 6,H RES 5,M SET 5,B
|
||||
BIT 6,L RES 5,A SET 5,C
|
||||
BIT 6,M RES 6,B SET 5,D
|
||||
BIT 6,A RES 6,C SET 5,E
|
||||
BIT 7,B RES 6,D SET 5,H
|
||||
BIT 7,C RES 6,E SET 5,L
|
||||
BIT 7,D RES 6,H SET 5,M
|
||||
BIT 7,E RES 6,L SET 5,A
|
||||
BIT 7,H RES 6,M SET 6,B
|
||||
BIT 7,L RES 6,A SET 6,C
|
||||
BIT 7,M RES 7,B SET 6,D
|
||||
BIT 7,A RES 7,C SET 6,E
|
||||
RES 0,B RES 7,D SET 6,H
|
||||
RES 0,C RES 7,E SET 6,L
|
||||
RES 0,D RES 7,H SET 6,M
|
||||
RES 0,E RES 7,L SET 6,A
|
||||
RES 0,H RES 7,M SET 7,B
|
||||
RES 0,L RES 7,A SET 7,C
|
||||
RES 0,M SET 0,B SET 7,D
|
||||
RES 0,A SET 0,C SET 7,E
|
||||
RES 1,B SET 0,D SET 7,H
|
||||
RES 1,C SET 0,E SET 7,L
|
||||
RES 1,D SET 0,H SET 7,M
|
||||
RES 1,E SET 0,L SET 7,A
|
||||
RES 1,H SET 0,M DADX B
|
||||
RES 1,L SET 0,A DADX D
|
||||
RES 1,M SET 1,B LXI X,06A4
|
||||
RES 1,A SET 1,C SIXD 06A4
|
||||
RES 2,B SET 1,D INX X
|
||||
RES 2,C SET 1,E DADX X
|
||||
RES 2,D SET 1,H LIXD 06A4
|
||||
RES 2,E SET 1,L DCX X
|
||||
RES 2,H SET 1,M INR [X+05]
|
||||
RES 2,L SET 1,A DCR [X+05]
|
||||
RES 2,M SET 2,B MVI [X+05],20
|
||||
RES 2,A SET 2,C DADX SP
|
||||
RES 3,B SET 2,D MOV B,[X+05]
|
||||
RES 3,C SET 2,E MOV C,[X+05]
|
||||
|
||||
|
||||
MOV D,[X+05] DSBC B DADY B
|
||||
MOV E,[X+05] SBCD 06A4 DADY D
|
||||
MOV H,[X+05] NEG LXI Y,06A4
|
||||
MOV L,[X+05] RETN SIYD 06A4
|
||||
MOV [X+05],B IM0 INX Y
|
||||
MOV [X+05],C LDIA DADY Y
|
||||
MOV [X+05],D INP C LIYD 06A4
|
||||
MOV [X+05],E OUTP C DCX Y
|
||||
MOV [X+05],H DADC B INR [Y+05]
|
||||
MOV [X+05],L LBCD 06A4 DCR [Y+05]
|
||||
MOV [X+05],A RETI MVI [Y+05],2
|
||||
MOV A,[X+05] LDRA DADY SP
|
||||
ADD [X+05] INP D MOV B,[Y+05]
|
||||
ADC [X+05] OUTP D MOV C,[Y+05]
|
||||
SUB [X+05] DSBC D MOV D,[Y+05]
|
||||
SBB [X+05] SDED 06A4 MOV E,[Y+05]
|
||||
ANA [X+05] IM1 MOV H,[Y+05]
|
||||
XRA [X+05] LDAI MOV L,[Y+05]
|
||||
ORA [X+05] INP E MOV [Y+05],B
|
||||
CMP [X+05] OUTP E MOV [Y+05],C
|
||||
POP X DADC D MOV [Y+05],D
|
||||
XTIX LDED 06A4 MOV [Y+05],E
|
||||
PUSH X IM2 MOV [Y+05],H
|
||||
PCIX LDAR MOV [Y+05],L
|
||||
SPIX INP H MOV [Y+05],A
|
||||
RLCR [X+05] OUTP H MOV A,[Y+05]
|
||||
RRCR [X+05] DSBC H ADD [Y+05]
|
||||
RALR [X+05] shld 06A4 ADC [Y+05]
|
||||
RARR [X+05] RRD SUB [Y+05]
|
||||
SLAR [X+05] INP L SBB [Y+05]
|
||||
SRAR [X+05] OUTP L ANA [Y+05]
|
||||
SRLR [X+05] DADC H XRA [Y+05]
|
||||
BIT 0,[X+05] lhld 06A4 ORA [Y+05]
|
||||
BIT 1,[X+05] RLD CMP [Y+05]
|
||||
BIT 2,[X+05] INP M POP Y
|
||||
BIT 3,[X+05] OUTP M XTIY
|
||||
BIT 4,[X+05] DSBC SP PUSH Y
|
||||
BIT 5,[X+05] SSPD 06A4 PCIY
|
||||
BIT 6,[X+05] INP A SPIY
|
||||
BIT 7,[X+05] OUTP A RLCR [Y+05]
|
||||
RES 0,[X+05] DADC SP RRCR [Y+05]
|
||||
RES 1,[X+05] LSPD 06A4 RALR [Y+05]
|
||||
RES 2,[X+05] LDI RARR [Y+05]
|
||||
RES 3,[X+05] CCI SLAR [Y+05]
|
||||
RES 4,[X+05] INI SRAR [Y+05]
|
||||
RES 5,[X+05] OTI SRLR [Y+05]
|
||||
RES 6,[X+05] LDD BIT 0,[Y+05]
|
||||
RES 7,[X+05] CCD BIT 1,[Y+05]
|
||||
SET 0,[X+05] IND BIT 2,[Y+05]
|
||||
SET 1,[X+05] OTD BIT 3,[Y+05]
|
||||
SET 2,[X+05] LDIR BIT 4,[Y+05]
|
||||
SET 3,[X+05] CCIR BIT 5,[Y+05]
|
||||
SET 4,[X+05] INIR BIT 6,[Y+05]
|
||||
SET 5,[X+05] OTIR BIT 7,[Y+05]
|
||||
SET 6,[X+05] LDDR RES 0,[Y+05]
|
||||
SET 7,[X+05] CCDR RES 1,[Y+05]
|
||||
INP B INDR RES 2,[Y+05]
|
||||
OUTP B OTDR RES 3,[Y+05]
|
||||
|
||||
|
||||
RES 4,[Y+05] SET 0,[Y+05] SET 4,[Y+05]
|
||||
RES 5,[Y+05] SET 1,[Y+05] SET 5,[Y+05]
|
||||
RES 6,[Y+05] SET 2,[Y+05] SET 6,[Y+05]
|
||||
RES 7,[Y+05] SET 3,[Y+05] SET 7,[Y+05]
|
||||
|
||||
; These are the result of disassembling 64180OPS.TRY
|
||||
; These opcodes are available ONLY on the 64180 CPU
|
||||
; DDTZ will both assemble and disassemble these.
|
||||
IN0 B,20 TST E MLT B
|
||||
OUT0 20,B IN0 H,20 MLT D
|
||||
TST B OUT0 20,H TSTI 20
|
||||
IN0 C,20 TST H MLT H
|
||||
OUT0 20,C IN0 L,20 TSIO 20
|
||||
TST C OUT0 20,L SLP
|
||||
IN0 D,20 TST L MLT SP
|
||||
OUT0 20,D TST M OTIM
|
||||
TST D IN0 A,20 OTDM
|
||||
IN0 E,20 OUT0 20,A OIMR
|
||||
OUT0 20,E TST A ODMR
|
||||
|
||||
; The following are UNDOCUMENTED z80 opcodes from XTDOPS.TRY.
|
||||
; DDTZ will disassemble these, but will not assemble them.
|
||||
; They use xh/xl (or yh/yl) as separate byte registers.
|
||||
; Use these at your own risk.
|
||||
INRX H ACXR H MOVY H,B
|
||||
DCRX H ACXR L MOVY H,C
|
||||
MVIX H,20 SUXR H MOVY H,D
|
||||
INRX L SUXR L MOVY H,E
|
||||
DCRX L SBXR H MOVY H,A
|
||||
MVIX L,20 SBXR L MOVY L,B
|
||||
MOVX B,H NDXR H MOVY L,C
|
||||
MOVX B,L NDXR L MOVY L,D
|
||||
MOVX C,H XRXR H MOVY L,E
|
||||
MOVX C,L XRXR L MOVY L,A
|
||||
MOVX D,H ORXR H MOVY A,H
|
||||
MOVX D,L ORXR L MOVY A,L
|
||||
MOVX E,H CPXR H ADYR H
|
||||
MOVX E,L CPXR L ADYR L
|
||||
MOVX H,B INRY H ACYR H
|
||||
MOVX H,C DCRY H ACYR L
|
||||
MOVX H,D MVIY H,20 SUYR H
|
||||
MOVX H,E INRY L SUYR L
|
||||
MOVX H,A DCRY L SBYR H
|
||||
MOVX L,B MVIY L,20 SBYR L
|
||||
MOVX L,C MOVY B,H NDYR H
|
||||
MOVX L,D MOVY B,L NDYR L
|
||||
MOVX L,E MOVY C,H XRYR H
|
||||
MOVX L,A MOVY C,L XRYR L
|
||||
MOVX A,H MOVY D,H ORYR H
|
||||
MOVX A,L MOVY D,L ORYR L
|
||||
ADXR H MOVY E,H CPYR H
|
||||
ADXR L MOVY E,L CPYR L
|
||||
|
||||
|
||||
Command Summary:
|
||||
===============
|
||||
|
||||
DDTZM command DDTZ command
|
||||
============= ============
|
||||
@ (base)
|
||||
A)ssemble first_address A
|
||||
B)egin {i.e., initialize stack and return} B
|
||||
C)ompare first_address,last_address,against_address C
|
||||
D)ump first_address[,last_address[,base]] D
|
||||
E)nter_in_memory first_address[,base] S)ubstitute
|
||||
F)ill first_address,last_address,value F
|
||||
G)o_to [address][,trap1[,trap2]] G
|
||||
H)ex_arithmetic value1(,value2) H
|
||||
L)oad_file (offset) R)ead
|
||||
M)ove first_address,last_address,destination M
|
||||
N)nput FCBs_command_line I)nput
|
||||
Q)uit (not avail)
|
||||
R)egister examine/change [register|flag] X)amine
|
||||
S)earch first_address,last_address,word W)hereis
|
||||
T)race_execution [count] T
|
||||
Untrace_execution [count] (i.e. do count instr) U)ntrace
|
||||
U)nassemble_code first_address[,last_address] L)ist code
|
||||
W)rite [first_address,last_address] K)eep
|
||||
X)amine {i.e. display memory parameters for application} Q)uery
|
||||
Y)our_option BC:=parm1,DE:=parm2,call_address Y
|
||||
Z)80_register_display Z
|
||||
|
||||
|
||||
If you find this program useful, contributions will be gratefully
|
||||
accepted and will encourage further development and release of
|
||||
useful CPM programs. My practice is to include source.
|
||||
|
||||
C.B. Falconer
|
||||
680 Hartford Turnpike,
|
||||
Hamden, Conn. 06517 (203) 281-1438
|
||||
|
||||
DDTZ and its associated documentation and other files are
|
||||
copyright (c) 1980-1988 by C.B. Falconer. They may be freely
|
||||
copied and used for non-commercial purposes ONLY.
|
||||
ôÙ
|
||||
Binary file not shown.
BIN
Doc/Microsoft Basic-80 Reference Manual v5.0.pdf
Normal file
BIN
Doc/Microsoft Basic-80 Reference Manual v5.0.pdf
Normal file
Binary file not shown.
@@ -10,6 +10,26 @@ This directory ("Doc") is part of the RomWBW System Software
|
||||
distribution archive. It contains documentation for components of
|
||||
the system.
|
||||
|
||||
ChangeLog.txt
|
||||
-------------
|
||||
|
||||
Log of changes in RomWBW by version.
|
||||
|
||||
|
||||
RomWBW User Guide ("RomWBW User Guide.pdf")
|
||||
RomWBW System Guide ("RomWBW System Guide.pdf")
|
||||
RomWBW Applications ("RomWBW Applications.pdf")
|
||||
RomWBW ROM Applications ("RomWBW ROM Applications.pdf")
|
||||
RomWBW Disk Catalog ("RomWBW Disk Catalog.pdf")
|
||||
RomWBW Errata ("RomWBW Errata.pdf")
|
||||
-------------------------------------------------------
|
||||
|
||||
Documentation set for RomWBW. The primary document is the
|
||||
User Guide. The System Guide explains internal system operation
|
||||
and has a reference for the HBIOS API. Use of included tools
|
||||
and utilities are detailed in the Applications and
|
||||
ROM Applications documents.
|
||||
|
||||
|
||||
CPM Manual ("CPM Manual.pdf")
|
||||
-----------------------------
|
||||
@@ -43,12 +63,6 @@ The operational manual for John Coffman's hard disk partitioning
|
||||
program. This program is included in RomWBW as FDISK80.
|
||||
|
||||
|
||||
Floppy Disk Utility Documentation ("FDU.tst")
|
||||
---------------------------------------------
|
||||
|
||||
Operational documentation for the RomWBW FDU application.
|
||||
|
||||
|
||||
Hard Disk Anatomy ("Hard Disk Anatomy.pdf")
|
||||
-------------------------------------------
|
||||
|
||||
@@ -61,11 +75,47 @@ NZCOM User's Manual ("NZCOM Users Manual.pdf")
|
||||
NZCOM operating system operation manual.
|
||||
|
||||
|
||||
RomWBW Architecture ("RomWBW Architecture.pdf")
|
||||
-----------------------------------------------
|
||||
ZCPR Manual ("ZCPR Manual.pdf")
|
||||
-------------------------------
|
||||
|
||||
Document describing the architecture of the RomWBW HBIOS. It
|
||||
includes reference information for the HBIOS calls.
|
||||
ZCPR is the command proccessor portion of Z-System. This is the
|
||||
manual for ZCPR 1.x as included in RomWBW. The installation
|
||||
instructions can be ignored since that work has already been
|
||||
completed as part of the RomWBW distribution.
|
||||
|
||||
ZCPR D&J Manual ("ZCPR-DJ.doc")
|
||||
-------------------------------
|
||||
|
||||
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")
|
||||
@@ -77,19 +127,10 @@ clock rate. This document provides a list of the possible
|
||||
baud rates for typical CPU clock rates.
|
||||
|
||||
|
||||
ZCPR Manual ("ZCPR Manual.pdf")
|
||||
-------------------------------
|
||||
UCSD p-System Users Manual ("UCSD p-System Users Manual.pdf")
|
||||
-------------------------------------------------------------
|
||||
|
||||
ZCPR is the command proccessor portion of Z-System. This is the
|
||||
manual for ZCPR 1.x as included in RomWBW. The installation
|
||||
instructions can be ignored since that work has already been
|
||||
completed as part of the RomWBW distribution.
|
||||
Official user manual for p-System operating system included with
|
||||
RomWBW.
|
||||
|
||||
|
||||
ZSDOS Manual ("ZSDOS Manual.pdf")
|
||||
---------------------------------
|
||||
|
||||
ZSDOS is the DOS portion of Z-System. This is the manual fo ZSDOS
|
||||
1.x as included in RomWBW. The installation instructions can be
|
||||
ignored since that work has already been completed as part of the
|
||||
RomWBW distribution.
|
||||
--WBW 5:18 PM 3/16/2023
|
||||
Binary file not shown.
Binary file not shown.
BIN
Doc/RomWBW Disk Catalog.pdf
Normal file
BIN
Doc/RomWBW Disk Catalog.pdf
Normal file
Binary file not shown.
BIN
Doc/RomWBW Errata.pdf
Normal file
BIN
Doc/RomWBW Errata.pdf
Normal file
Binary file not shown.
Binary file not shown.
BIN
Doc/RomWBW ROM Applications.pdf
Normal file
BIN
Doc/RomWBW ROM Applications.pdf
Normal file
Binary file not shown.
BIN
Doc/RomWBW System Guide.pdf
Normal file
BIN
Doc/RomWBW System Guide.pdf
Normal file
Binary file not shown.
BIN
Doc/RomWBW User Guide.pdf
Normal file
BIN
Doc/RomWBW User Guide.pdf
Normal file
Binary file not shown.
BIN
Doc/SIO+CTC Baud Rate Options.pdf
Normal file
BIN
Doc/SIO+CTC Baud Rate Options.pdf
Normal file
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)
|
||||
|
||||
BIN
Doc/UCSD p-System Users Manual.pdf
Normal file
BIN
Doc/UCSD p-System Users Manual.pdf
Normal file
Binary file not shown.
Binary file not shown.
765
Doc/ZCPR-DJ.doc
Normal file
765
Doc/ZCPR-DJ.doc
Normal file
@@ -0,0 +1,765 @@
|
||||
A Personal Note
|
||||
===============
|
||||
|
||||
Somehow, I've managed to get by for the last 14 years using just ZCPR.
|
||||
But like some of you, I have fiddled with the standard ZCPR and
|
||||
modified it to suit my tastes. As I added new commands or enriched old
|
||||
ones, I've always remained compatible with existing programs, all the
|
||||
BDOS replacements, and, most important of all, stayed within the 800H
|
||||
space allocation of the original Digital Research CCP. Here are the
|
||||
fruits of my labors, I hope you enjoy this CCP replacement as much as I
|
||||
do.
|
||||
|
||||
Don Kirkpatrick
|
||||
17595 S.W. Pheasant Lane
|
||||
Beaverton, Oregon 97006
|
||||
<Donald.C.Kirkpatrick@tek.com>
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
This console replacement is designed to run under CP/M 2.2 or any of
|
||||
the 2.2 BDOS replacements. It requires a Z80 or better. If you are
|
||||
running DRI's CCP or older versions of ZCPR1, this program is a
|
||||
significant improvement. If you are running ZCPR3, CP/M 3.0, CP/M
|
||||
Plus, or MP/M, this will probably be a disappointment.
|
||||
|
||||
If you are familiar with ZCPR3, you will recognize many of the
|
||||
enhancements here: comments on a command line, search path for the .com
|
||||
file, drive/user change with simple du:, CLEVEL3 command processing,
|
||||
proper SUBMIT file facility, and so on. Nothing has been removed from
|
||||
DRI's CCP, only new features added. AND IT ALL STILL FITS IN THE
|
||||
ORIGINAL 800H, THE SAME SPACE AS THE DIGITAL RESEARCH FIVE COMMAND
|
||||
CCP.
|
||||
|
||||
Many of the standard commands have been enhanced. For example, TYPE
|
||||
and LIST now have options to turn on or off page breaks. Moreover, the
|
||||
console check for abort has been improved.
|
||||
|
||||
Two commands have been added for use in submit files - SAK and BELL.
|
||||
These commands allow you to pause or ring the bell during submit file
|
||||
execution.
|
||||
|
||||
Before you install this version of ZCPR onto your boot disks, try it by
|
||||
running it as a .com file. Just edit the few customizing options and
|
||||
assemble the source. After you decide it really is better, load it
|
||||
onto your boot track and make it your standard. Complete instructions
|
||||
are located at the end of this document.
|
||||
|
||||
The complete built-in command list is:
|
||||
|
||||
DIR - directory command enhanced to list optionally all user areas
|
||||
REN - standard rename command
|
||||
USER- move to new user number area on same drive
|
||||
SAVE- save specified number of TPA pages or records in a file
|
||||
TYPE- display a file on the console with optional page break pauses
|
||||
LIST- print command plus optional form feed insertion
|
||||
PAGE- send form feed to list device
|
||||
ERA - standard file erase command
|
||||
ERAQ- file erase with confirmation query at each file
|
||||
DFU - set default user number for .com search path
|
||||
BELL- send a bell character to the console
|
||||
SAK - pause until a key is struck on the console (Strike Any Key)
|
||||
SCL - toggle multiple commands per line (Single Command on a Line)
|
||||
GET - load a file into the TPA at any specified location
|
||||
JUMP- process command tail and execute program at specified address
|
||||
GO - process command tail and execute program loaded at 100H
|
||||
PEEK- display hexadecimal byte string starting with specified address
|
||||
POKE- load hexadecimal byte string starting with specified address
|
||||
BOOT- execute BIOS cold boot routine
|
||||
|
||||
|
||||
Filename Processing
|
||||
===================
|
||||
|
||||
The standard ZCPR3 du: drive/user file specification has been
|
||||
implemented. Any filename can be in the du:fn.ft form. For example:
|
||||
|
||||
A>era c4:junk*.*
|
||||
|
||||
erases files on the C drive, user area 4 without leaving drive A user
|
||||
0. When a user number is found in a filename, that user number is
|
||||
placed in S1 of the default FCB. Bit 7 of S1 is set to inform the
|
||||
program using the FCB a user number was found.
|
||||
|
||||
The * in an ambiguous file name has been improved. Now a trailing *
|
||||
causes the remainder of the ambiguous name to be filled with '?', not
|
||||
just the fn field. For example:
|
||||
|
||||
A>era c4:junk*
|
||||
|
||||
is the same as the example above. Previously, junk* was defined as
|
||||
'junk????. '. If you need the ft field blank, type 'junk*.'. The
|
||||
question mark still works as a single character wild card.
|
||||
|
||||
|
||||
Command Line Processing
|
||||
=======================
|
||||
|
||||
The current user number is included as part of the command prompt for
|
||||
all non-zero user numbers. The prompt is of the form du>, for example
|
||||
A2> or B10>. If the SUPRES equate is true, the user number is
|
||||
suppressed for user 0 only.
|
||||
|
||||
Multiple commands are typed on a single line separated by a command
|
||||
separator character. Occasionally, you need to type the separator
|
||||
character in a command tail. The SCL command toggles the multiple
|
||||
command enable. The CMDCHR equate determines the command separator
|
||||
character. A ';' has been chosen as the separator character in this
|
||||
distribution version.
|
||||
|
||||
Comments are allowed on a command line. When the comment separator
|
||||
character is encountered as the first character of a command, the
|
||||
remainder of the line is ignored. The COMCHR equate determines the
|
||||
comment separator character. A ';' has been chosen as the separator
|
||||
character in this distribution version. Here is an example containing
|
||||
comments and multiple commands on a single line:
|
||||
|
||||
A>get 100 junk;peek 100;;this is a comment.
|
||||
A>;this is also a comment.
|
||||
|
||||
There exists a built-in search path for transient commands. First, the
|
||||
current drive/user is searched. Next, the current drive/default user
|
||||
is searched. Last, drive A/default user is searched. The DEFUSR
|
||||
equate determines the default user number, currently set to user 0 in
|
||||
this distribution version. The default user is temporarily changed
|
||||
with the DFU command. If a drive is specified in the transient
|
||||
command, the current and default user areas on the specified drive are
|
||||
searched. If a user number is specified, that user area on the current
|
||||
and default drive are searched. If both the drive and user number are
|
||||
specified, no search is performed. The same drive/user area is never
|
||||
searched twice.
|
||||
|
||||
Transient commands are always "called." If a program terminates via a
|
||||
return rather than a warm boot, subsequent multiple commands on the
|
||||
command line are executed. Any program exiting by a warm boot reloads
|
||||
ZCPR and the subsequent commands lost.
|
||||
|
||||
A default command can be placed in the command buffer and control
|
||||
passed to ZCPR for processing. The only thing required, besides
|
||||
placing the command in the buffer and jumping to CPRLOC, is to
|
||||
initialize the command character counter at the start of the buffer.
|
||||
The procedure is compatible with the original DRI CCP default command
|
||||
processing. If ZCPR is entered at CPRLOC+3 jump, default command
|
||||
processing is suppressed. Either way, register C must contain a valid
|
||||
drive/user, just like the original CCP.
|
||||
|
||||
|
||||
Submit File Processing
|
||||
======================
|
||||
|
||||
A basic design choice had to be made in the design of ZCPR concerning
|
||||
the execution of submit files. The original CCP had a problem. It
|
||||
ALWAYS looked for the $$$.SUB file on drive A and the submit program
|
||||
would place it on the current default drive. When the you were logged
|
||||
onto drive B and you issued a submit command, the $$$.SUB was placed on
|
||||
drive B and not executed.
|
||||
|
||||
After much debate it was decided to have ZCPR perform the same type of
|
||||
function as CCP (look for the $$$.SUB file on drive A), but the problem
|
||||
with SUBMIT.COM still exists. Hence, RGF designed SuperSUB and RLC
|
||||
took his SuperSUB and designed SUB from it; both programs are set up to
|
||||
allow the selection at assembly time of creating the $$$.SUB on the
|
||||
default drive or on drive A. If you don't have one of these newer
|
||||
submit programs, a procedure for patching the standard SUBMIT.COM has
|
||||
been included at the end.
|
||||
|
||||
The fixed drive choice permits a submit file to contain a series of
|
||||
commands exactly as they would be entered from a CP/M console. This
|
||||
permits things like:
|
||||
|
||||
A>dir
|
||||
A>b:
|
||||
B>dir
|
||||
|
||||
to be executed, even though the currently default drive is changed
|
||||
during execution. If the $$$.SUB file were present on the default
|
||||
drive, the above series of commands would not work. ZCPR would be
|
||||
looking for $$$.SUB on the default drive, and switching default drives
|
||||
without moving the $$$.SUB file would cause processing to abort. Note
|
||||
that the same problem occurs if the user number of the $$$.SUB file is
|
||||
not predefined. ZCPR assumes that the $$$.SUB file is located on user 0
|
||||
of drive A.
|
||||
|
||||
The trick of using the $ flag returned by the BDOS disk reset is used
|
||||
to speed the search for a $*.* file on drive A. This trick will not
|
||||
work if the $$$.SUB file were located on another drive.
|
||||
|
||||
The '>' prompt character is replaced by a special character while a
|
||||
submit file is in execution. The SPRMPT equate defines this special
|
||||
character, currently set to '$' in this distribution version.
|
||||
|
||||
|
||||
Command Syntax
|
||||
==============
|
||||
|
||||
Multiple commands can be placed on one line. If the comment character
|
||||
is encountered where a command should start, the rest of the line is
|
||||
ignored. Any command can be renamed by editing the command table.
|
||||
Command names can be up to eight characters long and are terminated by
|
||||
bit 7 high. If there is a conflict between an internal ZCPR command
|
||||
and a transient program of the same name, the internal command is
|
||||
executed. Type the command with the du: included if the external
|
||||
transient command is the one desired. Here is a complete alphabetized
|
||||
list of all the resident commands with their syntax:
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: BELL
|
||||
|
||||
Function: To ring terminal bell.
|
||||
|
||||
Forms: BELL
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: This command is designed to be placed in a submit file to
|
||||
ring the bell to indicate significant checkpoints.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: BOOT
|
||||
|
||||
Function: To execute BIOS cold boot routine.
|
||||
|
||||
Forms: BOOT
|
||||
|
||||
Options: REBOOT equate controls the inclusion/exclusion of this command.
|
||||
|
||||
Uses: Reboots the system without pushing the reset button. The
|
||||
cold boot entry point in the BIOS must be supported for this
|
||||
command to work.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: DFU
|
||||
|
||||
Function: To set the Default User Number for transient commands.
|
||||
|
||||
Forms: DFU <usrnum>
|
||||
|
||||
Options: DEFUSR equate defines the default user choice until this
|
||||
command is entered.
|
||||
|
||||
NUMBASE equate defines the character that specifies a
|
||||
hexadecimal number. The distribution version is set to 'H'.
|
||||
|
||||
Uses: The default user area is searched after a transient command
|
||||
cannot be found in the current user area. If the transient
|
||||
command still has not been found, the default user on the
|
||||
default drive is searched last. The new default user number
|
||||
is in decimal, but hexadecimal numbers are entered by
|
||||
appending an 'H'. The next warm boot will restore the
|
||||
original default user number.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: DIR
|
||||
|
||||
Function: To display a directory listing of the files on a drive.
|
||||
|
||||
Forms: DIR <afn> Display the DIR files
|
||||
DIR <afn> S Display the SYS files
|
||||
DIR <afn> B Display both DIR and SYS files
|
||||
DIR <afn> A Display both DIR and SYS files for all user areas
|
||||
|
||||
Options: TWOCOL equate controls the number of columns in the display.
|
||||
Forty-column terminals are limited to two-column displays.
|
||||
|
||||
WIDE equate controls the spacing between the columns and
|
||||
change the horizontal width of a directory display.
|
||||
|
||||
FENCE equate specifies the character separator between the
|
||||
directory columns.
|
||||
|
||||
USRDLM equate specifies the character between the user number
|
||||
and the filename.
|
||||
|
||||
USRFLG, SYSFLG, and SOFLG equates specify the command line
|
||||
tail character that control the display of system and
|
||||
non-system files.
|
||||
|
||||
Uses: Displays a directory listing of files in specific drive/user
|
||||
area.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: ERA
|
||||
|
||||
Function: To erase files.
|
||||
|
||||
Forms: ERA <afn>
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Deletes files. Names of erased files are displayed.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: ERAQ
|
||||
|
||||
Function: To erase files with individual query.
|
||||
|
||||
Forms: ERAQ <afn>
|
||||
<afn>? y File erased
|
||||
<afn>? <CR> File not erased
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Deletes a subset of a set of ambiguously specified files.
|
||||
Any answer other than 'Y' (either case) will cause the file
|
||||
to be skipped and not erased.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: GET
|
||||
|
||||
Function: To load the specified file from disk to the specified address.
|
||||
|
||||
Forms: GET <hexadr> <ufn>
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Loads a file into the TPA for patching purposes. This command
|
||||
searches for the specified file along the same search path as
|
||||
the transient command loader.
|
||||
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: GO
|
||||
|
||||
Function: To call the program in the TPA without loading from disk.
|
||||
|
||||
Forms: GO <command tail>
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Most useful to rerun a program already loaded into the TPA.
|
||||
Saves time and wear on disk drives. The command tail is
|
||||
entered exactly as it would appear if GO were replaced by the
|
||||
program name. Same as JUMP 100H, but more convenient,
|
||||
especially when used with parameters for programs like STAT.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: JUMP
|
||||
|
||||
Function: To call the program at a specified address.
|
||||
|
||||
Forms: JUMP <hexadr> <command tail>
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Executes code not located at 100H. For example, JUMP 0
|
||||
warm boots. The code must already reside at the specified
|
||||
address.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: LIST
|
||||
|
||||
Function: To print specified file on list device.
|
||||
-
|
||||
Forms: LIST <ufn> Print file
|
||||
LIST <ufn> P Print file without default paging
|
||||
|
||||
Options: NLINEP equate determines the number of lines per page.
|
||||
|
||||
FFKILL equate controls the suppression of form feeds before
|
||||
printable text.
|
||||
|
||||
PGDFLG equate determines the command line tail character that
|
||||
toggles the default form feed insertion every NLINEP lines.
|
||||
|
||||
NOSTAT equate controls the use of the BIOS list status call.
|
||||
|
||||
Uses: Prints files with/without pagination on LST: device. A
|
||||
listing is aborted by a console ^C. Any submit file in
|
||||
process is terminated and control is returned gracefully to
|
||||
the console prompt.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: PAGE
|
||||
|
||||
Function: To eject a page on list device via a form feed.
|
||||
|
||||
Forms: PAGE
|
||||
|
||||
Options: NOSTAT equate controls the use of the BIOS list status call.
|
||||
|
||||
Uses: Sends a form feed to the LST: device. The page eject can
|
||||
be aborted by a console ^C if the system hangs because the
|
||||
printer is not ready. If aborted, any submit file in process
|
||||
is terminated and control is returned gracefully to the
|
||||
console prompt.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: PEEK
|
||||
|
||||
Function: To display hex values beginning at a specified address.
|
||||
|
||||
Forms: PEEK <hexadr> [<hexcnt>]
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Displays hexadecimal values anywhere in the entire address
|
||||
space. The maximum value for <hexcnt> is 0FFH, but the
|
||||
default <hexcnt> is 256.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: POKE
|
||||
|
||||
Function: To poke a string of hex values into a set of consecutive
|
||||
addresses.
|
||||
|
||||
Forms: POKE <hexadr> <hexval> [...<hexval>]
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Modifies values anywhere in the entire address space. Each
|
||||
<hexval> represents one byte and is separated from the next
|
||||
by a space. The number of <hexval> are limited only by the
|
||||
size of the command line buffer. The address is incremented
|
||||
for each <hexval>. Excellent for hand patching code.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: REN
|
||||
|
||||
Function: To change the name of an existing file.
|
||||
|
||||
Forms: REN <newufn>=<oldufn>
|
||||
REN <newufn>=<oldufn> Existing <newufn>
|
||||
Delete? y File deleted
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Changes the names of files. Any du: on <oldufn> is ignored;
|
||||
the optional du: is on <newufn>. If there already exists a
|
||||
<newufn>, the console is queried for conformation. Any
|
||||
response except 'Y' (either case) aborts the command, kills
|
||||
any submit file in process, and returns gracefully to the
|
||||
command prompt.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: SAK
|
||||
|
||||
Function: To pause until a key is struck.
|
||||
|
||||
Forms: SAK
|
||||
? <any key>
|
||||
|
||||
Options: None.
|
||||
|
||||
Uses: Pauses a submit file until a keystroke is entered. Any
|
||||
character other than a ^C will resume execution. A ^C kills
|
||||
the submit file, any commands remaining on the command the
|
||||
line are ignored, and control returns gracefully to the
|
||||
prompt.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: SAVE
|
||||
|
||||
Function: To save the contents of TPA onto disk as a file.
|
||||
|
||||
Forms: SAVE <Number of Pages> <ufn>
|
||||
SAVE <Number of Records> <ufn> R
|
||||
|
||||
Options: RECFLG equate determines the command tail character that
|
||||
specifies records rather than pages.
|
||||
|
||||
NUMBASE equate defines the character that specifies a
|
||||
hexadecimal number. The distribution version is set to 'H'.
|
||||
|
||||
Uses: Saves the TPA to a file. Records are 128 bytes long, pages
|
||||
are 256 bytes long. Number of pages or records is in
|
||||
decimal, but a hexadecimal number is entered by appending an
|
||||
'H'. Saved area begins at 100H.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: SCL
|
||||
|
||||
Function: To force ZCPR to parse only a single command per line.
|
||||
|
||||
Forms: SCL
|
||||
|
||||
Options: MULTPL equate determines the inclusion/exclusion of this
|
||||
command and whether or not multiple commands are allowed.
|
||||
|
||||
CMDCHR equate determines the character separating multiple
|
||||
commands.
|
||||
|
||||
Uses: Some transient commands require the command separator in the
|
||||
command tail. This command turns off multiple command
|
||||
parsing so the entire command tail is sent to the transient
|
||||
program. Multiple command format is reset at the next warm
|
||||
boot. SCL toggles.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: TYPE
|
||||
|
||||
Function: To display specified file on console.
|
||||
|
||||
Forms: TYPE <ufn> Display file
|
||||
TYPE <ufn> P Display file without default paging
|
||||
|
||||
Options: NLINES equate determines the number of lines per screen.
|
||||
|
||||
FFKILL equate controls the suppression of form feeds before
|
||||
printable text.
|
||||
|
||||
PGDFLG equate determines the command line tail character that
|
||||
toggles the default form feed insertion every NLINEP lines.
|
||||
|
||||
Uses: Displays files with/without pagination on CON: device. A
|
||||
display is aborted by a console ^C. If aborted, any submit
|
||||
file in process terminates and control returns gracefully to
|
||||
the console prompt. When page breaks are enabled, any
|
||||
console character except ^C will display the next page of
|
||||
text.
|
||||
|
||||
=============================================================================
|
||||
|
||||
Command: USER
|
||||
|
||||
Function: To change current user number.
|
||||
|
||||
Forms: USER <usrnum>
|
||||
|
||||
Options: SUPRES equate controls the display of the user number in the
|
||||
prompt when the user number is zero.
|
||||
|
||||
MAXUSR equate controls the maximum allowable user number.
|
||||
|
||||
NUMBASE equate defines the character that specifies a
|
||||
hexadecimal number. The distribution version is set to 'H'.
|
||||
|
||||
Uses: This command changes the current user number. The new user
|
||||
number is in decimal, but a hexadecimal number is entered by
|
||||
appending an 'H'. This command has been retained for
|
||||
compatibility purposes only. It is far easier to change
|
||||
disk/user by typing du:.
|
||||
|
||||
=============================================================================
|
||||
|
||||
|
||||
Error Messages
|
||||
==============
|
||||
|
||||
If any error is encountered as a command line is being parsed, a
|
||||
message will be printed and, for serious errors, the remainder of the
|
||||
line is ignored. Below is a complete list of all ZCPR error messages.
|
||||
Any error message encountered that is not on this list came from some
|
||||
program other than ZCPR.
|
||||
|
||||
"?"
|
||||
|
||||
An error was detected in the command. The an item on the command
|
||||
line was not what was expected. The command line is echoed up to
|
||||
the position where the error was detected, as close as can be
|
||||
determined, and the "?" printed. Any commands remaining on the
|
||||
command the line are ignored and any $$$.SUB file erased.
|
||||
|
||||
"Full"
|
||||
|
||||
If ZCPR was attempting to load a transient program, one of two
|
||||
things has gone wrong: either the program is so large that it won't
|
||||
fit into the TPA or a read error was returned from the BDOS. If
|
||||
ZCPR was attempting to save a file, the BDOS write call returned
|
||||
failure. Either the disk or the directory is full. Any commands
|
||||
remaining on the command line are ignored and any $$$.SUB file
|
||||
erased.
|
||||
|
||||
"No File"
|
||||
|
||||
No file could be found matching the filename specified in the
|
||||
command. This message is also be printed if the BDOS read command
|
||||
returns failure. If ZCPR was looking for a transient command, any
|
||||
commands remaining on the command line are ignored and any $$$.SUB
|
||||
file erased.
|
||||
|
||||
"Name Error"
|
||||
|
||||
The specified filename has a user number larger than the allowable
|
||||
maximum or an ambiguous filename was entered where only an
|
||||
unambiguous filename is permitted. Any commands remaining on the
|
||||
command line are ignored and any $$$.SUB file erased.
|
||||
|
||||
"Delete?"
|
||||
|
||||
Not really an error, but there already exists a file with the same
|
||||
name as the requested new name in the REN command. Any response
|
||||
except 'Y' (either case) aborts the command, any commands remaining
|
||||
on the command line are ignored, and any $$$.SUB file erased.
|
||||
|
||||
"All?"
|
||||
|
||||
Not really an error, but a check to verify that all files on the
|
||||
drive/user area are to be erased. Any response except 'Y' (either
|
||||
case) aborts the command and any commands remaining on the command
|
||||
line are ignored.
|
||||
|
||||
|
||||
Installation Instructions
|
||||
=========================
|
||||
|
||||
1) The first task is to determine the location of your BDOS because you
|
||||
MUST set the P2DOS equate to this value. If you do not know the
|
||||
location of your BDOS, use ZCPRDEMO to find it. If you do not
|
||||
already have ZCPRDEMO.COM, assemble ZCPR with the TEST equate true
|
||||
to make it. A bootstrap loader will be included and you can run the
|
||||
.com file. This program assembles without errors using Microsoft's
|
||||
M80/L80:
|
||||
|
||||
A>m80 =zcpr
|
||||
A>l80 zcpr,zcprdemo/n/e
|
||||
|
||||
Other assemblers can be used, but ZCPR.MAC will probably require
|
||||
editing to convert it to a form compatible. The major decision in
|
||||
converting is to determine how the .PHASE pseudo is to be handled.
|
||||
Probably the best solution to the .PHASE is to generate a .hex
|
||||
file and load it with an offset using DDT/SID/ZSID. Consult the
|
||||
"r" command in the DDT/SID/ZSID manaul.
|
||||
|
||||
Run ZCPRDEMO and peek at low memory:
|
||||
|
||||
A>zcprdemo
|
||||
A<peek 0 10
|
||||
0000 C3 03 F2 00 00 C3 06 E4 00 00 00 00 00 00 00 00
|
||||
A<^C
|
||||
|
||||
Notice the prompt character has changed from a '>' to a '<'. This
|
||||
tells you the special debug version of ZCPR is running. See the
|
||||
debug section at the end for details. Address 0 contains a jump 3
|
||||
beyond the start of the BIOS and address 5 contains a jump 6 beyond
|
||||
the start of the BDOS.
|
||||
|
||||
Be careful if you attempt to execute a transient program from
|
||||
ZCPRDEMO. Some transient programs, like NSWP, return rather than
|
||||
warm boot when done. These programs don't know that ZCPRDEMO is at
|
||||
address 8000H rather than just under the BDOS. If they overwrite
|
||||
ZCPRDEMO, then the return is to random code. Of course, this is not
|
||||
a problem when ZCPR is installed just under the BDOS.
|
||||
|
||||
2) You MUST edit the code to place your BDOS/P2DOS/Z80DOS/ZRDOS start
|
||||
address in the P2DOS equate. Set COMLD true (and TEST false if you
|
||||
set it true in step 1 above) and make ZCPR.COM. A bootstrap loader
|
||||
will be included.
|
||||
|
||||
Assuming you successfully assemble it, just type "zcpr" to run it.
|
||||
However, every time there is a warm boot, it will be replaced by
|
||||
the boot track CCP. If you like what you see, place a copy on the
|
||||
boot track to make it available all the time.
|
||||
|
||||
3) Reassemble, this time with COMLD false to make ZCPRNBLD.COM (ZCPR
|
||||
No Boot LoaDer).
|
||||
|
||||
4) Run SYSGEN to load a copy of the boot track into memory.
|
||||
|
||||
B>; Sample terminal session for integrating ZCPR
|
||||
B>sysgen
|
||||
SYSGEN VER 2.2
|
||||
SOURCE DRIVE NAME (OR RETURN TO SKIP)a
|
||||
SOURCE ON A, THEN TYPE RETURN <cr>
|
||||
FUNCTION COMPLETE
|
||||
DESTINATION DRIVE NAME (OR RETURN TO REBOOT) <cr>
|
||||
|
||||
|
||||
5) Run SAVE to save a track image to a file (eg: SAVE 32 BOOTFILE).
|
||||
The number on the save command depends on the size of your boot
|
||||
track loader; it can be as small as 31 and as large as 44. If you
|
||||
have extra disk space or are not sure, play it safe and use 44.
|
||||
|
||||
B>save 44 cpm56.com <-- We now have a SYSGEN image of CP/M
|
||||
|
||||
6) Find the location of the stock CCP by peeking at the boot file. It
|
||||
is normally located at address 980H in the file. Using ZCPR:
|
||||
|
||||
B>zcpr <-- Reload zcpr.com version
|
||||
B>get 100 cpm56.com
|
||||
|
||||
and search for the start of the console processor:
|
||||
|
||||
B>peek 980
|
||||
0980 C3 xx xx C3 xx xx 7F 00 43 4F 50 59 52 49 47 48
|
||||
0990 54 20 ...
|
||||
|
||||
If you don't find the start of the CCP at 980H, don't be
|
||||
discouraged. It is there, but at a higher address. Keep looking.
|
||||
|
||||
7) When you find the location of the CCP, patch it with the new ZCPR
|
||||
image.
|
||||
|
||||
B>get 980 zcprnbld.com
|
||||
|
||||
8) Place the new file onto the boot track of a test disk, not your
|
||||
original, using SYSGEN, and try it out.
|
||||
|
||||
B>sysgen
|
||||
SYSGEN VER 2.2
|
||||
SOURCE DRIVE NAME (OR RETURN TO SKIP) <cr> <-- Use memory image
|
||||
DESTINATION DRIVE NAME (OR RETURN TO REBOOT)b <-- Load onto drive B
|
||||
DESTINATION ON B, THEN TYPE RETURN <cr>
|
||||
FUNCTION COMPLETE
|
||||
DESTINATION DRIVE NAME (OR RETURN TO REBOOT) <cr>
|
||||
|
||||
You should now have a ZCPR system boot disk. Notice you did all
|
||||
your work on drive B so you wouldn't destroy the original.
|
||||
|
||||
|
||||
|
||||
This may seem like a great number of steps, but each is only a single
|
||||
CP/M command line, total time is only 5 minutes or so after you get
|
||||
ZCPR to run as a .com file.
|
||||
|
||||
|
||||
Debugging ZCPR
|
||||
==============
|
||||
|
||||
Special provisions have been make to ease the debugging of ZCPR.
|
||||
Setting the TEST equate true causes the assembler to build a version of
|
||||
ZCPR that executes in the TPA. This allows the use of a debugger like
|
||||
DDT, ZSID, or Z8E to load and monitor execution. To identify the debug
|
||||
version, the prompt character is changed from '>' to '<' when it runs.
|
||||
|
||||
CPRLOC for the test version is 8000H. A bootstrap loader is included
|
||||
at the beginning to move the image to this address. Do not try to set
|
||||
a breakpoint until after the loader has moved ZCPR. The easiest way to
|
||||
accomplish this is to single-step through the loader and then set your
|
||||
breakpoints. Change the execution address to something lower if 8000H
|
||||
does not leave enough space for the debugger.
|
||||
|
||||
A small amount of code is also added at the end of the debug version to
|
||||
compute the BIOS list status and cold boot entry points at run time.
|
||||
This permits the demo version to execute properly without setting the
|
||||
BDOS location equate.
|
||||
|
||||
Patching SUBMIT.COM
|
||||
===================
|
||||
|
||||
SUBMIT.COM is patched to run with ZCPR by the following procedure.
|
||||
This is recommended if the user does not have one of the newer public
|
||||
domain versions of submit. This patch simply makes SUBMIT.COM always
|
||||
place the $$$.SUB file on drive A. Illustrative terminal session
|
||||
follows:
|
||||
|
||||
A>get 100 submit.com;peek 5bb 2
|
||||
05BB 00 24 <-- Patch is at 5BB Hex
|
||||
A>poke 5bb 1 <-- Change 0 (default drive) to 1 (drive A)
|
||||
A>peek 5b0 20 <-- Let's check just to make sure
|
||||
05B0 00 00 00 00 00 00 30 30 31 20 24 01 24 24 24 20
|
||||
05C0 20 20 20 20 53 55 42 00 00 00 1A 1A 1A 1A 1A 1A
|
||||
A>save 5 newsubmt.com <-- Save new SUBMIT.COM file
|
||||
|
||||
Pretty simple, huh?
|
||||
ny error message encountered that is not on this list came from some
|
||||
prog
|
||||
BIN
Doc/qcp27.pdf
Normal file
BIN
Doc/qcp27.pdf
Normal file
Binary file not shown.
BIN
Doc/qdos27.pdf
Normal file
BIN
Doc/qdos27.pdf
Normal file
Binary file not shown.
BIN
Doc/qpm27.pdf
Normal file
BIN
Doc/qpm27.pdf
Normal file
Binary file not shown.
661
LICENSE
Normal file
661
LICENSE
Normal file
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
24
Makefile
24
Makefile
@@ -1,19 +1,19 @@
|
||||
all:
|
||||
cd Tools/unix ; make
|
||||
cd Source ; make
|
||||
cd Source/Images ; make
|
||||
$(MAKE) --directory Tools
|
||||
$(MAKE) --directory Source
|
||||
|
||||
clean:
|
||||
cd Tools/unix ; make clean
|
||||
cd Source ; make clean
|
||||
cd Binary ; make clean
|
||||
$(MAKE) --directory Tools clean
|
||||
$(MAKE) --directory Source clean
|
||||
$(MAKE) --directory Binary clean
|
||||
rm -f make.log
|
||||
|
||||
clobber:
|
||||
cd Tools/unix ; make clobber
|
||||
cd Source ; make clobber
|
||||
cd Binary ; make clobber
|
||||
rm -f typescript
|
||||
clobber: clean
|
||||
|
||||
diff:
|
||||
cd Source ; make diff
|
||||
$(MAKE) --directory Source diff
|
||||
|
||||
dist:
|
||||
$(MAKE) ROM_PLATFORM=dist 2>&1 | tee make.log
|
||||
$(MAKE) --directory Source clean
|
||||
$(MAKE) --directory Tools clean
|
||||
|
||||
1299
ReadMe.txt
1299
ReadMe.txt
File diff suppressed because it is too large
Load Diff
49
Readme.unix
49
Readme.unix
@@ -1,49 +0,0 @@
|
||||
this tree now contains makefiles and tools to build on Linux and MacosX
|
||||
Linux is rather more thoroughly tested compared to os-x.
|
||||
|
||||
to get here, TASM and the propeller generation tools needed to be replaced,
|
||||
and since the unix filesystem is usually case-sensitive, and CP/M and windows
|
||||
are not, the cpm tools were made case-insensitive.
|
||||
|
||||
TASM was replaced with uz80as, which implements a subset of TASM and fixes some
|
||||
bugs. however, I needed to add some functionality to make it build the sources
|
||||
as they exist in this tree. in particular, one thing to be very careful of is
|
||||
that TASM is not entirely consistent with respect to the .DS directive.
|
||||
it's usually a bad idea to mix .DS, .FILL, .DB with .ORG.
|
||||
.DS n is best thought of as .ORG $ + n
|
||||
.ORG changes the memory pointer, but does not change the file output point.
|
||||
it works a lot more like M80, SLR* .phase
|
||||
|
||||
it assumes that you have some standard system tools and libraries installed
|
||||
specifically: gcc, gnu make, libncurses
|
||||
|
||||
to build:
|
||||
cd to the top directory and type make.
|
||||
|
||||
heavy use is made of make's include facility and pattern rules.
|
||||
the master rule set is in Tools/Makefile.inc. changes here will affect
|
||||
almost every Makefile, and where exceptions are needed, the overrides are
|
||||
applied in the lower Makefiles.
|
||||
|
||||
these tools can run a windows-linux regression test, where all the binaries are
|
||||
compared to a baseline windows build.
|
||||
|
||||
Credit:
|
||||
|
||||
uz80as was written by Jorge Giner Cordero, jorge.giner@hotmail.com,
|
||||
and the original source can be found at https://github.com/jorgicor/uz80as
|
||||
|
||||
the propeller tools use bstc and openspin, parallax tools from
|
||||
http://www.fnarfbargle.com/bst.html https://github.com/parallaxinc/OpenSpin
|
||||
note that bst is not open source or even currently maintained, so I could
|
||||
not generate a version for 64 bit osx.
|
||||
|
||||
cpmtools were the most current I could find, and it has been hacked to do
|
||||
case-insensitivity. these are not marked, and are not extensive.
|
||||
|
||||
zx is from distributed version, and also has local hacks for case insensitivity.
|
||||
both zx and cpmtools ship with an overly complicated makefile generation system
|
||||
and this is ignored.
|
||||
|
||||
this whole linux build framework is the work of Curt Mayer, curt@zen-room.org.
|
||||
use it for whatever you like; this is not my day job.
|
||||
@@ -4,45 +4,47 @@ setlocal
|
||||
set TOOLS=../../Tools
|
||||
set APPBIN=..\..\Binary\Apps
|
||||
|
||||
set PATH=%TOOLS%\tasm32;%TOOLS%\zx;%PATH%
|
||||
set PATH=%TOOLS%\tasm32;%TOOLS%\zxcc;%PATH%
|
||||
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
set ZXBINDIR=%TOOLS%/cpm/bin/
|
||||
set ZXLIBDIR=%TOOLS%/cpm/lib/
|
||||
set ZXINCDIR=%TOOLS%/cpm/include/
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
call :asm SysCopy || goto :eof
|
||||
call :asm Assign || goto :eof
|
||||
call :asm Format || goto :eof
|
||||
call :asm Talk || goto :eof
|
||||
call :asm Mode || goto :eof
|
||||
call :asm RTC || goto :eof
|
||||
call :asm Timer || goto :eof
|
||||
call :asm180 IntTest || goto :eof
|
||||
call :asm syscopy || exit /b
|
||||
call :asm assign || exit /b
|
||||
call :asm format || exit /b
|
||||
call :asm talk || exit /b
|
||||
call :asm mode || exit /b
|
||||
call :asm rtc || exit /b
|
||||
call :asm timer || exit /b
|
||||
call :asm rtchb || exit /b
|
||||
|
||||
zx Z80ASM -SYSGEN/F
|
||||
zxcc Z80ASM -SYSGEN/F || exit /b
|
||||
|
||||
zx MAC SURVEY.ASM -$PO
|
||||
zx MLOAD25 -SURVEY.COM=SURVEY.HEX
|
||||
pushd XM && call Build || exit /b & popd
|
||||
pushd FDU && call Build || exit /b & popd
|
||||
pushd Tune && call Build || exit /b & popd
|
||||
pushd FAT && call Build || exit /b & popd
|
||||
pushd Test && call Build || exit /b & popd
|
||||
pushd ZMP && call Build || exit /b & popd
|
||||
pushd ZMD && call Build || exit /b & popd
|
||||
pushd Dev && call Build || exit /b & popd
|
||||
pushd VGM && call Build || exit /b & popd
|
||||
pushd cpuspd && call Build || exit /b & popd
|
||||
pushd Survey && call Build || exit /b & popd
|
||||
|
||||
setlocal & cd XM && call Build || exit /b 1 & endlocal
|
||||
setlocal & cd FDU && call Build || exit /b 1 & endlocal
|
||||
setlocal & cd Tune && call Build || exit /b 1 & endlocal
|
||||
setlocal & cd FAT && call Build || exit /b 1 & endlocal
|
||||
|
||||
copy *.com %APPBIN%\
|
||||
copy *.com %APPBIN%\ || exit /b
|
||||
|
||||
goto :eof
|
||||
|
||||
:asm
|
||||
echo.
|
||||
echo Building %1...
|
||||
tasm -t80 -g3 -fFF %1.asm %1.com %1.lst
|
||||
tasm -t80 -g3 -fFF %1.asm %1.com %1.lst || exit /b
|
||||
goto :eof
|
||||
|
||||
:asm180
|
||||
echo.
|
||||
echo Building %1...
|
||||
tasm -t180 -g3 -fFF %1.asm %1.com %1.lst
|
||||
tasm -t180 -g3 -fFF %1.asm %1.com %1.lst || exit /b
|
||||
goto :eof
|
||||
|
||||
@@ -7,7 +7,14 @@ if exist *.lst del *.lst
|
||||
if exist *.hex del *.hex
|
||||
if exist *.prn del *.prn
|
||||
|
||||
setlocal & cd XM && call Clean || exit /b 1 & endlocal
|
||||
setlocal & cd FDU && call Clean || exit /b 1 & endlocal
|
||||
setlocal & cd Tune && call Clean || exit /b 1 & endlocal
|
||||
setlocal & cd FAT && call Clean || exit /b 1 & endlocal
|
||||
pushd XM && call Clean || exit /b 1 & popd
|
||||
pushd FDU && call Clean || exit /b 1 & popd
|
||||
pushd Tune && call Clean || exit /b 1 & popd
|
||||
pushd FAT && call Clean || exit /b 1 & popd
|
||||
pushd Test && call Clean || exit /b 1 & popd
|
||||
pushd ZMP && call Clean || exit /b 1 & popd
|
||||
pushd ZMD && call Clean || exit /b 1 & popd
|
||||
pushd Dev && call Clean || exit /b 1 & popd
|
||||
pushd VGM && call Clean || exit /b 1 & popd
|
||||
pushd cpuspd && call Clean || exit /b 1 & popd
|
||||
pushd Survey && call Clean || exit /b 1 & popd
|
||||
|
||||
14
Source/Apps/Dev/Build.cmd
Normal file
14
Source/Apps/Dev/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 Dev...
|
||||
tasm -t80 -g3 -fFF dev.asm dev.com %dev.lst || exit /b
|
||||
|
||||
copy /Y dev.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
|
||||
7
Source/Apps/Dev/Clean.cmd
Normal file
7
Source/Apps/Dev/Clean.cmd
Normal file
@@ -0,0 +1,7 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist dev.com del dev.com
|
||||
if exist *.hex del *.hex
|
||||
if exist *.lst del *.lst
|
||||
if exist *.zip del *.zip
|
||||
10
Source/Apps/Dev/Makefile
Normal file
10
Source/Apps/Dev/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
OBJECTS = dev.com
|
||||
#DOCS = dev.txt
|
||||
DEST = ../../../Binary/Apps
|
||||
DOCDEST = ../../../Binary/Apps
|
||||
TOOLS = ../../../Tools
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
%.com: USETASM=1
|
||||
|
||||
|
||||
1
Source/Apps/Dev/ReadMe.txt
Normal file
1
Source/Apps/Dev/ReadMe.txt
Normal file
@@ -0,0 +1 @@
|
||||
THE DEV DIRECTORY IS A SKELETON DIRECTORY TO AID SETTING UP A BUILD PROCESS FOR A NEW PROGRAM
|
||||
32
Source/Apps/Dev/dev.asm
Normal file
32
Source/Apps/Dev/dev.asm
Normal file
@@ -0,0 +1,32 @@
|
||||
;===============================================================================
|
||||
; Dev - Developement Stub
|
||||
;===============================================================================
|
||||
;
|
||||
; AUTHOR:
|
||||
;
|
||||
; Usage:
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; Change Log:
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; ToDo:
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
;===============================================================================
|
||||
; Definitions
|
||||
;===============================================================================
|
||||
;
|
||||
;
|
||||
;===============================================================================
|
||||
; Code Section
|
||||
;===============================================================================
|
||||
;
|
||||
;
|
||||
.org $100
|
||||
ret
|
||||
.end
|
||||
|
||||
@@ -4,4 +4,4 @@ setlocal
|
||||
REM FAT.com is currently distributed as a binary application, so
|
||||
REM it is not built here.
|
||||
|
||||
copy /Y FAT.com ..\..\..\Binary\Apps\
|
||||
copy /Y fat.com ..\..\..\Binary\Apps\ || exit /b
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
OBJECTS = FAT.com
|
||||
NODELETE = FAT.com
|
||||
OBJECTS = fat.com
|
||||
NODELETE = fat.com
|
||||
DEST = ../../../Binary/Apps
|
||||
|
||||
TOOLS=../../../Tools
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
RomWBW HBIOS CP/M FAT Utility ("FAT.COM")
|
||||
|
||||
Author: Wayne Warthen
|
||||
Updated: 11-Oct-2019
|
||||
Updated: 12-Apr-2021
|
||||
|
||||
Application to manipulate and exchange files with a FAT (DOS)
|
||||
filesystem. Runs on any HBIOS hosted CP/M implementation.
|
||||
@@ -47,7 +47,7 @@ NOTES:
|
||||
"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
|
||||
|
||||
- Files with SYS, HIDDEN, or R/O only attributes are not given
|
||||
- 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.
|
||||
@@ -70,7 +70,7 @@ BUILD NOTES:
|
||||
|
||||
- Application is based on FatFs. FatFs source is included.
|
||||
|
||||
- SDCC compiler is required to build (v3.9.0 known working).
|
||||
- SDCC compiler is required to build (v4.0.0 known working).
|
||||
|
||||
- ZX CP/M emulator is required to build (from RomWBW distribution).
|
||||
|
||||
@@ -88,6 +88,8 @@ TO DO:
|
||||
|
||||
- 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
|
||||
@@ -98,4 +100,5 @@ HISTORY:
|
||||
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
|
||||
|
||||
|
||||
BIN
Source/Apps/FAT/fat.com
Normal file
BIN
Source/Apps/FAT/fat.com
Normal file
Binary file not shown.
@@ -5,9 +5,7 @@ set TOOLS=../../../Tools
|
||||
set PATH=%TOOLS%\tasm32;%PATH%
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
tasm -t80 -b -fFF FDU.asm FDU.com FDU.lst
|
||||
tasm -t80 -b -fFF fdu.asm fdu.com fdu.lst || exit /b
|
||||
|
||||
if errorlevel 1 goto :eof
|
||||
|
||||
copy /Y FDU.com ..\..\..\Binary\Apps\
|
||||
copy /Y FDU.txt ..\..\..\Doc\
|
||||
copy /Y fdu.com ..\..\..\Binary\Apps\ || exit /b
|
||||
copy /Y fdu.doc ..\..\..\Binary\Apps\ || exit /b
|
||||
|
||||
@@ -1,514 +0,0 @@
|
||||
================================================================
|
||||
Floppy Disk Utility (FDU) v5.3 for RetroBrew Computers
|
||||
Disk IO / Zeta / Dual-IDE / N8 / RC2014 / SmallZ80 / Dyno
|
||||
================================================================
|
||||
|
||||
Updated January 5, 2020
|
||||
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.
|
||||
|
||||
The intent is to provide a testbed that allows direct testing
|
||||
of all possible media types and modes of access. The
|
||||
application supports read, write, and format by sector, track,
|
||||
and disk as well as a random read/write test.
|
||||
|
||||
The application supports access modes of polling, interrupt,
|
||||
INT/WAIT, and DRQ/WAIT. At present, it supports 3.5" media at
|
||||
DD (720KB) and HD (1.44MB) capacities. It also now supports
|
||||
5.25" media (720KB and 1.2MB) and 8" media (1.11MB) as well.
|
||||
Additional media will be added when I have time and access to
|
||||
required hardware. Not all modes are supported on all
|
||||
platforms and some modes are experimental in all cases.
|
||||
|
||||
In many ways this application is merely reinventing the wheel
|
||||
and performs functionality similar to existing applications,
|
||||
but I have not seen any other applications for RetroBrew
|
||||
Computers hardware that provide this range of functionality.
|
||||
|
||||
While the application is now almost entirely new code, I would
|
||||
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!
|
||||
|
||||
General Usage
|
||||
-------------
|
||||
|
||||
In general, usage is self explanatory. At invocation, you
|
||||
must select the floppy disk controller (FDC) that you are
|
||||
using. Subsequently, the main menu allows you to set the
|
||||
unit, media, and mode to test. These settings MUST match your
|
||||
situation. Read, write, format, and verify functions are
|
||||
provided. A sub-menu will allow you to choose sector, track,
|
||||
disk, or random tests.
|
||||
|
||||
The verify function requires a little explanation. It will
|
||||
take the contents of the current in-memory disk buffer, save
|
||||
it, and compare it to the selected sectors. So, you must
|
||||
ensure that the sectors to be verified already have been
|
||||
written with the same pattern as the buffer contains. I
|
||||
typically init the buffer to a pattern, write the pattern to
|
||||
the entire disk, then verify the entire disk.
|
||||
|
||||
Another submenu is provided for FDC commands. This sub-menu
|
||||
allows you to send low-level commands directly to FDC. You
|
||||
*must* know what you are doing to use this sub-menu. For
|
||||
example, in order to read a sector using this sub-menu, you
|
||||
will need to perform specify, seek, sense int, and read
|
||||
commands specifying correct values (nothing is value checked
|
||||
in this menu).
|
||||
|
||||
Required Hardware/BIOS
|
||||
----------------------
|
||||
|
||||
Of course, the starting point is to have a supported hardware
|
||||
configuration. The following Z80 / Z180 based CPU boards are
|
||||
supported:
|
||||
|
||||
- SBC V1/2
|
||||
- Zeta
|
||||
- Zeta 2
|
||||
- N8
|
||||
- Mark IV
|
||||
- RC2014 w/ SMC
|
||||
- RC2014 w/ WDC
|
||||
- SmallZ80
|
||||
- Dyno
|
||||
|
||||
You must be using either a RomWBW or UBA based OS version.
|
||||
|
||||
You must have one of the following floppy disk controllers:
|
||||
|
||||
- Disk IO ECB Board FDC
|
||||
- Disk IO 3 ECB Board FDC
|
||||
- Dual-IDE ECB Board FDC
|
||||
- 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
|
||||
|
||||
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
|
||||
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
|
||||
access the floppy system. FDU interacts directly with
|
||||
hardware. Upon exit, you may need to reset your OS to get the
|
||||
floppy system back into a state that is expected.
|
||||
|
||||
The Disk I/O should be jumpered as follows:
|
||||
|
||||
J1: depends on use of interrupt modes (see interrupt modes below)
|
||||
J2: pins 1-2, & 3-4 jumpered
|
||||
J3: hardware dependent timing for DMA mode (see DMA modes below)
|
||||
J4: pins 2-3 jumpered
|
||||
J5: off
|
||||
J6: pins 2-3 jumpered
|
||||
J7: pins 2-3 jumpered
|
||||
J8: off
|
||||
J9: off
|
||||
J10: off
|
||||
J11: off
|
||||
J12: off
|
||||
|
||||
Note that J1 can be left on even when not using interrupt
|
||||
modes. As long as the BIOS is OK with it, that is fine. Note
|
||||
also that J3 is only relevant for DMA modes, but also can be
|
||||
left in place when using other modes.
|
||||
|
||||
The Disk I/O 3 board should be jumpered at the default settings:
|
||||
|
||||
JP2: 3-4
|
||||
JP3: 1-2 for int mode support, otherwise no jumper
|
||||
JP4: 1-2, 3-4
|
||||
JP5: 1-2
|
||||
JP6: 1-2
|
||||
JP7: 1-2, 3-4
|
||||
|
||||
Zeta & Zeta 2 do not have any relevant jumper settings. The
|
||||
hardwired I/O ranges are assumed in the code.
|
||||
|
||||
The Dual-IDE board should be jumpered as follows:
|
||||
|
||||
K3 (DT/R or /RD): /RD
|
||||
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
|
||||
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
|
||||
for I/O base address 0x50 (SV1: 11-12), JP1 (/DACK): 1-2,
|
||||
JP2 (TC): 2-3.
|
||||
|
||||
SmallZ80 does not have any relevant jumper settings. The
|
||||
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.
|
||||
|
||||
Modes of Operation
|
||||
------------------
|
||||
|
||||
You can select the following test modes. Please refer to the
|
||||
chart that follows to determine which modes should work with
|
||||
combinations of Z80 CPU speed and media format.
|
||||
|
||||
WARNING: In general, only the polling mode is considered fully
|
||||
reliable. The other modes are basically experimental and
|
||||
should only be used if you know exactly what you are doing.
|
||||
|
||||
Polling: Traditional polled input/output. Works well and very
|
||||
reliable with robust timeouts and good error recovery. Also,
|
||||
the slowest performance which precludes it from being used
|
||||
with 1.44MB floppy on a 4MHz Z80. This is definitely the mode
|
||||
you want to get working before any others. It does not require
|
||||
J1 (interrupt enable) on DISK I/O and does not care about the
|
||||
setting of J3.
|
||||
|
||||
Interrupt: Relies on FDC interrupts to determine when a byte
|
||||
is ready to be read/written. It does *not* implement a
|
||||
timeout during disk operations. For example, if there is no
|
||||
disk in the drive, this mode will just hang until a disk is
|
||||
inserted. This mode *requires* that the host has interrupts
|
||||
active using interrupt mode 1 (IM1) and interrupts attached to
|
||||
the FDC controller. The BIOS must be configured to handle
|
||||
these interrupts safely.
|
||||
|
||||
Fast Interrupt: Same as above, but sacrifices additional
|
||||
reliability for faster operation. This mode will allow a
|
||||
1.44MB floppy to work with a 4MHz Z80 CPU. However, if any
|
||||
errors occur (even a transient read error which is not
|
||||
unusual), this mode will hang. The same FDC interrupt
|
||||
requirements as above are required.
|
||||
|
||||
INT/WAIT: Same as Fast Interrupt, but uses CPU wait instead of
|
||||
actual interrupt. This mode is exclusive to the original Disk
|
||||
IO board. It is subject to all the same issues as Fast
|
||||
Interrupt, but does not need J1 shorted. J3 is irrelevant.
|
||||
|
||||
DRQ/WAIT: Uses pseudo DMA to handle input/output. Does not
|
||||
require that interrupts (J1) be enabled on the DISK I/O.
|
||||
However, it is subject to all of the same reliability issues
|
||||
as "Fast Interrupt". This mode is exclusive to the original
|
||||
Disk IO board. At present, the mode is *not* implemented!
|
||||
|
||||
The chart below attempts to describe the combinations that
|
||||
work for me. By far, the most reliable mode is Polling, but
|
||||
it requires 8MHz CPU for HD disks.
|
||||
|
||||
DRQ/WAIT --------------------------------+
|
||||
INT/WAIT -----------------------------+ |
|
||||
Fast Interrupt --------------------+ | |
|
||||
Interrupt ----------------------+ | | |
|
||||
Polling ---------------------+ | | | |
|
||||
| | | | |
|
||||
CPU Speed --------------+ | | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
|
||||
3.5" DD (720K) ------ 4MHz Y Y Y Y X
|
||||
8MHz+ Y Y Y Y X
|
||||
|
||||
3.5" HD (1.44M) ----- 4MHz N N Y Y X
|
||||
8MHz+ Y Y Y Y X
|
||||
|
||||
5.25" DD (360K) ----- 4MHz Y Y Y Y X
|
||||
8MHz+ Y Y Y Y X
|
||||
|
||||
5.25" HD (1.2M) ----- 4MHz N N Y Y X
|
||||
8MHz+ Y Y Y Y X
|
||||
|
||||
8" DD (1.11M) ------- 4MHz N N Y Y X
|
||||
8MHz+ Y Y Y Y X
|
||||
|
||||
Y = Yes, works
|
||||
N = No, does not work
|
||||
X = Experimental, probably won't work
|
||||
|
||||
Tracing
|
||||
-------
|
||||
|
||||
Command/result activity to/from the FDC will be written out if
|
||||
the trace setting is changed from '00' to '01' in setup.
|
||||
Additionally, if a command failure is detected on any command,
|
||||
that specific comand and results are written regardless of the
|
||||
trace setting.
|
||||
|
||||
The format of the line written is:
|
||||
<OPERATION>: <COMMAND BYTES> --> <RESULT BYTES> [<RESULT>]
|
||||
|
||||
For example, this is the output of a normal read operation:
|
||||
READ: 46 01 00 00 01 02 09 1B FF --> 01 00 00 00 00 02 02 [OK]
|
||||
|
||||
Please refer to the i8272 data sheet for information on the
|
||||
command and result bytes.
|
||||
|
||||
Note that the sense interrupt command can return a non-OK
|
||||
result. This is completely normal in some cases. It is
|
||||
necessary to "poll" the drive for seek status using sense
|
||||
interrupt. If there is nothing to report, then the result
|
||||
will be INVALID COMMAND. Additionally, during a recalibrate
|
||||
operation, it may be necessary to issue the command twice
|
||||
because the command will only step the drive 77 times looking
|
||||
for track 0, but the head may be up to 80 tracks away. In
|
||||
this case, the first recalibrate fails, but the second should
|
||||
succeed. Here is what this would look like if trace is turned
|
||||
on:
|
||||
|
||||
RECALIBRATE: 07 01 --> <EMPTY> [OK]
|
||||
SENSE INTERRUPT: 08 --> 80 [INVALID COMMAND]
|
||||
...
|
||||
...
|
||||
...
|
||||
SENSE INTERRUPT: 08 --> 80 [INVALID COMMAND]
|
||||
SENSE INTERRUPT: 08 --> 71 00 [ABNORMAL TERMINATION]
|
||||
RECALIBRATE: 07 01 --> <EMPTY> [OK]
|
||||
SENSE INTERRUPT: 08 --> 21 00 [OK]
|
||||
|
||||
Another example is when the FDC has just been reset. In this
|
||||
case, you will see up to 4 disk change errors. Again these
|
||||
are not a real problem and to be expected.
|
||||
|
||||
When tracing is turned off, the application tries to be
|
||||
intelligent about error reporting. The specific errors from
|
||||
sense interrupt documented above will be suppressed because
|
||||
they are not a real problem. All other errors will be
|
||||
displayed.
|
||||
|
||||
Error Handling
|
||||
--------------
|
||||
|
||||
There is no automated error retry logic. This is very
|
||||
intentional since the point is to expose the controller and
|
||||
drive activity. Any error detected will result in a prompt to
|
||||
abort, retry, or continue. Note that some number of errors is
|
||||
considered normal for this technology. An occasional error
|
||||
would not necessarily be considered a problem.
|
||||
|
||||
CPU Speed
|
||||
---------
|
||||
|
||||
Starting with v5.0, the application adjusts it's timing loops
|
||||
to the actual system CPU speed by querying the BIOS for the
|
||||
current CPU speed.
|
||||
|
||||
Interleave
|
||||
----------
|
||||
|
||||
The format command now allows the specification of a sector
|
||||
interleave. It is almost always the case that the optimal
|
||||
interleave will be 2 (meaning 2:1).
|
||||
|
||||
360K Media
|
||||
----------
|
||||
|
||||
The 360K media definition should work well for true 360K
|
||||
drives. However, it will generally not work with 1.2M
|
||||
drives. This is because these drives spin at 360RPM instead
|
||||
of the 300RPM speed of true 360K drives. Additionally, 1.2M
|
||||
drives are 80 tracks and 360K drives are 40 tracks and, so
|
||||
far, there is no mechanism in FD to "double step" as a way to
|
||||
use 40 track media in 80 track drives.
|
||||
|
||||
With this said, it is possible to configure some 1.2M 5.25"
|
||||
drives to automatically spin down to 300RPM based on a density
|
||||
select signal (DENSEL). This signal is asserted by FD for
|
||||
360K media, so IF you have configured your drive to react to
|
||||
this signal correctly, you will be able to use the 360K media
|
||||
defintion. Most 1.2M 5.25" drives are NOT configured this way
|
||||
by default. TEAC drives are generally easy to modify and have
|
||||
been tested by the author and do work in this manner. Note
|
||||
that this does not address the issue of double stepping above;
|
||||
you will just be using the first 40 of 80 tracks.
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
I am happy to answer questions as fast and well as I am able.
|
||||
Best contact is wwarthen@gmail.com or post something on the
|
||||
RetroBrew Computers Forum
|
||||
https://www.retrobrewcomputers.org/forum/.
|
||||
|
||||
Changes
|
||||
-------
|
||||
|
||||
WW 8/12/2011
|
||||
|
||||
Removed call to pulse TC in the FDC initialization after
|
||||
determining that it periodically caused the FDC to write bad
|
||||
sectors. I am mystified by this, but definitely found it to
|
||||
be true. Will revisit at some point -- probably a timing
|
||||
issue between puslsing TC and whatever happens next.
|
||||
|
||||
Non-DMA mode was being set incorrectly for FAST-DMA mode. It
|
||||
was set for non-DMA even though we were doing DMA. It is
|
||||
interesting that it worked fine anyway. Fixed it anyway.
|
||||
|
||||
DIO_SETMEDIA was not clearing DCD_DSKRDY as it should. Fixed.
|
||||
|
||||
WW 8/26/2011: v1.1
|
||||
|
||||
Added support for Zeta. Note that INT/WAIT and DRQ/WAIT are
|
||||
not available on Zeta. Note that Zeta provides the ability to
|
||||
perform a reset of the FDC independent of a full CPU reset.
|
||||
This is VERY useful and the FDC is reset anytime a drive reset
|
||||
is required.
|
||||
|
||||
Added INT/WAIT support.
|
||||
|
||||
WW 8/28/2011: V1.2
|
||||
|
||||
All changes in this version are Zeta specific. Fixed FDC
|
||||
reset logic and motor status display for Zeta (code from
|
||||
Sergey).
|
||||
|
||||
Modified Zeta disk change display to include it in the command
|
||||
output line. This makes more sense because a command must be
|
||||
issued to select the desired drive first. You can use the
|
||||
SENSE INT command id you want to check the disk change value
|
||||
at any time. It will also be displayed with any other command
|
||||
output display.
|
||||
|
||||
WW 9/1/2011: V1.3
|
||||
|
||||
Added CPUFREQ configuration setting to tune delays based on
|
||||
cpu speed. The build app is set for 8MHz which also seems to
|
||||
work well for 4MHz CPU's. Faster CPU speeds will probably
|
||||
require tuning this setting.
|
||||
|
||||
WW 9/5/2011: V1.4
|
||||
|
||||
Changed the polling execution routines to utilize CPUFREQ
|
||||
variable to optimize timeout counter. Most importantly, this
|
||||
should allow the use of faster CPUs (like 20MHz).
|
||||
|
||||
WW 9/19/2011: V1.5
|
||||
|
||||
Zeta changes only. Added a call to FDC RESET after any
|
||||
command failure. This solves an issue where the drive remains
|
||||
selected if a command error occurs. Also added FDC RESET to
|
||||
FDC CONTROL menu.
|
||||
|
||||
WW 10/7/2011: V2.0
|
||||
|
||||
Added support for DIDE. Only supports polling IO and it does
|
||||
not appear any other modes are possible given the hardware
|
||||
constraints.
|
||||
|
||||
WW 10/13/2011: V2.1
|
||||
|
||||
Modified to support N8. N8 is essentially identical to Dual
|
||||
IDE. The only real change is the IO addresses. In theory, I
|
||||
should be able to support true DMA on N8 and will work on that.
|
||||
|
||||
WW 10/20/2011: v2.2
|
||||
|
||||
I had some problems with the results being read were sometimes
|
||||
missing a byte. Fixed this by taking a more strict approach
|
||||
to watching the MSR for the exact bits that are expected.
|
||||
|
||||
WW 10/22/2011: V2.3
|
||||
|
||||
After spending a few days trying to track down an intermittent
|
||||
data corruption issue with my Dual IDE board, I added a verify
|
||||
function. This helped me isolate the problem very nicely
|
||||
(turned out to be interference from the bus monitor).
|
||||
|
||||
WW 11/25/2011: V2.4
|
||||
|
||||
Preliminary support for DISKIO V3. Basically just assumed
|
||||
that it operates just like the Zeta. Needs to be verified
|
||||
with real hardware as soon as I can.
|
||||
|
||||
WW 1/9/2012: V2.5
|
||||
|
||||
Modified program termination to use CP/M reset call so that a
|
||||
warm start is done and all drives are logged out. This is
|
||||
important because media may have been formatted during the
|
||||
program execution.
|
||||
|
||||
WW 2/6/2012: v2.6
|
||||
|
||||
Added support for 5.25" drives as tested by Sergio.
|
||||
|
||||
WW 4/5/2012: v2.7
|
||||
|
||||
Added support for 8" drives as tested by Jim Harre.
|
||||
|
||||
WW 4/6/2012: v2.7a
|
||||
|
||||
Fixed issue with media selection menu to remove duplicate
|
||||
entries.
|
||||
|
||||
WW 4/8/2012: v2.7b
|
||||
|
||||
Corrected the handling of the density select signal.
|
||||
|
||||
WW 5/22/2012: v2.8
|
||||
|
||||
Added new media definitions (5.25", 320K).
|
||||
|
||||
WW 6/1/2012: v2.9
|
||||
|
||||
Added interleave capability on format.
|
||||
|
||||
WW 6/5/2012: v3.0
|
||||
|
||||
Documentation cleanup.
|
||||
|
||||
WW 7/1/2012: v3.1
|
||||
|
||||
Modified head load time (HLT) for 8" media based on YD-180
|
||||
spec. Now set to 50ms.
|
||||
|
||||
WW 6/17/2013: v3.2
|
||||
|
||||
Cleaned up SRT, HLT, and HUT values.
|
||||
|
||||
SK 2/10/2015: v3.3
|
||||
|
||||
Added Zeta SBC v2 support (Sergey Kiselev)
|
||||
|
||||
WW 3/25/2015: v4.0
|
||||
|
||||
Renamed from FDTST --> FD
|
||||
|
||||
WW 9/2/2017: v5.0
|
||||
|
||||
Renamed from FD to FDU.
|
||||
Added runtime selection of FDC hardware.
|
||||
Added runtime timing adjustment.
|
||||
|
||||
WW 12/16/2017: v5.1
|
||||
|
||||
Improved polling version of read/write to fix occasional overrun errors.
|
||||
|
||||
WW 1/8/2018: v5.2
|
||||
|
||||
Added support for RC2014 hardware:
|
||||
- Scott Baker SMC 9266 FDC module
|
||||
- Scott Baker WDC 37C65 FDC module
|
||||
|
||||
WW 9/5/2018: v5.3
|
||||
- Removed use of pulsing TC to end R/W operations after one sector and
|
||||
instead set EOT = R (sector number) so that after desired sector is
|
||||
read, R/W stops with end of cylinder error which is a documented
|
||||
method for controling number of sectors R/W. This specific termination
|
||||
condition is no longer considered an error, but a successful end of
|
||||
operation.
|
||||
- Added support for SmallZ80
|
||||
|
||||
WW 5/1/2020: v5.4
|
||||
- Added support for Dyno (based on work by Steve Garcia)
|
||||
@@ -1,7 +1,7 @@
|
||||
OBJECTS = FDU.com
|
||||
DOCS = FDU.txt
|
||||
OBJECTS = fdu.com
|
||||
DOCS = fdu.doc
|
||||
DEST = ../../../Binary/Apps
|
||||
DOCDEST = ../../../Doc
|
||||
DOCDEST = ../../../Binary/Apps
|
||||
TOOLS = ../../../Tools
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
|
||||
@@ -38,13 +38,17 @@
|
||||
; 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
|
||||
; - USE EOT=R TO END R/W AFTER ONE SECTOR INSTEAD
|
||||
; OF USING PULSE TC
|
||||
; 2020-01-05: V5.4 ADDED SUPPORT FOR DYNO FDC
|
||||
; 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
|
||||
;
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
@@ -79,13 +83,15 @@ FDC_RCSMC .EQU 6
|
||||
FDC_RCWDC .EQU 7
|
||||
FDC_SMZ80 .EQU 8
|
||||
FDC_DYNO .EQU 9
|
||||
FDC_EPFDC .EQU 10
|
||||
FDC_MBC .EQU 11
|
||||
;
|
||||
; 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
|
||||
;
|
||||
;===============================================================================
|
||||
@@ -213,8 +219,8 @@ INIT5:
|
||||
XOR A
|
||||
RET
|
||||
|
||||
STR_BANNER .DB "Floppy Disk Utility (FDU) v5.4, 05-jAN-2020$"
|
||||
STR_BANNER2 .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3","$"
|
||||
STR_BANNER .DB "Floppy Disk Utility (FDU) v5.8, 26-Jul-2021$"
|
||||
STR_BANNER2 .DB "Copyright (C) 2021, Wayne Warthen, GNU GPL v3","$"
|
||||
STR_HBIOS .DB " [HBIOS]$"
|
||||
STR_UBIOS .DB " [UBIOS]$"
|
||||
;
|
||||
@@ -284,6 +290,8 @@ FDCTBL: ; LABEL CONFIG DATA
|
||||
.DW STR_RCWDC, CFG_RCWDC
|
||||
.DW STR_SMZ80, CFG_SMZ80
|
||||
.DW STR_DYNO, CFG_DYNO
|
||||
.DW STR_EPFDC, CFG_EPFDC
|
||||
.DW STR_MBC, CFG_MBC
|
||||
FDCCNT .EQU ($-FDCTBL)/4 ; FD CONTROLLER COUNT
|
||||
;
|
||||
; FDC LABEL STRINGS
|
||||
@@ -298,6 +306,8 @@ STR_RCSMC .TEXT "RC-SMC$"
|
||||
STR_RCWDC .TEXT "RC-WDC$"
|
||||
STR_SMZ80 .TEXT "SMZ80$"
|
||||
STR_DYNO .TEXT "DYNO$"
|
||||
STR_EPFDC .TEXT "EPFDC$"
|
||||
STR_MBC .TEXT "MBC$"
|
||||
;
|
||||
; FDC CONFIGURATION BLOCKS
|
||||
;
|
||||
@@ -398,11 +408,11 @@ CFG_RCWDC:
|
||||
.DB _PCAT ; MODE=
|
||||
;
|
||||
CFG_SMZ80:
|
||||
.DB 044H ; FDC MAIN STATUS REGISTER
|
||||
.DB 045H ; FDC DATA PORT
|
||||
.DB 074H ; FDC MAIN STATUS REGISTER
|
||||
.DB 075H ; FDC DATA PORT
|
||||
.DB 0FFH ; DATA INPUT REGISTER
|
||||
.DB 042H ; DIGITAL OUTPUT REGISTER (LATCH)
|
||||
.DB 047H ; DCR
|
||||
.DB 072H ; DIGITAL OUTPUT REGISTER (LATCH)
|
||||
.DB 077H ; DCR
|
||||
.DB 0FFH ; DACK
|
||||
.DB 0FFH ; TERMINAL COUNT (W/ DACK)
|
||||
.DB 0FFH ; PSEUDO DMA DATA PORT
|
||||
@@ -419,6 +429,28 @@ CFG_DYNO:
|
||||
.DB 0FFH ; PSEUDO DMA DATA PORT
|
||||
.DB _PCAT ; MODE=
|
||||
;
|
||||
CFG_EPFDC:
|
||||
.DB 048H ; FDC MAIN STATUS REGISTER
|
||||
.DB 049H ; FDC DATA PORT
|
||||
.DB 0FFH ; DATA INPUT REGISTER
|
||||
.DB 04AH ; DIGITAL OUTPUT REGISTER (LATCH)
|
||||
.DB 04BH ; DCR
|
||||
.DB 0FFH ; DACK
|
||||
.DB 04CH ; TERMINAL COUNT (W/ DACK)
|
||||
.DB 0FFH ; PSEUDO DMA DATA PORT
|
||||
.DB _PCAT ; MODE=
|
||||
;
|
||||
CFG_MBC:
|
||||
.DB 030H ; FDC MAIN STATUS REGISTER
|
||||
.DB 031H ; FDC DATA PORT
|
||||
.DB 0FFH ; DATA INPUT REGISTER
|
||||
.DB 036H ; DIGITAL OUTPUT REGISTER (WHEN WRITTEN)
|
||||
.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 _PCAT ; MODE=
|
||||
;
|
||||
FDCID .DB 0 ; FDC IDENTIFIER (0 INDEXED)
|
||||
FDCBM .DB 0 ; FDC ID BITMAP
|
||||
FDCLBL .DW 0 ; POINTER TO ACTIVE FDC LABEL STRING
|
||||
@@ -433,10 +465,12 @@ 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) RCBus EPFDC\r\n"
|
||||
.TEXT " (L) Multi-Board Computer FDC\r\n"
|
||||
.TEXT " (X) Exit\r\n"
|
||||
.TEXT "=== OPTION ===> $\r\n"
|
||||
;
|
||||
@@ -466,16 +500,16 @@ MM_INFO: .DW MM_DRAW
|
||||
;
|
||||
STR_MAINMENU:
|
||||
.TEXT "=======================<< FDU MAIN MENU >>======================\r\n"
|
||||
; .TEXT "(S)ETUP: UNIT=XX MEDIA=XXXXXX MODE=XXXXXXXXXX TRACE=XX\r\n"
|
||||
; .TEXT "(S)ETUP: UNIT=XX MEDIA=XXXXXXXXXXXXX MODE=XXXXXXXXXX TRACE=XX\r\n"
|
||||
.TEXT "(S)ETUP: UNIT="
|
||||
MV_UNIT .TEXT "XX"
|
||||
.TEXT " MEDIA="
|
||||
MV_MED .TEXT "XXXXXX"
|
||||
.TEXT " MODE="
|
||||
MV_MODE .TEXT "XXXXXXXXXX"
|
||||
.TEXT " TRACE="
|
||||
MV_TRC .TEXT "XX"
|
||||
.TEXT "\r\n"
|
||||
MV_MED .TEXT "XXXXXXXXXXXXX"
|
||||
.TEXT " MODE="
|
||||
MV_MODE .TEXT "XXXXXXXXXX"
|
||||
.TEXT " TRACE="
|
||||
MV_TRC .TEXT "XX"
|
||||
.TEXT "\r\n"
|
||||
.TEXT "----------------------------------------------------------------\r\n"
|
||||
.TEXT "(R)EAD (W)RITE (F)ORMAT (V)ERIFY\r\n"
|
||||
.TEXT "(I)NIT BUFFER (D)UMP BUFFER FDC (C)MDS E(X)IT\r\n"
|
||||
@@ -1054,21 +1088,29 @@ MMOP_RANDOM1: ; GENERATE RANDOM TRACK
|
||||
JP P,MMOP_RANDOM1
|
||||
LD (DCD_TRACK),A
|
||||
|
||||
; GENERATE RANDOM HEAD
|
||||
MMOP_RANDOM2: ; GENERATE RANDOM HEAD
|
||||
;OR A
|
||||
;CALL RNDBYTE
|
||||
;AND 01H ; JUST USE LOW ORDER BIT
|
||||
;LD (DCD_HEAD),A
|
||||
LD A,(MDB_NUMHD)
|
||||
LD C,A
|
||||
CALL RNDBYTE
|
||||
AND 01H ; JUST USE LOW ORDER BIT
|
||||
AND 01H ; USE 1 BIT FOR UP TO 2 HEADS
|
||||
CP C
|
||||
JP P,MMOP_RANDOM2
|
||||
LD (DCD_HEAD),A
|
||||
|
||||
MMOP_RANDOM2: ; GENERATE RANDOM SECTOR
|
||||
MMOP_RANDOM3: ; GENERATE RANDOM SECTOR
|
||||
LD A,(MDB_EOT)
|
||||
LD C,A
|
||||
INC C ; ONE MORE THEN MAX SECTOR
|
||||
CALL RNDBYTE
|
||||
AND 1FH ; USE 5 BITS FOR UP TO 32 SECTORS
|
||||
CP C ; MAX SECTOR NUM IS 9 + 1 = 0AH
|
||||
JP P,MMOP_RANDOM2
|
||||
JP P,MMOP_RANDOM3
|
||||
CP 00H ; SECTOR NUM STARTS AT 1, DON'T ALLOW ZERO
|
||||
JP Z,MMOP_RANDOM2
|
||||
JP Z,MMOP_RANDOM3
|
||||
LD (DCD_SECTOR),A
|
||||
|
||||
CALL DIO_RUN
|
||||
@@ -1517,6 +1559,8 @@ MD_MAP:
|
||||
.DB %00000001 ; RCWDC POLL
|
||||
.DB %00000001 ; SMZ80 POLL
|
||||
.DB %00000001 ; DYNO POLL
|
||||
.DB %00000001 ; EPFDC POLL
|
||||
.DB %00000001 ; MBC POLL
|
||||
;
|
||||
; MEDIA DESCRIPTION BLOCK
|
||||
;
|
||||
@@ -1583,6 +1627,10 @@ MT_PC320 .EQU 2
|
||||
MT_PC360 .EQU 3
|
||||
MT_PC120 .EQU 4
|
||||
MT_PC111 .EQU 5
|
||||
MT_PC160 .EQU 6
|
||||
MT_PC180 .EQU 7
|
||||
MT_PC320SS .EQU 8
|
||||
MT_PC360SS .EQU 9
|
||||
;
|
||||
MIT: ; MEDIA INDEX TABLE
|
||||
.DW MDB_PC720
|
||||
@@ -1591,6 +1639,10 @@ MIT: ; MEDIA INDEX TABLE
|
||||
.DW MDB_PC360
|
||||
.DW MDB_PC120
|
||||
.DW MDB_PC111
|
||||
.DW MDB_PC160
|
||||
.DW MDB_PC180
|
||||
.DW MDB_PC320SS
|
||||
.DW MDB_PC360SS
|
||||
MIT_ENTCNT .EQU (($ - MIT) / 2)
|
||||
;
|
||||
; Specify Command:
|
||||
@@ -1642,7 +1694,7 @@ FCB_PC720 .DB 009H ; SECTOR COUNT
|
||||
.IF (($ - MDB_PC720) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC720 .TEXT "720KB $"
|
||||
DTL_PC720 .TEXT "720KB DS/DD $"
|
||||
DTS_PC720 .TEXT "3.5\" 720KB - 9 SECTORS, 2 SIDES, 80 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
MDB_PC144 .DW DTL_PC144 ; ADDRESS OF MEDIA LABEL
|
||||
@@ -1665,7 +1717,7 @@ FCB_PC144 .DB 012H ; SECTOR COUNT
|
||||
.IF (($ - MDB_PC144) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC144 .TEXT "1.44MB$"
|
||||
DTL_PC144 .TEXT "1.44MB DS/HD $"
|
||||
DTS_PC144 .TEXT "3.5\" 1.44MB - 18 SECTORS, 2 SIDES, 80 TRACKS, HIGH DENSITY$"
|
||||
;
|
||||
MDB_PC320 .DW DTL_PC320 ; ADDRESS OF MEDIA LABEL
|
||||
@@ -1688,7 +1740,7 @@ FCB_PC320 .DB 008H ; SECTOR COUNT
|
||||
.IF (($ - MDB_PC320) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC320 .TEXT "320KB $"
|
||||
DTL_PC320 .TEXT "320KB DS/DD $"
|
||||
DTS_PC320 .TEXT "5.25\" 320KB - 8 SECTORS, 2 SIDES, 40 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
MDB_PC360 .DW DTL_PC360 ; ADDRESS OF MEDIA LABEL
|
||||
@@ -1711,7 +1763,7 @@ FCB_PC360 .DB 009H ; SECTOR COUNT
|
||||
.IF (($ - MDB_PC360) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC360 .TEXT "360KB $"
|
||||
DTL_PC360 .TEXT "360KB DS/DD $"
|
||||
DTS_PC360 .TEXT "5.25\" 360KB - 9 SECTORS, 2 SIDES, 40 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
MDB_PC120 .DW DTL_PC120 ; ADDRESS OF MEDIA LABEL
|
||||
@@ -1734,7 +1786,7 @@ FCB_PC120 .DB 00FH ; SECTOR COUNT
|
||||
.IF (($ - MDB_PC120) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC120 .TEXT "1.2MB $"
|
||||
DTL_PC120 .TEXT "1.2MB DS/HD $"
|
||||
DTS_PC120 .TEXT "5.25\" 1.2MB - 15 SECTORS, 2 SIDES, 80 TRACKS, HIGH DENSITY$"
|
||||
;
|
||||
MDB_PC111 .DW DTL_PC111 ; ADDRESS OF MEDIA LABEL
|
||||
@@ -1757,9 +1809,101 @@ FCB_PC111 .DB 00FH ; SECTOR COUNT
|
||||
.IF (($ - MDB_PC111) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC111 .TEXT "1.11MB$"
|
||||
DTL_PC111 .TEXT "1.11MB DS/DD $"
|
||||
DTS_PC111 .TEXT "8\" 1.11MB - 15 SECTORS, 2 SIDES, 77 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
MDB_PC160 .DW DTL_PC160 ; ADDRESS OF MEDIA LABEL
|
||||
.DW DTS_PC160 ; ADDRESS OF MEDIA DESCRIPTION
|
||||
.DB 028H ; NUMBER OF CYLINDERS
|
||||
.DB 001H ; NUMBER OF HEADS
|
||||
.DB 008H ; NUMBER OF SECTORS
|
||||
.DB 001H ; START OF TRACK (ID OF FIRST SECTOR, USUALLY 1)
|
||||
FCB_PC160 .DB 008H ; SECTOR COUNT
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 02AH ; GAP LENGTH (R/W)
|
||||
.DB 050H ; GAP LENGTH (FORMAT)
|
||||
.DB (13 << 4) | 0 ; SRT = 6ms, HUT = 512ms
|
||||
.DB 4 ; HLT = 16ms
|
||||
.DB DORA_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORB_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORC_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORD_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DCR_BR250 ; CONTROL REGISTER VALUE
|
||||
.IF (($ - MDB_PC160) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC160 .TEXT "160KB SS/DD $"
|
||||
DTS_PC160 .TEXT "5.25\" 160KB - 8 SECTORS, 1 SIDE, 40 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
MDB_PC180 .DW DTL_PC180 ; ADDRESS OF MEDIA LABEL
|
||||
.DW DTS_PC180 ; ADDRESS OF MEDIA DESCRIPTION
|
||||
.DB 028H ; NUMBER OF CYLINDERS
|
||||
.DB 001H ; NUMBER OF HEADS
|
||||
.DB 009H ; NUMBER OF SECTORS
|
||||
.DB 001H ; START OF TRACK (ID OF FIRST SECTOR, USUALLY 1)
|
||||
FCB_PC180 .DB 009H ; SECTOR COUNT
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 02AH ; GAP LENGTH (R/W)
|
||||
.DB 050H ; GAP LENGTH (FORMAT)
|
||||
.DB (13 << 4) | 0 ; SRT = 6ms, HUT = 512ms
|
||||
.DB 4 ; HLT = 16ms
|
||||
.DB DORA_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORB_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORC_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORD_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DCR_BR250 ; CONTROL REGISTER VALUE
|
||||
.IF (($ - MDB_PC180) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC180 .TEXT "180KB SS/DD $"
|
||||
DTS_PC180 .TEXT "5.25\" 180KB - 9 SECTORS, 1 SIDE, 40 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
MDB_PC320SS .DW DTL_PC320SS ; ADDRESS OF MEDIA LABEL
|
||||
.DW DTS_PC320SS ; ADDRESS OF MEDIA DESCRIPTION
|
||||
.DB 050H ; NUMBER OF CYLINDERS
|
||||
.DB 001H ; NUMBER OF HEADS
|
||||
.DB 008H ; NUMBER OF SECTORS
|
||||
.DB 001H ; START OF TRACK (ID OF FIRST SECTOR, USUALLY 1)
|
||||
FCB_PC320SS .DB 008H ; SECTOR COUNT
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 02AH ; GAP LENGTH (R/W)
|
||||
.DB 050H ; GAP LENGTH (FORMAT)
|
||||
.DB (13 << 4) | 0 ; SRT = 6ms, HUT = 512ms
|
||||
.DB 4 ; HLT = 16ms
|
||||
.DB DORA_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORB_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORC_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORD_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DCR_BR250 ; CONTROL REGISTER VALUE
|
||||
.IF (($ - MDB_PC320SS) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC320SS .TEXT "320KB SS/DD $"
|
||||
DTS_PC320SS .TEXT "5.25\" 320KB - 8 SECTORS, 1 SIDE, 80 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
MDB_PC360SS .DW DTL_PC360SS ; ADDRESS OF MEDIA LABEL
|
||||
.DW DTS_PC360SS ; ADDRESS OF MEDIA DESCRIPTION
|
||||
.DB 050H ; NUMBER OF CYLINDERS
|
||||
.DB 001H ; NUMBER OF HEADS
|
||||
.DB 009H ; NUMBER OF SECTORS
|
||||
.DB 001H ; START OF TRACK (ID OF FIRST SECTOR, USUALLY 1)
|
||||
FCB_PC360SS .DB 009H ; SECTOR COUNT
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 02AH ; GAP LENGTH (R/W)
|
||||
.DB 050H ; GAP LENGTH (FORMAT)
|
||||
.DB (13 << 4) | 0 ; SRT = 6ms, HUT = 512ms
|
||||
.DB 4 ; HLT = 16ms
|
||||
.DB DORA_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORB_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORC_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DORD_BR250 ; OPERATIONS REGISTER VALUE
|
||||
.DB DCR_BR250 ; CONTROL REGISTER VALUE
|
||||
.IF (($ - MDB_PC360SS) != MDB_LEN)
|
||||
.ECHO "*** FCB SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
DTL_PC360SS .TEXT "360KB SS/DD $"
|
||||
DTS_PC360SS .TEXT "5.25\" 360KB - 9 SECTORS, 1 SIDE, 80 TRACKS, DOUBLE DENSITY$"
|
||||
;
|
||||
;===============================================================================
|
||||
; FLOPPY DISK CONTROL MENU (DIRECT MENU INTERFACE TO FDC & RELATED HARDWARE)
|
||||
;===============================================================================
|
||||
@@ -1877,7 +2021,7 @@ FM_DRAW0B: ; ZETA, DIO3
|
||||
LD A,(FST_DOR)
|
||||
AND 00000010B
|
||||
JR FM_DRAW1
|
||||
FM_DRAW0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO
|
||||
FM_DRAW0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
LD A,(FST_DOR)
|
||||
AND 11110000B
|
||||
JR FM_DRAW1
|
||||
@@ -2030,7 +2174,7 @@ FM_MOTOR0B: ; ZETA, DIO3
|
||||
LD A,(FST_DOR)
|
||||
AND 00000010B
|
||||
JR FM_MOTOR1
|
||||
FM_MOTOR0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO
|
||||
FM_MOTOR0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
LD A,(FST_DOR)
|
||||
AND 11110000B
|
||||
JR FM_MOTOR1
|
||||
@@ -2769,7 +2913,7 @@ FC_INIT1: ; DIO
|
||||
FC_INIT2: ; ZETA, DIO3
|
||||
LD A,(FCD_DORB)
|
||||
JR FC_INIT5
|
||||
FC_INIT3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO
|
||||
FC_INIT3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
LD A,(FCD_DORC)
|
||||
JR FC_INIT5
|
||||
FC_INIT4: ; WDSMC
|
||||
@@ -2813,7 +2957,7 @@ FC_RESETFDC1: ; ZETA, DIO3, RCSMC
|
||||
POP AF
|
||||
OUT (C),A
|
||||
JR FC_RESETFDC3
|
||||
FC_RESETFDC2: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO
|
||||
FC_RESETFDC2: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
LD A,0
|
||||
OUT (C),A
|
||||
LD A,(FST_DOR)
|
||||
@@ -2840,7 +2984,7 @@ FC_PULSETC:
|
||||
;RES 0,A
|
||||
;OUT (C),A
|
||||
;JR FC_PULSETC2
|
||||
;FC_PULSETC1: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO
|
||||
;FC_PULSETC1: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
;LD C,(IY+CFG_TC)
|
||||
;IN A,(C)
|
||||
;JR FC_PULSETC2
|
||||
@@ -2872,7 +3016,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
|
||||
FC_MOTORON3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
LD A,(HL) ; START WITH CURRENT DOR
|
||||
AND 11111100B ; GET RID OF ANY ACTIVE DS BITS
|
||||
@@ -2936,7 +3080,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
|
||||
FC_MOTOROFF3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
LD A,DORC_INIT
|
||||
LD (HL),A
|
||||
@@ -3806,7 +3950,7 @@ DORB_BR500 .EQU 10100000B ; 500KBPS
|
||||
;
|
||||
DORB_INIT .EQU DORB_BR250
|
||||
;
|
||||
; *** DIDE/N8/ZETA2/RCWDC/SMZ80/DYNO ***
|
||||
; *** DIDE/N8/ZETA2/RCWDC/SMZ80/DYNO/EPFDC/MBC ***
|
||||
;
|
||||
DORC_INIT .EQU 00001100B ; SOFT RESET INACTIVE, DMA ENABLED
|
||||
;
|
||||
@@ -1,6 +1,6 @@
|
||||
================================================================
|
||||
Floppy Disk Utility (FDU) v5.3 for RetroBrew Computers
|
||||
Disk IO / Zeta / Dual-IDE / N8 / RC2014 / SmallZ80 / Dyno
|
||||
Disk IO / Zeta / Dual-IDE / N8 / RCBus / SmallZ80 / Dyno
|
||||
================================================================
|
||||
|
||||
Updated January 5, 2020
|
||||
@@ -33,7 +33,7 @@ like to acknowledge that much was derived from the previous
|
||||
work of Andrew Lynch and Dan Werner. I also want to credit
|
||||
Sergio Gimenez with testing the 5.25" drive support and Jim
|
||||
Harre with testing the 8" drive support. Support for Zeta 2
|
||||
comes from Segey Kiselev. Thanks!
|
||||
comes from Sergey Kiselev. Thanks!
|
||||
|
||||
General Usage
|
||||
-------------
|
||||
@@ -74,10 +74,10 @@ supported:
|
||||
- Zeta 2
|
||||
- N8
|
||||
- Mark IV
|
||||
- RC2014 w/ SMC
|
||||
- RC2014 w/ WDC
|
||||
- RCBus
|
||||
- SmallZ80
|
||||
- Dyno
|
||||
- MBC
|
||||
|
||||
You must be using either a RomWBW or UBA based OS version.
|
||||
|
||||
@@ -89,14 +89,17 @@ 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
|
||||
|
||||
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
|
||||
@@ -144,20 +147,26 @@ P5 (bd ID): 1-2, 3-4 (for $20-$3F port range)
|
||||
There are no specific N8 jumper settings, but the default
|
||||
I/O range starting at $80 is assumed in the published code.
|
||||
|
||||
The RC2014 Scott Baker SMC-based floppy module should be jumpered
|
||||
The RCBus Scott Baker SMC-based floppy module should be jumpered
|
||||
for I/O base address 0x50 (SV1: 11-12), JP1 (TS) shorted,
|
||||
JP2 (/FAULT) shorted, JP3 (MINI): 2-3, JP4 (/DC/RDY): 2-3.
|
||||
|
||||
The RC2014 Scott Baker WDC-based floppy module should be jumpered
|
||||
The RCBus Scott Baker WDC-based floppy module should be jumpered
|
||||
for I/O base address 0x50 (SV1: 11-12), JP1 (/DACK): 1-2,
|
||||
JP2 (TC): 2-3.
|
||||
|
||||
The 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
|
||||
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.
|
||||
|
||||
Modes of Operation
|
||||
------------------
|
||||
|
||||
@@ -497,7 +506,7 @@ Improved polling version of read/write to fix occasional overrun errors.
|
||||
|
||||
WW 1/8/2018: v5.2
|
||||
|
||||
Added support for RC2014 hardware:
|
||||
Added support for RCBus hardware:
|
||||
- Scott Baker SMC 9266 FDC module
|
||||
- Scott Baker WDC 37C65 FDC module
|
||||
|
||||
@@ -510,5 +519,17 @@ WW 9/5/2018: v5.3
|
||||
operation.
|
||||
- Added support for SmallZ80
|
||||
|
||||
WW 5/1/2020: v5.4
|
||||
WW 1/5/2020: v5.4
|
||||
- Added support for Dyno (based on work by Steve Garcia)
|
||||
|
||||
WW 4/29/2020: v5.5
|
||||
- Added support for Etched Pixels FDC
|
||||
|
||||
WW 12/12/2020: v5.6
|
||||
- Updated SmallZ80 support for new I/O map
|
||||
|
||||
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
|
||||
@@ -1,14 +1,9 @@
|
||||
OBJECTS = SysGen.com Survey.com \
|
||||
SysCopy.com Assign.com Format.com Talk.com Mode.com RTC.com \
|
||||
Timer.com IntTest.com
|
||||
OTHERS = *.hex *.com
|
||||
SUBDIRS = XM FDU FAT Tune
|
||||
OBJECTS = sysgen.com syscopy.com assign.com format.com talk.com \
|
||||
mode.com rtc.com timer.com rtchb.com
|
||||
SUBDIRS = XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd Survey
|
||||
DEST = ../../Binary/Apps
|
||||
TOOLS =../../Tools
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
USETASM = 1
|
||||
|
||||
Survey.com: USETASM=0
|
||||
|
||||
|
||||
16
Source/Apps/Survey/Build.cmd
Normal file
16
Source/Apps/Survey/Build.cmd
Normal file
@@ -0,0 +1,16 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=..\..\..\Tools
|
||||
|
||||
set PATH=%TOOLS%\zxcc;%PATH%
|
||||
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
:: zxcc MAC survey.asm -$PO || exit /b
|
||||
:: zxcc MLOAD25 survey || exit /b
|
||||
|
||||
zxcc M80 -,=survey/L/R
|
||||
zxcc L80 -survey,survey/N/E
|
||||
|
||||
copy /Y survey.com ..\..\..\Binary\Apps\ || exit /b
|
||||
@@ -1,7 +1,8 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.hex del *.hex
|
||||
if exist *.rel del *.rel
|
||||
if exist *.prn del *.prn
|
||||
if exist *.lst del *.lst
|
||||
if exist *.err del *.err
|
||||
if exist *.rel del *.rel
|
||||
if exist *.com del *.com
|
||||
6
Source/Apps/Survey/Makefile
Normal file
6
Source/Apps/Survey/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
OBJECTS = survey.com
|
||||
DEST = ../../../Binary/Apps
|
||||
TOOLS = ../../../Tools
|
||||
OTHERS = *.hex
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
@@ -15,6 +15,17 @@
|
||||
;
|
||||
;VERSION LIST - Most recent version first.
|
||||
;
|
||||
;21/Mar/23 - Previous hack was worthless because it broke
|
||||
; the memory survey. Rehacked to use HBIOS to
|
||||
; detect if N8VEM SBC MPCL memory management is
|
||||
; in use and bypass MPCL ports if so. HBIOS check
|
||||
; should allow use in non-RomWBW systems again.
|
||||
; Wayne Warthen
|
||||
;
|
||||
;10/Feb/23 - Total hack to avoid crash on ECB SBC
|
||||
; RomWBW now required by this version
|
||||
; Wayne Warthen
|
||||
;
|
||||
;16/Dec/17 - Handle 16-bit port addressing using
|
||||
; Z80 IN A,(C) instruction. Wayne Warthen
|
||||
;
|
||||
@@ -234,7 +245,7 @@ TABS EQU 9 ; Tab columns
|
||||
; MAIN PROGRAM ;
|
||||
;***********************;
|
||||
;
|
||||
ORG 100H
|
||||
;ORG 100H
|
||||
;
|
||||
START:
|
||||
LXI H,0 ; Save stack pointer
|
||||
@@ -242,9 +253,39 @@ START:
|
||||
SHLD OLDSP
|
||||
LXI SP,FINIS+64
|
||||
CALL TYPE ; Type initial CRLF
|
||||
DB TAB,TAB,'*** System Survey (December 17) ***'
|
||||
DW CRLF,CRLF
|
||||
DB TAB,'*** RomWBW System Survey (Mar 2023) ***'
|
||||
DW CRLF,CRLFE
|
||||
;
|
||||
; Are we running an N8VEM SBC w/ MPCL on RomWBW???
|
||||
;
|
||||
.Z80
|
||||
XOR A ; assume not
|
||||
LD (ISMPCL),A ; save it
|
||||
|
||||
; Check for RomWBW (HBIOS)
|
||||
LD HL,(0FFFEH) ; HL := HBIOS ident location
|
||||
LD A,'W' ; First byte of ident
|
||||
CP (HL) ; Compare
|
||||
JR NZ,NOTMPCL ; Not HBIOS
|
||||
INC HL ; Next byte of ident
|
||||
LD A,NOT 'W' ; Second byte of ident
|
||||
CP (HL) ; Compare
|
||||
JR NZ,NOTMPCL ; Not HBIOS
|
||||
;
|
||||
LD B,0F1H ; HBIOS: VER function
|
||||
LD C,0 ; required reserved value
|
||||
RST 08 ; DE := version, L := platform id
|
||||
LD A,L ; Platform ID
|
||||
CP 01H ; SBC?
|
||||
JR NZ,NOTMPCL ; Not SBC
|
||||
LD A,0FFH ; Flag
|
||||
LD (ISMPCL),A ; Set flag
|
||||
;
|
||||
.8080
|
||||
;
|
||||
NOTMPCL:
|
||||
;
|
||||
;DISK SURVEY
|
||||
LXI H,8 ; Init drive counter
|
||||
MVI C,24 ; Get login vector
|
||||
@@ -426,20 +467,19 @@ MSURV:
|
||||
ENDM
|
||||
DB '|'
|
||||
DW CRLF
|
||||
db ' ' ; dmb 31-May-82
|
||||
DB 'T'+EOL
|
||||
DB 'TT','T'+EOL
|
||||
LXI H,RAM
|
||||
MVI M,LOW 1023 ; Init RAM counter
|
||||
MVI M,LOW 2047 ; Init RAM counter
|
||||
INX H
|
||||
MVI M,HIGH 1023
|
||||
MVI M,HIGH 2047
|
||||
MVI B,4 ; Clear ROM, EMP
|
||||
CLREG:
|
||||
INX H
|
||||
MVI M,0
|
||||
DCR B
|
||||
JNZ CLREG
|
||||
LXI H,1024 ; Init memory pointer
|
||||
MVI C,63 ; K to be checked
|
||||
LXI H,2048 ; Init memory pointer
|
||||
MVI C,62 ; K to be checked
|
||||
|
||||
;Start of analysis loop
|
||||
BEGANA:
|
||||
@@ -473,7 +513,7 @@ NOTEM:
|
||||
INXI ROM
|
||||
NEXT:
|
||||
INX H ; Index next byte
|
||||
DCX D ; Decrement K counter
|
||||
DCX D ; DEC DE; Decrement K counter
|
||||
XRA A
|
||||
ORA D
|
||||
ORA E
|
||||
@@ -526,8 +566,19 @@ NEXTK:
|
||||
; contents of first page
|
||||
call type
|
||||
db 'BIOS at',' '+eol
|
||||
hexout bios+2
|
||||
hexout bios+1
|
||||
;hexout bios+2
|
||||
;hexout bios+1
|
||||
.z80
|
||||
ld hl,(bios+1)
|
||||
ld de,-3
|
||||
add hl,de
|
||||
push hl
|
||||
ld a,h
|
||||
call hexprn
|
||||
pop hl
|
||||
ld a,l
|
||||
call hexprn
|
||||
.8080
|
||||
call type
|
||||
db tab,'iobyte',' '+eol
|
||||
hexout bios+3
|
||||
@@ -536,8 +587,19 @@ NEXTK:
|
||||
hexout bios+4
|
||||
call type
|
||||
db tab,'BDOS at',' '+eol
|
||||
hexout bdos+2
|
||||
hexout bdos+1
|
||||
;hexout bdos+2
|
||||
;hexout bdos+1
|
||||
.z80
|
||||
ld hl,(bdos+1)
|
||||
ld de,-6
|
||||
add hl,de
|
||||
push hl
|
||||
ld a,h
|
||||
call hexprn
|
||||
pop hl
|
||||
ld a,l
|
||||
call hexprn
|
||||
.8080
|
||||
call type
|
||||
dw crlf,crlfe
|
||||
;
|
||||
@@ -553,6 +615,8 @@ NEXTK:
|
||||
CALL TYPE
|
||||
DB ' Bytes ROM',TAB,TAB+EOL
|
||||
LHLD BDOS+1
|
||||
LXI D,-6
|
||||
DAD D
|
||||
CALL BINDEC
|
||||
CALL TYPE
|
||||
DB ' Bytes in TPA'
|
||||
@@ -586,6 +650,21 @@ PDLY:
|
||||
MOV A,H ; ON CONSOLE STATUS PORT
|
||||
ORA L
|
||||
JNZ PDLY
|
||||
;
|
||||
.Z80
|
||||
; Check for Z180 CPU
|
||||
xor a ; assume Z80
|
||||
ld (IS180),a ; save it
|
||||
ld de,0506H ; 5 x 6
|
||||
db 0EDH,05CH ; MLT DE: de = 30 if z180
|
||||
ld a,e ; result to A
|
||||
cp 30 ; check if multiply happened
|
||||
jr nz,z80 ; if invalid, then Z80
|
||||
or 0ffH ; flag value for Z180
|
||||
ld (IS180),a ; save it
|
||||
z80:
|
||||
.8080
|
||||
;
|
||||
LXI H,0 ; Init active port counter
|
||||
mvi d,0 ; Init port counter
|
||||
mvi e,0ffh ; init port group variable
|
||||
@@ -596,15 +675,83 @@ PORTLP:
|
||||
CPI SKIPORT
|
||||
JZ ISPORT ; Print mask port
|
||||
ENDIF
|
||||
;
|
||||
.Z80
|
||||
;
|
||||
ld a,(ISMPCL) ; MPCL?
|
||||
or a ; set flags
|
||||
jr z,PCONT ; if not, skip ahead
|
||||
ld a,d ; get port to test
|
||||
and 0F8H ; range of 8 ports
|
||||
cp 078H ; starting at 78H
|
||||
jr z,ISPORT ; if in range, assume real port
|
||||
;
|
||||
PCONT:
|
||||
|
||||
mov c,a ; port number to reg c
|
||||
mvi b,0 ; for 16 bit port addressing
|
||||
db 0edh,078h ; z80: in a,(c)
|
||||
; inactive port could return 0xFF or 0x78
|
||||
CPI 0FFH
|
||||
JZ NEXTPT
|
||||
cpi 078h
|
||||
jz nextpt
|
||||
di ; interrupts off
|
||||
ld a,(IS180) ; Z180?
|
||||
or a
|
||||
jr nz,rd180
|
||||
;
|
||||
; Z80 port read
|
||||
; Read port using IN A,(C), push result
|
||||
ld a,d
|
||||
ld c,a
|
||||
ld (pnum0a),a ; dynamic update
|
||||
ld (pnum0b),a ; dynamic update
|
||||
ld b,0
|
||||
in a,(c)
|
||||
push af
|
||||
; Read port using IN A,(port), push result
|
||||
in a,(0ffh) ; IN0
|
||||
pnum0a equ $-1
|
||||
push af
|
||||
; Read port using IN A,(port), push result
|
||||
in a,(0ffh) ; IN0
|
||||
pnum0b equ $-1
|
||||
push af
|
||||
jr rdz
|
||||
;
|
||||
rd180:
|
||||
; Z180 port read
|
||||
; Read port using IN A,(C), push result
|
||||
ld a,d
|
||||
ld c,a
|
||||
ld (pnum1a),a ; dynamic update
|
||||
ld (pnum1b),a ; dynamic update
|
||||
ld b,0
|
||||
in a,(c)
|
||||
push af
|
||||
; Read port using IN0 A,(port), push result
|
||||
db 0EDH,038H,0FFH ; IN0
|
||||
pnum1a equ $-1
|
||||
push af
|
||||
; Read port using IN0 A,(port), push result
|
||||
db 0EDH,038H,0FFH ; IN0
|
||||
pnum1b equ $-1
|
||||
push af
|
||||
;
|
||||
rdz:
|
||||
;
|
||||
ei ; interrupts back on now
|
||||
;
|
||||
; port is considered inactive if values read from different port
|
||||
; read mechanisms differ or if the value $FF is read consistently,
|
||||
; or if the value read is equal to the port number itself
|
||||
;
|
||||
pop bc ; second IN0 (port) value
|
||||
pop af ; first IN0 (port) valule
|
||||
cp b ; same?
|
||||
pop bc ; IN (C) value
|
||||
jr nz,ISPORT ; if no, active running ctr port
|
||||
cp b ; same?
|
||||
jr nz,NEXTPT ; if not, inactive port
|
||||
cp 0FFh ; pullup value???
|
||||
jr z,NEXTPT ; if so, consider not active
|
||||
cp d ; value same as port num???
|
||||
jr z,NEXTPT ; if so, consider not active
|
||||
;
|
||||
.8080
|
||||
ISPORT:
|
||||
mov a,d ; got a live one, probably
|
||||
ani 0f0h ; is port in same group as last ?
|
||||
@@ -706,7 +853,6 @@ BITSHF:
|
||||
JNZ BITSHF
|
||||
RET
|
||||
|
||||
|
||||
;***********************;
|
||||
; DATA STORAGE ;
|
||||
;***********************;
|
||||
@@ -720,6 +866,9 @@ RAMF: DS 1 ; RAM good flag
|
||||
EMPF: DS 1 ; Empty so far flag
|
||||
BLKSHF: DS 1 ; block shift factor
|
||||
MAXALL: DS 2 ; maximum block number
|
||||
IS180: DS 1 ; non-zero for Z180 CPU
|
||||
ISMPCL: DS 1 ; non-zero for N8VEM SBC MPCL
|
||||
FINIS EQU $ ; End of program
|
||||
;
|
||||
END
|
||||
|
||||
567
Source/Apps/Test/2piotst/2piotst.mac
Normal file
567
Source/Apps/Test/2piotst/2piotst.mac
Normal file
@@ -0,0 +1,567 @@
|
||||
; 24.9.2018 PMS (b1ackmai1er)
|
||||
; Modified version for ECB-ZILOG PERIPHERALS BOARD - TEST 2 PIO's
|
||||
; 01.11.2011 WKA
|
||||
; Assembler M80
|
||||
; ECB-4PIO
|
||||
; Testprogramm f<>r die I/O-Karte ECB-4PIO in Z80-Mnemonics
|
||||
|
||||
PAGE 72
|
||||
.Z80
|
||||
ASEG
|
||||
ORG 100H
|
||||
;
|
||||
;CP/M-ADDRESSES
|
||||
;* * * * * * *
|
||||
;
|
||||
BOOT EQU 0 ;WARMBOOT CP/M
|
||||
BDOS EQU 5 ;ENTRY BDOS
|
||||
NMI EQU 66H ;Error-ROUTINE
|
||||
;
|
||||
;CONSOLE-CODES
|
||||
;* * * * * * *
|
||||
;
|
||||
EOT EQU 4 ;END OF TEXT
|
||||
BS EQU 8 ;BACKSPACE
|
||||
TAB EQU 9 ;TABULATOR
|
||||
LF EQU 0AH ;LINE-FEED
|
||||
CR EQU 0DH ;CARRIAGE-RETURN
|
||||
FF EQU 0CH ;FORM-FEED
|
||||
ESC EQU 1BH ;ESCAPE
|
||||
CTRLC EQU 'C'-40H ;CONTROL-C
|
||||
CTRLW EQU 'W'-40H ;CONTROL-W
|
||||
CTRLX EQU 'X'-40H ;CONTROL-X
|
||||
CTRLY EQU 'Y'-40H ;CONTROL-Y
|
||||
CTRLZ EQU 'Z'-40H ;CONTROL-Z
|
||||
;
|
||||
BASE EQU 0B8H ; 4 DIL-SCHALTER
|
||||
;
|
||||
PIO0AD EQU BASE+0 ; PIO 0 A DATEN
|
||||
PIO0AC EQU BASE+2 ; PIO 0 A CONTROL
|
||||
PIO0BD EQU BASE+1 ; PIO 0 B DATEN
|
||||
PIO0BC EQU BASE+3 ; PIO 0 B CONTROL
|
||||
;
|
||||
PIO1AD EQU BASE+4 ; PIO 1 A DATEN
|
||||
PIO1AC EQU BASE+6 ; PIO 1 A CONTROL
|
||||
PIO1BD EQU BASE+5 ; PIO 1 B DATEN
|
||||
PIO1BC EQU BASE+7 ; PIO 1 B CONTROL
|
||||
;
|
||||
MAIN: LD DE,PIO_SRTMSG
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,INI_MSG
|
||||
CALL PSTRIN
|
||||
CALL INIT
|
||||
;
|
||||
LD DE,PIO0ADW ;PIO0 A
|
||||
CALL PSTRIN
|
||||
LD A,55H
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO0AD),A
|
||||
IN A,(PIO0AD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO0ADR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO0ADW
|
||||
CALL PSTRIN
|
||||
LD A,0AAH
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO0AD),A
|
||||
IN A,(PIO0AD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO0ADR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO0BDW ;PIO0 B
|
||||
CALL PSTRIN
|
||||
LD A,55H
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO0BD),A
|
||||
IN A,(PIO0BD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO0BDR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO0BDW
|
||||
CALL PSTRIN
|
||||
LD A,0AAH
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO0BD),A
|
||||
IN A,(PIO0BD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO0BDR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO1ADW ;PIO1 A
|
||||
CALL PSTRIN
|
||||
LD A,55H
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO1AD),A
|
||||
IN A,(PIO1AD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO1ADR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO1ADW
|
||||
CALL PSTRIN
|
||||
LD A,0AAH
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO1AD),A
|
||||
IN A,(PIO1AD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO1ADR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO1BDW ;PIO1 B
|
||||
CALL PSTRIN
|
||||
LD A,55H
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO1BD),A
|
||||
IN A,(PIO1BD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO1BDR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO1BDW
|
||||
CALL PSTRIN
|
||||
LD A,0AAH
|
||||
PUSH AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
OUT (PIO1BD),A
|
||||
IN A,(PIO1BD)
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,PIO1BDR
|
||||
CALL PSTRIN
|
||||
POP AF
|
||||
CALL OUTB
|
||||
LD DE,LINE_E
|
||||
CALL PSTRIN
|
||||
;
|
||||
LD DE,PIO_ENDMSG
|
||||
CALL PSTRIN
|
||||
JP BOOT
|
||||
;
|
||||
;==========================================================================
|
||||
INIT: LD HL,PIO0T ; PIO0 INITITALISIEREN
|
||||
CALL INITX
|
||||
LD HL,PIO1T ; PIO1 INITITALISIEREN
|
||||
CALL INITX
|
||||
RET
|
||||
;
|
||||
INITX: LD A,(HL) ; BYTE-ANZAHL
|
||||
OR A
|
||||
RET Z
|
||||
LD B,A ; Port-Adresse nach C
|
||||
INC HL
|
||||
LD C,(HL)
|
||||
INC HL
|
||||
OTIR
|
||||
JR INITX
|
||||
;
|
||||
PIO0T: DEFB 05 ; 5 BYTE ZUM PIO 0 A CONTROL
|
||||
DEFB PIO0AC
|
||||
DEFB 00000011B ; DIS-INT
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
|
||||
DEFB 00000000B ; ALLES AUSG.
|
||||
DEFB 01 ; 1 BYTE ZUM PIO 0 A DATEN
|
||||
DEFB PIO0AD
|
||||
DEFB 00000000B ; DATEN "LOW"
|
||||
;
|
||||
DEFB 05 ; 5 BYTE ZUM PIO 0 B CONTROL
|
||||
DEFB PIO0BC
|
||||
DEFB 00000011B ; DIS-INT
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
|
||||
DEFB 00000000B ; ALLES AUSG.
|
||||
DEFB 01 ; 1 BYTE ZUM PIO 0 B DATEN
|
||||
DEFB PIO0BD
|
||||
DEFB 00000000B ; DATEN "LOW"
|
||||
DEFB 0 ; ENDE PIO 0 B -TABELLE
|
||||
;
|
||||
PIO1T: DEFB 05 ; 5 BYTE ZUM PIO 1 A CONTROL
|
||||
DEFB PIO1AC
|
||||
DEFB 00000011B ; DIS-INT
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
|
||||
DEFB 00000000B ; ALLES AUSG.
|
||||
DEFB 01 ; 1 BYTE ZUM PIO 1 A DATEN
|
||||
DEFB PIO1AD
|
||||
DEFB 00000000B ; DATEN "LOW"
|
||||
;
|
||||
DEFB 05 ; 5 BYTE ZUM PIO 1 B CONTROL
|
||||
DEFB PIO1BC
|
||||
DEFB 00000011B ; DIS-INT
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 01001111B ; BETR.ART BYTE EINGABE
|
||||
DEFB 11001111B ; BETR.ART BIT EIN/AUSG.
|
||||
DEFB 00000000B ; ALLES AUSG.
|
||||
DEFB 01 ; 1 BYTE ZUM PIO 1 B DATEN
|
||||
DEFB PIO1BD
|
||||
DEFB 00000000B ; DATEN "LOW"
|
||||
DEFB 0 ; ENDE PIO 1 B -TABELLE
|
||||
;
|
||||
;==========================================================================
|
||||
;
|
||||
;Output on Screen
|
||||
;****************
|
||||
;
|
||||
PRBS: LD E,BS
|
||||
CALL PCHAR
|
||||
RET
|
||||
;
|
||||
;Output CR+LF on Screen
|
||||
;**********************
|
||||
;
|
||||
CRLF: LD E,CR
|
||||
CALL PCHAR
|
||||
LD E,LF
|
||||
CALL PCHAR
|
||||
RET
|
||||
;
|
||||
;Output ASCII-Character
|
||||
;**********************
|
||||
;
|
||||
PRINP: PUSH AF
|
||||
LD E,A
|
||||
CALL PCHAR
|
||||
POP AF
|
||||
RET;
|
||||
;
|
||||
;CALL BDOS with Register Save
|
||||
;****************************
|
||||
;
|
||||
INCHA: LD C,1 ;INPUT CHARACTER TO A
|
||||
JR BDO
|
||||
PCHAR: LD C,2 ;PRINT CHARACTER IN E
|
||||
JR BDO
|
||||
PSTRIN: LD C,9 ;PRINT STRING
|
||||
JR BDO
|
||||
INBUFF: LD C,10 ;READ CONSOLE-BUFFER
|
||||
JR BDO
|
||||
CSTS: LD C,11 ;CONSOLE-STATUS
|
||||
JR BDO
|
||||
OPEN: LD C,15 ;OPEN FILE
|
||||
JR BDO
|
||||
CLOSE: LD C,16 ;CLOSE FILE
|
||||
JR BDO
|
||||
DELETE: LD C,19 ;DELETE FILE
|
||||
JR BDO
|
||||
READS: LD C,20 ;READ SEEK
|
||||
JR BDO
|
||||
WRITES: LD C,21 ;WRITE SEEK
|
||||
JR BDO
|
||||
MAKE: LD C,22 ;MAKE FILE
|
||||
JR BDO
|
||||
SETDMA: LD C,26 ;SET DMA-ADDRESS
|
||||
BDO: PUSH HL
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
PUSH IX
|
||||
PUSH IY
|
||||
CALL BDOS
|
||||
POP IY
|
||||
POP IX
|
||||
POP BC
|
||||
POP DE
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
;DIRECT CONSOLE INPUT
|
||||
;********************
|
||||
;
|
||||
INDCON: CALL INDCOX
|
||||
CP 0
|
||||
JR Z,INDCON
|
||||
RET
|
||||
;
|
||||
INDCOX: LD C,6 ;Code for Direct Console Input
|
||||
LD E,0FFH ;Code for Input
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
PUSH IX
|
||||
PUSH IY
|
||||
CALL BDOS
|
||||
POP IY
|
||||
POP IX
|
||||
POP BC
|
||||
POP DE
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
;
|
||||
;Output WORD
|
||||
;***********
|
||||
;
|
||||
;PARAMETER: Entry WORD IN HL
|
||||
;*********
|
||||
;
|
||||
OUTW: LD A,H
|
||||
CALL OUTB
|
||||
LD A,L
|
||||
CALL OUTB
|
||||
RET
|
||||
;
|
||||
;Output BYTE
|
||||
;***********
|
||||
;
|
||||
;PARAMETER: Entry BYTE IN A
|
||||
;*********
|
||||
;
|
||||
OUTB: PUSH AF
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND 0FH
|
||||
CALL HBTHE ;Change Half-BYTE
|
||||
POP AF
|
||||
AND 0FH
|
||||
CALL HBTHE
|
||||
RET
|
||||
;
|
||||
;Output HALF-BYTE
|
||||
;****************
|
||||
;
|
||||
;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3)
|
||||
;*********
|
||||
;
|
||||
HBTHE: CP 0AH
|
||||
JR C,HBTHE1
|
||||
ADD A,7 ;Character to Letter
|
||||
HBTHE1: ADD A,30H
|
||||
LD E,A
|
||||
CALL PCHAR
|
||||
RET
|
||||
;
|
||||
;Input ADDRESS
|
||||
;*************
|
||||
;
|
||||
;PARAMETER: Exit with ADDRESS IN HL
|
||||
;*********
|
||||
;
|
||||
INADR: LD HL,0
|
||||
INADR1: CALL INCHAR ;Input TETRADE
|
||||
LD D,A
|
||||
CALL INBYT1 ;IN HEXA
|
||||
RET C ;END OF Input
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
OR L
|
||||
LD L,A
|
||||
JR INADR1 ;New Key
|
||||
;
|
||||
;
|
||||
;Input BYTE
|
||||
;**********
|
||||
;
|
||||
;PARAMTER: Exit with BYTE IN A
|
||||
;********
|
||||
;
|
||||
INBYT: CALL INADR
|
||||
LD A,L
|
||||
RET
|
||||
;
|
||||
;Input of one TETRADE to A (BIT 0-3)
|
||||
;************************************
|
||||
;
|
||||
INBYT1: SUB '0'
|
||||
RET C
|
||||
CP 'G'-30H
|
||||
JR NC,INBYT3 ;Error
|
||||
CP ':'-30H
|
||||
JR C,INBYT2
|
||||
CP 'A'-30H
|
||||
JR C,INBYT3 ;Error
|
||||
SUB 7
|
||||
INBYT2: OR A
|
||||
RET
|
||||
;
|
||||
INBYT3: SCF
|
||||
RET
|
||||
;
|
||||
;Input ASCII-Character to A
|
||||
;**************************
|
||||
;
|
||||
INCON: CALL INDCON ;Input ASCII-Character to A
|
||||
CP CTRLC ;TEST CONTROL-C
|
||||
JP Z,QUIT
|
||||
CP CTRLX ;TEST CONTROL-X
|
||||
JR Z,INCHA1
|
||||
CP CTRLW ;TEST CONTROL-W
|
||||
JR Z,INCHA3
|
||||
CP CTRLY ;TEST CONTROL-Y
|
||||
JR Z,INCHA2
|
||||
CP BS
|
||||
RET Z
|
||||
CP CR
|
||||
RET Z
|
||||
CP ' '
|
||||
JR C,INCON
|
||||
JR INCH1
|
||||
;
|
||||
INCHAR: CALL INCHA ;Input ASCII-Character to A
|
||||
CP CTRLC ;TEST CONTROL-C
|
||||
JR Z,QUIT
|
||||
CP CTRLX ;TEST CONTROL-X
|
||||
JR Z,INCHA1
|
||||
CP CTRLW ;TEST CONTROL-W
|
||||
JR Z,INCHA3
|
||||
CP CTRLY ;TEST CONTROL-Y
|
||||
JR Z,INCHA2
|
||||
CP BS
|
||||
RET Z
|
||||
CP CR
|
||||
RET Z
|
||||
CP ' '
|
||||
JR C,INCHAR ;Input invalied
|
||||
;
|
||||
INCH1: CP 'A'
|
||||
RET C ;Character ok
|
||||
;
|
||||
RES 5,A ;lower case -> upper case
|
||||
RET
|
||||
INCHA1: POP HL
|
||||
LD E,FF
|
||||
CALL PCHAR ;Clear screen
|
||||
JP GOON
|
||||
INCHA2: POP HL
|
||||
LD E,FF
|
||||
CALL PCHAR ;Clear screen
|
||||
JP GOON
|
||||
INCHA3: LD E,FF
|
||||
CALL PCHAR
|
||||
RET
|
||||
;
|
||||
;ABBRUCH DER BEARBEITUNG
|
||||
;***********************
|
||||
;
|
||||
COMPLT: LD DE,TCOMP
|
||||
CALL PSTRIN
|
||||
JP GOON
|
||||
QUIT: CALL CRLF
|
||||
LD DE,TQUIT
|
||||
JR FINIS
|
||||
INTTIM: POP DE ;STACK OK
|
||||
; CALL DESAK
|
||||
LD DE,TNMIAB
|
||||
CALL PSTRIN
|
||||
LD DE,MAIN ;NEW ADDRESS
|
||||
PUSH DE
|
||||
RETN
|
||||
FINIS: CALL PSTRIN ;AT BDOS-ERROR
|
||||
GOON:
|
||||
JP BOOT
|
||||
;
|
||||
;
|
||||
;TEXT-Messages
|
||||
;*************
|
||||
;
|
||||
TCOMP: DEFB ESC,21,0,14H,ESC,23,0
|
||||
DEFM 'Function complete !!$'
|
||||
TQUIT: DEFB ESC,23,0,14H,7
|
||||
DEFM 'End Run RAMFTEST$'
|
||||
TNMIAB: DEFB ESC,23,0,14H
|
||||
DEFM 'Time Out !!$'
|
||||
;
|
||||
;
|
||||
INI_MSG:DEFM 'ECB-4PIO Init all PIO Bit-Mode ',CR,LF,'$'
|
||||
PIO0ADW:DEFM 'ECB-4PIO Write to PIO0AD ','$'
|
||||
PIO0ADR:DEFM 'ECB-4PIO Read from PIO0AD ','$'
|
||||
PIO0BDW:DEFM 'ECB-4PIO Write to PIO0BD ','$'
|
||||
PIO0BDR:DEFM 'ECB-4PIO Read from PIO0BD ','$'
|
||||
PIO1ADW:DEFM 'ECB-4PIO Write to PIO1AD ','$'
|
||||
PIO1ADR:DEFM 'ECB-4PIO Read from PIO1AD ','$'
|
||||
PIO1BDW:DEFM 'ECB-4PIO Write to PIO1BD ','$'
|
||||
PIO1BDR:DEFM 'ECB-4PIO Read from PIO1BD ','$'
|
||||
|
||||
PIO_SRTMSG:
|
||||
DEFM 'ECB-ZILOG PERIPHERALS start test 1.0',CR,LF,'$'
|
||||
PIO_ENDMSG:
|
||||
DEFM 'ECB-ZILOG PERIPHERALS end test 1.0',CR,LF,'$'
|
||||
LINE_E: DEFM 'H',CR,LF,'$'
|
||||
;
|
||||
IF1
|
||||
.PRINTX 'Pass 1 complete'
|
||||
ENDIF
|
||||
;
|
||||
IF2
|
||||
.PRINTX 'Pass 2 complete'
|
||||
.PRINTX 'Assembly complete'
|
||||
ENDIF
|
||||
;
|
||||
END
|
||||
|
||||
13
Source/Apps/Test/2piotst/Build.cmd
Normal file
13
Source/Apps/Test/2piotst/Build.cmd
Normal file
@@ -0,0 +1,13 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=..\..\..\..\Tools
|
||||
|
||||
set PATH=%TOOLS%\zxcc;%PATH%
|
||||
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
zxcc M80 -=2piotst/l || exit /b
|
||||
zxcc L80 -2piotst,2piotst.com/n/e || exit /b
|
||||
|
||||
copy /Y 2piotst.com ..\..\..\..\Binary\Apps\Test\ || exit /b
|
||||
@@ -1,7 +1,8 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.prn del *.prn
|
||||
if exist *.com del *.com
|
||||
if exist *.lst del *.lst
|
||||
if exist *.err del *.err
|
||||
if exist *.bin del *.bin
|
||||
if exist *.rel del *.rel
|
||||
if exist *.prn del *.prn
|
||||
8
Source/Apps/Test/2piotst/Makefile
Normal file
8
Source/Apps/Test/2piotst/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
OBJECTS = 2piotst.com
|
||||
DEST = ../../../../Binary/Apps/Test
|
||||
TOOLS =../../../../Tools
|
||||
OTHERS = *.rel
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
2piotst.com : 2piotst.rel
|
||||
40
Source/Apps/Test/Build.cmd
Normal file
40
Source/Apps/Test/Build.cmd
Normal file
@@ -0,0 +1,40 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=../../../Tools
|
||||
set APPBIN=..\..\Binary\Apps
|
||||
|
||||
set PATH=%TOOLS%\tasm32;%TOOLS%\zxcc;%PATH%
|
||||
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
pushd DMAmon && call Build || exit /b & popd
|
||||
pushd tstdskng && call Build || exit /b & popd
|
||||
pushd inttest && call Build || exit /b & popd
|
||||
pushd ppidetst && call Build || exit /b & popd
|
||||
pushd ramtest && call Build || exit /b & popd
|
||||
pushd I2C && call Build || exit /b & popd
|
||||
pushd rzsz && call Build || exit /b & popd
|
||||
pushd vdctest && call Build || exit /b & popd
|
||||
pushd kbdtest && call Build || exit /b & popd
|
||||
pushd ps2info && call Build || exit /b & popd
|
||||
pushd 2piotst && call Build || exit /b & popd
|
||||
pushd piomon && call Build || exit /b & popd
|
||||
pushd banktest && call Build || exit /b & popd
|
||||
pushd portscan && call Build || exit /b & popd
|
||||
|
||||
goto :eof
|
||||
|
||||
:asm
|
||||
echo.
|
||||
echo Building %1...
|
||||
tasm -t80 -g3 -fFF %1.asm %1.com %1.lst || exit /b
|
||||
goto :eof
|
||||
|
||||
:asm180
|
||||
echo.
|
||||
echo Building %1...
|
||||
tasm -t180 -g3 -fFF %1.asm %1.com %1.lst || exit /b
|
||||
goto :eof
|
||||
23
Source/Apps/Test/Clean.cmd
Normal file
23
Source/Apps/Test/Clean.cmd
Normal file
@@ -0,0 +1,23 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.bin del *.bin
|
||||
if exist *.com del *.com
|
||||
if exist *.lst del *.lst
|
||||
if exist *.hex del *.hex
|
||||
if exist *.prn del *.prn
|
||||
|
||||
pushd DMAmon && call Clean || exit /b 1 & popd
|
||||
pushd tstdskng && call Clean || exit /b 1 & popd
|
||||
pushd inttest && call Clean || exit /b 1 & popd
|
||||
pushd ppidetst && call Clean || exit /b 1 & popd
|
||||
pushd ramtest && call Clean || exit /b 1 & popd
|
||||
pushd I2C && call Clean || exit /b 1 & popd
|
||||
pushd rzsz && call Clean || exit /b 1 & popd
|
||||
pushd vdctest && call Clean || exit /b 1 & popd
|
||||
pushd kbdtest && call Clean || exit /b 1 & popd
|
||||
pushd ps2info && call Clean || exit /b 1 & popd
|
||||
pushd 2piotst && call Clean || exit /b 1 & popd
|
||||
pushd piomon && call Clean || exit /b 1 & popd
|
||||
pushd banktest && call Clean || exit /b 1 & popd
|
||||
pushd portscan && call Clean || exit /b 1 & popd
|
||||
11
Source/Apps/Test/DMAmon/Build.cmd
Normal file
11
Source/Apps/Test/DMAmon/Build.cmd
Normal file
@@ -0,0 +1,11 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=../../../../Tools
|
||||
set PATH=%TOOLS%\tasm32;%PATH%
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
tasm -t180 -g3 -fFF dmamon.asm dmamon.com dmamon.lst || exit /b
|
||||
|
||||
copy /Y dmamon.com ..\..\..\..\Binary\Apps\Test\ || exit /b
|
||||
|
||||
6
Source/Apps/Test/DMAmon/Clean.cmd
Normal file
6
Source/Apps/Test/DMAmon/Clean.cmd
Normal file
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.com del *.com
|
||||
if exist *.lst del *.lst
|
||||
if exist *.bin del *.bin
|
||||
7
Source/Apps/Test/DMAmon/Makefile
Normal file
7
Source/Apps/Test/DMAmon/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
OBJECTS = dmamon.com
|
||||
DEST = ../../../../Binary/Apps/Test
|
||||
TOOLS =../../../../Tools
|
||||
|
||||
USETASM=1
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
8
Source/Apps/Test/DMAmon/Readme.txt
Normal file
8
Source/Apps/Test/DMAmon/Readme.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
DMAmon is a program to verify operation of the Z80 MBC DMA board
|
||||
|
||||
Version 2 has been hacked to include testing for interrupts. This
|
||||
requires running the application under RomWBW using IM2. There
|
||||
is an equate in the source file to disable interrupt testing
|
||||
if needed.
|
||||
|
||||
--WBW 10:36 AM 3/14/2022
|
||||
1220
Source/Apps/Test/DMAmon/dmamon.asm
Normal file
1220
Source/Apps/Test/DMAmon/dmamon.asm
Normal file
File diff suppressed because it is too large
Load Diff
969
Source/Apps/Test/DMAmon/util.asm
Normal file
969
Source/Apps/Test/DMAmon/util.asm
Normal file
@@ -0,0 +1,969 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; UTILITY FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
;
|
||||
CHR_BEL .EQU 07H
|
||||
CHR_CR .EQU 0DH
|
||||
CHR_LF .EQU 0AH
|
||||
CHR_BS .EQU 08H
|
||||
CHR_ESC .EQU 1BH
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; UTILITY PROCS TO PRINT SINGLE CHARACTERS WITHOUT TRASHING ANY REGISTERS
|
||||
;
|
||||
PC_SPACE:
|
||||
PUSH AF
|
||||
LD A,' '
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_PERIOD:
|
||||
PUSH AF
|
||||
LD A,'.'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_COLON:
|
||||
PUSH AF
|
||||
LD A,':'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_COMMA:
|
||||
PUSH AF
|
||||
LD A,','
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LBKT:
|
||||
PUSH AF
|
||||
LD A,'['
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_RBKT:
|
||||
PUSH AF
|
||||
LD A,']'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LT:
|
||||
PUSH AF
|
||||
LD A,'<'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_GT:
|
||||
PUSH AF
|
||||
LD A,'>'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LPAREN:
|
||||
PUSH AF
|
||||
LD A,'('
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_RPAREN:
|
||||
PUSH AF
|
||||
LD A,')'
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_ASTERISK:
|
||||
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
|
||||
;
|
||||
; PRINT A CHARACTER REFERENCED BY POINTER AT TOP OF STACK
|
||||
; USAGE:
|
||||
; CALL PRTCH
|
||||
; .DB 'X'
|
||||
;
|
||||
PRTCH:
|
||||
EX (SP),HL
|
||||
PUSH AF
|
||||
LD A,(HL)
|
||||
CALL COUT
|
||||
POP AF
|
||||
INC HL
|
||||
EX (SP),HL
|
||||
RET
|
||||
;
|
||||
; PRINT A STRING AT ADDRESS SPECIFIED IN HL
|
||||
; STRING MUST BE TERMINATED BY '$'
|
||||
; USAGE:
|
||||
; LD HL,MYSTR
|
||||
; CALL PRTSTR
|
||||
; ...
|
||||
; MYSTR: .DB "HELLO$"
|
||||
;
|
||||
PRTSTR:
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
CP '$'
|
||||
RET Z
|
||||
CALL COUT
|
||||
JR PRTSTR
|
||||
;
|
||||
; PRINT A STRING DIRECT: REFERENCED BY POINTER AT TOP OF STACK
|
||||
; STRING MUST BE TERMINATED BY '$'
|
||||
; USAGE:
|
||||
; CALL PRTSTRD
|
||||
; .DB "HELLO$"
|
||||
; ...
|
||||
;
|
||||
PRTSTRD:
|
||||
EX (SP),HL
|
||||
PUSH AF
|
||||
CALL PRTSTR
|
||||
POP AF
|
||||
EX (SP),HL
|
||||
RET
|
||||
;
|
||||
; PRINT A STRING INDIRECT: REFERENCED BY INDIRECT POINTER AT TOP OF STACK
|
||||
; STRING MUST BE TERMINATED BY '$'
|
||||
; USAGE:
|
||||
; CALL PRTSTRI(MYSTRING)
|
||||
; MYSTRING .DB "HELLO$"
|
||||
;
|
||||
PRTSTRI:
|
||||
EX (SP),HL
|
||||
PUSH AF
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
PUSH HL
|
||||
LD H,(HL)
|
||||
LD L,A
|
||||
CALL PRTSTR
|
||||
POP HL
|
||||
INC HL
|
||||
POP AF
|
||||
EX (SP),HL
|
||||
RET
|
||||
;
|
||||
; PRINT THE HEX BYTE VALUE IN A
|
||||
;
|
||||
PRTHEXBYTE:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
CALL HEXASCII
|
||||
LD A,D
|
||||
CALL COUT
|
||||
LD A,E
|
||||
CALL COUT
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT THE HEX WORD VALUE IN BC
|
||||
;
|
||||
PRTHEXWORD:
|
||||
PUSH AF
|
||||
LD A,B
|
||||
CALL PRTHEXBYTE
|
||||
LD A,C
|
||||
CALL PRTHEXBYTE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT THE HEX WORD VALUE IN HL
|
||||
;
|
||||
PRTHEXWORDHL:
|
||||
PUSH AF
|
||||
LD A,H
|
||||
CALL PRTHEXBYTE
|
||||
LD A,L
|
||||
CALL PRTHEXBYTE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; PRINT THE HEX DWORD VALUE IN DE:HL
|
||||
;
|
||||
PRTHEX32:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
PUSH HL
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE
|
||||
;
|
||||
HEXASCII:
|
||||
LD D,A
|
||||
CALL HEXCONV
|
||||
LD E,A
|
||||
LD A,D
|
||||
RLCA
|
||||
RLCA
|
||||
RLCA
|
||||
RLCA
|
||||
CALL HEXCONV
|
||||
LD D,A
|
||||
RET
|
||||
;
|
||||
; CONVERT LOW NIBBLE OF A TO ASCII HEX
|
||||
;
|
||||
HEXCONV:
|
||||
AND 0FH ;LOW NIBBLE ONLY
|
||||
ADD A,90H
|
||||
DAA
|
||||
ADC A,40H
|
||||
DAA
|
||||
RET
|
||||
;
|
||||
; PRINT A BYTE BUFFER IN HEX POINTED TO BY DE
|
||||
; REGISTER A HAS SIZE OF BUFFER
|
||||
;
|
||||
PRTHEXBUF:
|
||||
OR A
|
||||
RET Z ; EMPTY BUFFER
|
||||
;
|
||||
LD B,A
|
||||
PRTHEXBUF1:
|
||||
CALL PC_SPACE
|
||||
LD A,(DE)
|
||||
CALL PRTHEXBYTE
|
||||
INC DE
|
||||
DJNZ PRTHEXBUF1
|
||||
RET
|
||||
;
|
||||
; PRINT A BLOCK OF MEMORY NICELY FORMATTED
|
||||
; DE=BUFFER ADDRESS
|
||||
;
|
||||
DUMP_BUFFER:
|
||||
CALL NEWLINE
|
||||
|
||||
PUSH DE
|
||||
POP HL
|
||||
INC D
|
||||
INC D
|
||||
|
||||
DB_BLKRD:
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
POP BC
|
||||
CALL PRTHEXWORD ; PRINT START LOCATION
|
||||
POP BC
|
||||
CALL PC_SPACE ;
|
||||
LD C,16 ; SET FOR 16 LOCS
|
||||
PUSH HL ; SAVE STARTING HL
|
||||
DB_NXTONE:
|
||||
LD A,(HL) ; GET BYTE
|
||||
CALL PRTHEXBYTE ; PRINT IT
|
||||
CALL PC_SPACE ;
|
||||
DB_UPDH:
|
||||
INC HL ; POINT NEXT
|
||||
DEC C ; DEC. LOC COUNT
|
||||
JR NZ,DB_NXTONE ; IF LINE NOT DONE
|
||||
; NOW PRINT 'DECODED' DATA TO RIGHT OF DUMP
|
||||
DB_PCRLF:
|
||||
CALL PC_SPACE ; SPACE IT
|
||||
LD C,16 ; SET FOR 16 CHARS
|
||||
POP HL ; GET BACK START
|
||||
DB_PCRLF0:
|
||||
LD A,(HL) ; GET BYTE
|
||||
AND 060H ; SEE IF A 'DOT'
|
||||
LD A,(HL) ; O.K. TO GET
|
||||
JR NZ,DB_PDOT ;
|
||||
DB_DOT:
|
||||
LD A,2EH ; LOAD A DOT
|
||||
DB_PDOT:
|
||||
CALL COUT ; PRINT IT
|
||||
INC HL ;
|
||||
LD A,D ;
|
||||
CP H ;
|
||||
JR NZ,DB_UPDH1 ;
|
||||
LD A,E ;
|
||||
CP L ;
|
||||
JP Z,DB_END ;
|
||||
DB_UPDH1:
|
||||
; IF BLOCK NOT DUMPED, DO NEXT CHARACTER OR LINE
|
||||
DEC C ; DEC. CHAR COUNT
|
||||
JR NZ,DB_PCRLF0 ; DO NEXT
|
||||
DB_CONTD:
|
||||
CALL NEWLINE ;
|
||||
JP DB_BLKRD ;
|
||||
|
||||
DB_END:
|
||||
RET
|
||||
;
|
||||
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $
|
||||
; C REGISTER CONTAINS THE INDEX TO THE STRING TO BE DISPLAYED.
|
||||
; A REGISTER CONTAINS A MASK TO BE APPLIED TO THE INDEX
|
||||
; THE INDEX IS NORMALIZED TO A RANGE 0..N USING THE MASK AND THEN THE nTH
|
||||
; STRING IS PRINTED IN A LIST DEFINED BY DE
|
||||
;
|
||||
; C = ATTRIBUTE
|
||||
; A = MASK
|
||||
; DE = STRING LIST
|
||||
;
|
||||
PRTIDXMSK:
|
||||
PUSH BC
|
||||
PRTIDXMSK0:
|
||||
BIT 0,A
|
||||
JR NZ,PRTIDXMSK1
|
||||
SRL A
|
||||
SRL C
|
||||
JR PRTIDXMSK0
|
||||
PRTIDXMSK1:
|
||||
LD B,A
|
||||
LD A,C
|
||||
AND B
|
||||
POP BC
|
||||
;
|
||||
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $
|
||||
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
|
||||
; TO THE START OF THE STRING LIST.
|
||||
;
|
||||
; SLOW BUT IMPROVES CODE SIZE, READABILITY AND ELIMINATES THE NEED HAVE
|
||||
; LIST OF POINTERS OR A LIST OF CONDITIONAL CHECKS.
|
||||
;
|
||||
PRTIDXDEA:
|
||||
PUSH BC
|
||||
LD C,A ; INDEX COUNT
|
||||
OR A
|
||||
LD A,0
|
||||
LD (PRTIDXCNT),A ; RESET CHARACTER COUNT
|
||||
PRTIDXDEA1:
|
||||
JR Z,PRTIDXDEA3
|
||||
PRTIDXDEA2:
|
||||
LD A,(DE) ; LOOP UNIT
|
||||
INC DE ; WE REACH
|
||||
CP '$' ; END OF STRING
|
||||
JR NZ,PRTIDXDEA2
|
||||
DEC C ; AT STRING END. SO GO
|
||||
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
|
||||
PRTIDXDEA3:
|
||||
POP BC
|
||||
; CALL WRITESTR ; FALL THROUGH TO WRITESTR
|
||||
; RET
|
||||
;
|
||||
; OUTPUT A '$' TERMINATED STRING AT DE
|
||||
;
|
||||
WRITESTR:
|
||||
PUSH AF
|
||||
WRITESTR1:
|
||||
LD A,(DE)
|
||||
CP '$' ; TEST FOR STRING TERMINATOR
|
||||
JP Z,WRITESTR2
|
||||
CALL COUT
|
||||
LD A,(PRTIDXCNT)
|
||||
INC A
|
||||
LD (PRTIDXCNT),A
|
||||
INC DE
|
||||
JP WRITESTR1
|
||||
WRITESTR2:
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
PRTIDXCNT:
|
||||
.DB 0 ; CHARACTER COUNT
|
||||
;
|
||||
;
|
||||
;
|
||||
TSTPT:
|
||||
PUSH DE
|
||||
LD DE,STR_TSTPT
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
JR REGDMP ; DUMP REGISTERS AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
REGDMP:
|
||||
CALL XREGDMP
|
||||
RET
|
||||
;
|
||||
XREGDMP:
|
||||
EX (SP),HL ; RET ADR TO HL, SAVE HL ON TOS
|
||||
LD (REGDMP_RET),HL ; SAVE RETURN ADDRESS
|
||||
POP HL ; RESTORE HL AND BURN STACK ENTRY
|
||||
|
||||
EX (SP),HL ; PC TO HL, SAVE HL ON TOS
|
||||
LD (REGDMP_PC),HL ; SAVE PC VALUE
|
||||
EX (SP),HL ; BACK THE WAY IT WAS
|
||||
|
||||
LD (REGDMP_SP),SP ; SAVE STACK POINTER
|
||||
|
||||
;LD (RD_STKSAV),SP ; SAVE ORIGINAL STACK POINTER
|
||||
;LD SP,RD_STACK ; SWITCH TO PRIVATE STACK
|
||||
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
|
||||
PUSH AF
|
||||
LD A,'@'
|
||||
CALL COUT
|
||||
POP AF
|
||||
|
||||
PUSH BC
|
||||
LD BC,(REGDMP_PC)
|
||||
CALL PRTHEXWORD ; PC
|
||||
POP BC
|
||||
CALL PC_LBKT
|
||||
PUSH BC
|
||||
PUSH AF
|
||||
POP BC
|
||||
CALL PRTHEXWORD ; AF
|
||||
POP BC
|
||||
CALL PC_COLON
|
||||
CALL PRTHEXWORD ; BC
|
||||
CALL PC_COLON
|
||||
PUSH DE
|
||||
POP BC
|
||||
CALL PRTHEXWORD ; DE
|
||||
CALL PC_COLON
|
||||
PUSH HL
|
||||
POP BC
|
||||
CALL PRTHEXWORD ; HL
|
||||
CALL PC_COLON
|
||||
LD BC,(REGDMP_SP)
|
||||
CALL PRTHEXWORD ; SP
|
||||
|
||||
CALL PC_COLON
|
||||
PUSH IX
|
||||
POP BC
|
||||
CALL PRTHEXWORD ; IX
|
||||
|
||||
CALL PC_COLON
|
||||
PUSH IY
|
||||
POP BC
|
||||
CALL PRTHEXWORD ; IY
|
||||
|
||||
CALL PC_RBKT
|
||||
CALL PC_SPACE
|
||||
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
|
||||
;LD SP,(RD_STKSAV) ; BACK TO ORIGINAL STACK FRAME
|
||||
|
||||
JP $FFFF ; RETURN, $FFFF IS DYNAMICALLY UPDATED
|
||||
REGDMP_RET .EQU $-2 ; RETURN ADDRESS GOES HERE
|
||||
;
|
||||
REGDMP_PC .DW 0
|
||||
REGDMP_SP .DW 0
|
||||
;
|
||||
;RD_STKSAV .DW 0
|
||||
; .FILL $FF,16*2 ; 16 LEVEL PRIVATE STACK
|
||||
;RD_STACK .EQU $
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
STR_HALT .TEXT "\r\n\r\n*** System Halted ***$"
|
||||
STR_TSTPT .TEXT "\r\n+++ TSTPT: $"
|
||||
;STR_AF .DB " AF=$"
|
||||
;STR_BC .DB " BC=$"
|
||||
;STR_DE .DB " DE=$"
|
||||
;STR_HL .DB " HL=$"
|
||||
;STR_PC .DB " PC=$"
|
||||
;STR_SP .DB " SP=$"
|
||||
;
|
||||
; INDIRECT JUMP TO ADDRESS IN HL
|
||||
;
|
||||
; MOSTLY USEFUL TO PERFORM AN INDIRECT CALL LIKE:
|
||||
; LD HL,xxxx
|
||||
; CALL JPHL
|
||||
;
|
||||
JPHL: JP (HL)
|
||||
;
|
||||
; ADD HL,A
|
||||
;
|
||||
; A REGISTER IS DESTROYED!
|
||||
;
|
||||
ADDHLA:
|
||||
ADD A,L
|
||||
LD L,A
|
||||
RET NC
|
||||
INC H
|
||||
RET
|
||||
;
|
||||
;****************************
|
||||
; A(BCD) => A(BIN)
|
||||
; [00H..99H] -> [0..99]
|
||||
;****************************
|
||||
;
|
||||
BCD2BYTE:
|
||||
PUSH BC
|
||||
LD C,A
|
||||
AND 0F0H
|
||||
SRL A
|
||||
LD B,A
|
||||
SRL A
|
||||
SRL A
|
||||
ADD A,B
|
||||
LD B,A
|
||||
LD A,C
|
||||
AND 0FH
|
||||
ADD A,B
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
;*****************************
|
||||
; A(BIN) => A(BCD)
|
||||
; [0..99] => [00H..99H]
|
||||
;*****************************
|
||||
;
|
||||
BYTE2BCD:
|
||||
PUSH BC
|
||||
LD B,10
|
||||
LD C,-1
|
||||
BYTE2BCD1:
|
||||
INC C
|
||||
SUB B
|
||||
JR NC,BYTE2BCD1
|
||||
ADD A,B
|
||||
LD B,A
|
||||
LD A,C
|
||||
ADD A,A
|
||||
ADD A,A
|
||||
ADD A,A
|
||||
ADD A,A
|
||||
OR B
|
||||
POP BC
|
||||
RET
|
||||
|
||||
#IFDEF USEDELAY
|
||||
|
||||
;
|
||||
; DELAY 16US (CPU SPEED COMPENSATED) INCUDING CALL/RET INVOCATION
|
||||
; REGISTER A AND FLAGS DESTROYED
|
||||
; NO COMPENSATION FOR Z180 MEMORY WAIT STATES
|
||||
; THERE IS AN OVERHEAD OF 3TS PER INVOCATION
|
||||
; IMPACT OF OVERHEAD DIMINISHES AS CPU SPEED INCREASES
|
||||
;
|
||||
; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US + 3TS DELAY
|
||||
; NOTE: CPUSCL MUST BE >= 1!
|
||||
;
|
||||
; EXAMPLE: 8MHZ CPU (DELAY GOAL IS 16US)
|
||||
; LOOP = ((6 * 16) - 5) = 91TS
|
||||
; TOTAL COST = (91 + 40) = 131TS
|
||||
; ACTUAL DELAY = (131 / 8) = 16.375US
|
||||
;
|
||||
; --- TOTAL COST = (LOOP COST + 40) TS -----------------+
|
||||
DELAY: ; 17TS (FROM INVOKING CALL) |
|
||||
LD A,(CPUSCL) ; 13TS |
|
||||
; |
|
||||
DELAY1: ; |
|
||||
; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ |
|
||||
DEC A ; 4TS | |
|
||||
#IF (BIOS == BIOS_WBW) ; | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | |
|
||||
OR A ; +4TS FOR Z180 | |
|
||||
#ENDIF ; | |
|
||||
#ENDIF ; | |
|
||||
JR NZ,DELAY1 ; 12TS (NZ) / 7TS (Z) | |
|
||||
; ----------------------------------------------+ |
|
||||
; |
|
||||
RET ; 10TS (RETURN) |
|
||||
;-------------------------------------------------------+
|
||||
;
|
||||
; DELAY 16US * DE (CPU SPEED COMPENSATED)
|
||||
; REGISTER DE, A, AND FLAGS DESTROYED
|
||||
; NO COMPENSATION FOR Z180 MEMORY WAIT STATES
|
||||
; THERE IS A 27TS OVERHEAD FOR CALL/RET PER INVOCATION
|
||||
; IMPACT OF OVERHEAD DIMINISHES AS DE AND/OR CPU SPEED INCREASES
|
||||
;
|
||||
; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US OUTER LOOP COST
|
||||
; NOTE: CPUSCL MUST BE > 0!
|
||||
;
|
||||
; EXAMPLE: 8MHZ CPU, DE=6250 (DELAY GOAL IS .1 SEC OR 100,000US)
|
||||
; INNER LOOP = ((16 * 6) - 5) = 91TS
|
||||
; OUTER LOOP = ((91 + 37) * 6250) = 800,000TS
|
||||
; ACTUAL DELAY = ((800,000 + 27) / 8) = 100,003US
|
||||
;
|
||||
; --- TOTAL COST = (OUTER LOOP + 27) TS ------------------------+
|
||||
VDELAY: ; 17TS (FROM INVOKING CALL) |
|
||||
; |
|
||||
; --- OUTER LOOP = ((INNER LOOP + 37) * DE) TS ---------+ |
|
||||
LD A,(CPUSCL) ; 13TS | |
|
||||
; | |
|
||||
VDELAY1: ; | |
|
||||
; --- INNER LOOP = ((CPUSCL * 16) - 5) TS ------+ | |
|
||||
#IF (BIOS == BIOS_WBW) ; | | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | | |
|
||||
OR A ; +4TS FOR Z180 | | |
|
||||
#ENDIF ; | | |
|
||||
#ENDIF ; | | |
|
||||
DEC A ; 4TS | | |
|
||||
JR NZ,VDELAY1 ; 12TS (NZ) / 7TS (Z) | | |
|
||||
; ----------------------------------------------+ | |
|
||||
; | |
|
||||
DEC DE ; 6TS | |
|
||||
#IF (BIOS == BIOS_WBW) ; | | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | |
|
||||
OR A ; +4TS FOR Z180 | |
|
||||
#ENDIF ; | |
|
||||
#ENDIF ; | |
|
||||
LD A,D ; 4TS | |
|
||||
OR E ; 4TS | |
|
||||
JP NZ,VDELAY ; 10TS | |
|
||||
;-------------------------------------------------------+ |
|
||||
; |
|
||||
RET ; 10TS (FINAL RETURN) |
|
||||
;---------------------------------------------------------------+
|
||||
;
|
||||
; DELAY ABOUT 0.5 SECONDS
|
||||
; 500000US / 16US = 31250
|
||||
;
|
||||
LDELAY:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
LD DE,31250
|
||||
CALL VDELAY
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; INITIALIZE DELAY SCALER BASED ON OPERATING CPU SPEED
|
||||
; ENTER WITH A = CPU SPEED IN MHZ
|
||||
;
|
||||
DELAY_INIT:
|
||||
CP 3 ; TEST FOR <= 2 (SPECIAL HANDLING)
|
||||
JR C,DELAY_INIT1 ; IF <= 2, SPECIAL PROCESSING
|
||||
SUB 2 ; ADJUST AS REQUIRED BY DELAY FUNCTIONS
|
||||
JR DELAY_INIT2 ; AND CONTINUE
|
||||
DELAY_INIT1:
|
||||
LD A,1 ; USE THE MIN VALUE OF 1
|
||||
DELAY_INIT2:
|
||||
LD (CPUSCL),A ; UPDATE CPU SCALER VALUE
|
||||
RET
|
||||
|
||||
#IF (CPUMHZ < 3)
|
||||
CPUSCL .DB 1 ; CPU SCALER MUST BE > 0
|
||||
#ELSE
|
||||
CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
|
||||
#ENDIF
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
; SHORT DELAY FUNCTIONS. NO CLOCK SPEED COMPENSATION, SO THEY
|
||||
; WILL RUN LONGER ON SLOWER SYSTEMS. THE NUMBER INDICATES THE
|
||||
; NUMBER OF CALL/RET INVOCATIONS. A SINGLE CALL/RET IS
|
||||
; 27 T-STATES ON A Z80, 25 T-STATES ON A Z180
|
||||
;
|
||||
; ; Z80 Z180
|
||||
; ; ---- ----
|
||||
DLY64: CALL DLY32 ; 1728 1600
|
||||
DLY32: CALL DLY16 ; 864 800
|
||||
DLY16: CALL DLY8 ; 432 400
|
||||
DLY8: CALL DLY4 ; 216 200
|
||||
DLY4: CALL DLY2 ; 108 100
|
||||
DLY2: CALL DLY1 ; 54 50
|
||||
DLY1: RET ; 27 25
|
||||
;
|
||||
; MULTIPLY 8-BIT VALUES
|
||||
; IN: MULTIPLY H BY E
|
||||
; OUT: HL = RESULT, E = 0, B = 0
|
||||
;
|
||||
MULT8:
|
||||
LD D,0
|
||||
LD L,D
|
||||
LD B,8
|
||||
MULT8_LOOP:
|
||||
ADD HL,HL
|
||||
JR NC,MULT8_NOADD
|
||||
ADD HL,DE
|
||||
MULT8_NOADD:
|
||||
DJNZ MULT8_LOOP
|
||||
RET
|
||||
;
|
||||
; MULTIPLY A 16 BIT BY 8 BIT INTO 16 BIT
|
||||
; IN: MULTIPLY DE BY A
|
||||
; OUT: HL = RESULT, B=0, A, C, DE UNCHANGED
|
||||
;
|
||||
MULT8X16:
|
||||
LD B,8
|
||||
LD HL,0
|
||||
MULT8X16_1:
|
||||
ADD HL,HL
|
||||
RLCA
|
||||
JR NC,MULT8X16_2
|
||||
ADD HL,DE
|
||||
MULT8X16_2:
|
||||
DJNZ MULT8X16_1
|
||||
RET
|
||||
;;
|
||||
;; COMPUTE HL / DE
|
||||
;; RESULT IN BC, REMAINDER IN HL, AND SET ZF DEPENDING ON REMAINDER
|
||||
;; A, DE DESTROYED
|
||||
;;
|
||||
;DIV:
|
||||
; XOR A
|
||||
; LD BC,0
|
||||
;DIV1:
|
||||
; SBC HL,DE
|
||||
; JR C,DIV2
|
||||
; INC BC
|
||||
; JR DIV1
|
||||
;DIV2:
|
||||
; XOR A
|
||||
; ADC HL,DE ; USE ADC SO ZF IS SET
|
||||
; RET
|
||||
;===============================================================
|
||||
;
|
||||
; COMPUTE HL / DE = BC W/ REMAINDER IN HL & ZF
|
||||
;
|
||||
DIV16:
|
||||
LD A,H ; HL -> AC
|
||||
LD C,L ; ...
|
||||
LD HL,0 ; INIT HL
|
||||
LD B,16 ; INIT LOOP COUNT
|
||||
DIV16A:
|
||||
SCF
|
||||
RL C
|
||||
RLA
|
||||
ADC HL,HL
|
||||
SBC HL,DE
|
||||
JR NC,DIV16B
|
||||
ADD HL,DE
|
||||
DEC C
|
||||
DIV16B:
|
||||
DJNZ DIV16A ; LOOP AS NEEDED
|
||||
LD B,A ; AC -> BC
|
||||
LD A,H ; SET ZF
|
||||
OR L ; ... BASED ON REMAINDER
|
||||
RET ; DONE
|
||||
;
|
||||
; INTEGER DIVIDE DE:HL BY C
|
||||
; RESULT IN DE:HL, REMAINDER IN A
|
||||
; CLOBBERS F, B
|
||||
;
|
||||
DIV32X8:
|
||||
XOR A
|
||||
LD B,32
|
||||
DIV32X8A:
|
||||
ADD HL,HL
|
||||
RL E
|
||||
RL D
|
||||
RLA
|
||||
CP C
|
||||
JR C,DIV32X8B
|
||||
SUB C
|
||||
INC L
|
||||
DIV32X8B:
|
||||
DJNZ DIV32X8A
|
||||
RET
|
||||
;
|
||||
; FILL MEMORY AT HL WITH VALUE A, LENGTH IN BC, ALL REGS USED
|
||||
; LENGTH *MUST* BE GREATER THAN 1 FOR PROPER OPERATION!!!
|
||||
;
|
||||
FILL:
|
||||
LD D,H ; SET DE TO HL
|
||||
LD E,L ; SO DESTINATION EQUALS SOURCE
|
||||
LD (HL),A ; FILL THE FIRST BYTE WITH DESIRED VALUE
|
||||
INC DE ; INCREMENT DESTINATION
|
||||
DEC BC ; DECREMENT THE COUNT
|
||||
LDIR ; DO THE REST
|
||||
RET ; RETURN
|
||||
;
|
||||
; SET A BIT IN BYTE ARRAY AT HL, INDEX IN A
|
||||
;
|
||||
BITSET:
|
||||
CALL BITLOC ; LOCATE THE BIT
|
||||
OR (HL) ; SET THE SPECIFIED BIT
|
||||
LD (HL),A ; SAVE IT
|
||||
RET ; RETURN
|
||||
;
|
||||
; CLEAR A BIT IN BYTE ARRAY AT HL, INDEX IN A
|
||||
;
|
||||
BITCLR:
|
||||
CALL BITLOC ; LOCATE THE BIT
|
||||
CPL ; INVERT ALL BITS
|
||||
AND (HL) ; CLEAR SPECIFIED BIT
|
||||
LD (HL),A ; SAVE IT
|
||||
RET ; RETURN
|
||||
;
|
||||
; GET VALUE OF A BIT IN BYTE ARRAY AT HL, INDEX IN A
|
||||
;
|
||||
BITTST:
|
||||
CALL BITLOC ; LOCATE THE BIT
|
||||
AND (HL) ; SET Z FLAG BASED ON BIT
|
||||
RET ; RETURN
|
||||
;
|
||||
; LOCATE A BIT IN BYTE ARRAY AT HL, INDEX IN A
|
||||
; RETURN WITH HL POINTING TO BYTE AND A WITH MASK FOR SPECIFIC BIT
|
||||
;
|
||||
BITLOC:
|
||||
PUSH AF ; SAVE BIT INDEX
|
||||
SRL A ; DIVIDE BY 8 TO GET BYTE INDEX
|
||||
SRL A ; "
|
||||
SRL A ; "
|
||||
LD C,A ; MOVE TO BC
|
||||
LD B,0 ; "
|
||||
ADD HL,BC ; HL NOW POINTS TO BYTE CONTAINING BIT
|
||||
POP AF ; RECOVER A (INDEX)
|
||||
AND $07 ; ISOLATE REMAINDER, Z SET IF ZERO
|
||||
LD B,A ; SETUP SHIFT COUNTER
|
||||
LD A,1 ; SETUP A WITH MASK
|
||||
RET Z ; DONE IF ZERO
|
||||
BITLOC1:
|
||||
SLA A ; SHIFT
|
||||
DJNZ BITLOC1 ; LOOP AS NEEDED
|
||||
RET ; DONE
|
||||
;
|
||||
; PRINT VALUE OF A IN DECIMAL WITH LEADING ZERO SUPPRESSION
|
||||
;
|
||||
PRTDECB:
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD L,A
|
||||
LD H,0
|
||||
CALL PRTDEC
|
||||
POP AF
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
; PRINT VALUE OF HL IN DECIMAL WITH LEADING ZERO SUPPRESSION
|
||||
;
|
||||
PRTDEC:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD E,'0'
|
||||
LD BC,-10000
|
||||
CALL PRTDEC1
|
||||
LD BC,-1000
|
||||
CALL PRTDEC1
|
||||
LD BC,-100
|
||||
CALL PRTDEC1
|
||||
LD C,-10
|
||||
CALL PRTDEC1
|
||||
LD E,0
|
||||
LD C,-1
|
||||
CALL PRTDEC1
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
PRTDEC1:
|
||||
LD A,'0' - 1
|
||||
PRTDEC2:
|
||||
INC A
|
||||
ADD HL,BC
|
||||
JR C,PRTDEC2
|
||||
SBC HL,BC
|
||||
CP E
|
||||
JR Z,PRTDEC3
|
||||
LD E,0
|
||||
CALL COUT
|
||||
PRTDEC3:
|
||||
RET
|
||||
;
|
||||
; SHIFT HL:DE BY B BITS
|
||||
;
|
||||
SRL32:
|
||||
; ROTATE RIGHT 32 BITS, HIGH ORDER BITS BECOME ZERO
|
||||
SRL D
|
||||
RR E
|
||||
RR H
|
||||
RR L
|
||||
DJNZ SRL32
|
||||
RET
|
||||
;
|
||||
SLA32:
|
||||
; ROTATE LEFT 32 BITS, LOW ORDER BITS BECOME ZERO
|
||||
SLA L
|
||||
RL H
|
||||
RL E
|
||||
RL D
|
||||
DJNZ SLA32
|
||||
RET
|
||||
;
|
||||
; LOAD OR STORE DE:HL
|
||||
;
|
||||
LD32:
|
||||
; LD DE:HL,(HL)
|
||||
PUSH AF
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
LD H,(HL)
|
||||
LD L,A
|
||||
POP AF
|
||||
EX DE,HL
|
||||
RET
|
||||
;
|
||||
ST32:
|
||||
; LD (BC),DE:HL
|
||||
PUSH AF
|
||||
LD A,L
|
||||
LD (BC),A
|
||||
INC BC
|
||||
LD A,H
|
||||
LD (BC),A
|
||||
INC BC
|
||||
LD A,E
|
||||
LD (BC),A
|
||||
INC BC
|
||||
LD A,D
|
||||
LD (BC),A
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; INC/ADD/DEC/SUB 32 BIT VALUE IN DE:HL
|
||||
; FOR ADD/SUB, OPERAND IS IN BC
|
||||
;
|
||||
INC32:
|
||||
LD BC,1
|
||||
ADD32:
|
||||
ADD HL,BC
|
||||
RET NC
|
||||
INC DE
|
||||
RET
|
||||
;
|
||||
DEC32:
|
||||
LD BC,1
|
||||
SUB32:
|
||||
OR A
|
||||
SBC HL,BC
|
||||
RET NC
|
||||
DEC DE
|
||||
RET
|
||||
;
|
||||
; INC32 (HL)
|
||||
; INCREMENT 32 BIT BINARY AT ADDRESS
|
||||
;
|
||||
INC32HL:
|
||||
INC (HL)
|
||||
RET NZ
|
||||
INC HL
|
||||
INC (HL)
|
||||
RET NZ
|
||||
INC HL
|
||||
INC (HL)
|
||||
RET NZ
|
||||
INC HL
|
||||
INC (HL)
|
||||
RET
|
||||
|
||||
13
Source/Apps/Test/I2C/Build.cmd
Normal file
13
Source/Apps/Test/I2C/Build.cmd
Normal file
@@ -0,0 +1,13 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=../../../../Tools
|
||||
set PATH=%TOOLS%\tasm32;%PATH%
|
||||
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
|
||||
|
||||
copy /Y i2c*.com ..\..\..\..\Binary\Apps\Test\ || exit /b
|
||||
copy /Y rtcds7*.com ..\..\..\..\Binary\Apps\Test\ || exit /b
|
||||
5
Source/Apps/Test/I2C/Clean.cmd
Normal file
5
Source/Apps/Test/I2C/Clean.cmd
Normal file
@@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.com del *.com
|
||||
if exist *.lst del *.lst
|
||||
8
Source/Apps/Test/I2C/Makefile
Normal file
8
Source/Apps/Test/I2C/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
OBJECTS = i2cscan.com rtcds7.com i2clcd.com
|
||||
DEST = ../../../../Binary/Apps/Test/
|
||||
TOOLS = ../../../../Tools
|
||||
|
||||
USETASM=1
|
||||
TASMFLAGS=-dWBW
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
132
Source/Apps/Test/I2C/i2ccpm.inc
Normal file
132
Source/Apps/Test/I2C/i2ccpm.inc
Normal file
@@ -0,0 +1,132 @@
|
||||
;==================================================================================================
|
||||
; GENERIC CP/M ROUTINES
|
||||
;==================================================================================================
|
||||
;
|
||||
BDOS .EQU 5 ;ENTRY BDOS
|
||||
BS .EQU 8 ;BACKSPACE
|
||||
TAB .EQU 9 ;TABULATOR
|
||||
LF .EQU 0AH ;LINE-FEED
|
||||
CR .EQU 0DH ;CARRIAGE-RETURN
|
||||
;
|
||||
CLIARGS .EQU $81
|
||||
RESTART .EQU $0000 ; CP/M restart vector
|
||||
FCB .EQU $5C ; Location of default FCB
|
||||
;
|
||||
; OUTPUT TEXT AT HL
|
||||
;
|
||||
PRTSTR: LD A,(HL)
|
||||
CP '$'
|
||||
RET Z
|
||||
CALL COUT
|
||||
INC HL
|
||||
JR PRTSTR
|
||||
;
|
||||
;Output WORD
|
||||
;***********
|
||||
;
|
||||
;PARAMETER: Entry WORD IN HL
|
||||
;*********
|
||||
;
|
||||
OUTW: LD A,H
|
||||
CALL OUTB
|
||||
LD A,L
|
||||
CALL OUTB
|
||||
RET
|
||||
;
|
||||
;Output BYTE
|
||||
;***********
|
||||
;
|
||||
;PARAMETER: Entry BYTE IN A
|
||||
;*********
|
||||
;
|
||||
OUTB: PUSH AF
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND 0FH
|
||||
CALL HBTHE ;Change Half-BYTE
|
||||
POP AF
|
||||
AND 0FH
|
||||
CALL HBTHE
|
||||
RET
|
||||
;
|
||||
;Output HALF-BYTE
|
||||
;****************
|
||||
;
|
||||
;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3)
|
||||
;*********
|
||||
;
|
||||
HBTHE: CP 0AH
|
||||
JR C,HBTHE1
|
||||
ADD A,7 ;Character to Letter
|
||||
HBTHE1: ADD A,30H
|
||||
LD E,A
|
||||
CALL PCHAR
|
||||
RET
|
||||
;
|
||||
;
|
||||
;Output on Screen
|
||||
;****************
|
||||
;
|
||||
PRBS: LD E,BS
|
||||
CALL PCHAR
|
||||
RET
|
||||
;
|
||||
;Output CR+LF on Screen
|
||||
;**********************
|
||||
;
|
||||
NEWLINE:
|
||||
LD E,CR
|
||||
CALL PCHAR
|
||||
LD E,LF
|
||||
CALL PCHAR
|
||||
RET
|
||||
;
|
||||
;Output ASCII-Character
|
||||
;**********************
|
||||
;
|
||||
COUT: PUSH AF
|
||||
LD E,A
|
||||
CALL PCHAR
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;CALL BDOS with Register Save
|
||||
;****************************
|
||||
;
|
||||
INCHA: LD C,1 ;INPUT CHARACTER TO A
|
||||
JR BDO
|
||||
PCHAR: LD C,2 ;PRINT CHARACTER IN E
|
||||
JR BDO
|
||||
PSTRIN: LD C,9 ;PRINT STRING
|
||||
JR BDO
|
||||
INBUFF: LD C,10 ;READ CONSOLE-BUFFER
|
||||
JR BDO
|
||||
CSTS: LD C,11 ;CONSOLE-STATUS
|
||||
JR BDO
|
||||
OPEN: LD C,15 ;OPEN FILE
|
||||
JR BDO
|
||||
CLOSE: LD C,16 ;CLOSE FILE
|
||||
JR BDO
|
||||
DELETE: LD C,19 ;DELETE FILE
|
||||
JR BDO
|
||||
READS: LD C,20 ;READ SEEK
|
||||
JR BDO
|
||||
WRITES: LD C,21 ;WRITE SEEK
|
||||
JR BDO
|
||||
MAKE: LD C,22 ;MAKE FILE
|
||||
JR BDO
|
||||
SETDMA: LD C,26 ;SET DMA-ADDRESS
|
||||
BDO: PUSH HL
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
PUSH IX
|
||||
PUSH IY
|
||||
CALL BDOS
|
||||
POP IY
|
||||
POP IX
|
||||
POP BC
|
||||
POP DE
|
||||
POP HL
|
||||
RET
|
||||
517
Source/Apps/Test/I2C/i2clcd.asm
Normal file
517
Source/Apps/Test/I2C/i2clcd.asm
Normal file
@@ -0,0 +1,517 @@
|
||||
;==================================================================================================
|
||||
; PCF8584 HD44780 I2C LCD UTILITY
|
||||
;
|
||||
; SOME GENERAL INFORMATION ON LCDS CAN BE SEEN HERE : FOCUSLCDS.COM/PRODUCT-CATEGORY/CHARACTER-LCD/
|
||||
;
|
||||
;==================================================================================================
|
||||
;
|
||||
.ECHO "i2clcd\n"
|
||||
;
|
||||
#INCLUDE "pcfi2c.inc"
|
||||
;
|
||||
; LCD COMMANDS
|
||||
;
|
||||
LCDFSET .EQU 00100000B ; 20H
|
||||
LCD4BIT .EQU 00000000B ; 00H
|
||||
LCD2LIN .EQU 00001000B ; 08H
|
||||
LCDDON .EQU 00000100B ; 04H
|
||||
LCDDMOV .EQU 00001000B ; 07H
|
||||
LCDSGRA .EQU 01000000B ; 04H
|
||||
LCDSDRA .EQU 10000000B ; 80H
|
||||
LCDEMS .EQU 00000100B ; 04H
|
||||
LCDELFT .EQU 00000010B ; 03H
|
||||
;
|
||||
LCDPINE .EQU 00000100B ; PIN 2
|
||||
LCDPIND .EQU 00000001B ; PIN O
|
||||
;
|
||||
;
|
||||
; STANDARD FORMATS - 8X1, 8X2, 16X1, 16X2, 16X4, 20X1, 20X2, 20X4, 24X2, 40X1, 40X2, 40X4
|
||||
;
|
||||
TIMEOUT .EQU 255
|
||||
|
||||
.ORG 100H
|
||||
|
||||
;INIT: CALL PCF_INIT
|
||||
;
|
||||
LD A,0
|
||||
LD (DEBUGF),A
|
||||
;
|
||||
CALL LCDINIT ; SETUP THE LCD THROUGH THE PCF8574
|
||||
|
||||
LD HL,LCDDATA ; DISPLAY TEXT AT HL
|
||||
PUSH HL
|
||||
CALL LCDSTR
|
||||
POP HL
|
||||
|
||||
CALL STOP ; CLOSE I2C CONNECTION
|
||||
;
|
||||
RET
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
LCDLITE .DB 00001000B
|
||||
;
|
||||
LCDINIT:
|
||||
; CALL DEBUG
|
||||
;
|
||||
LD A,I2CLCDW ; SET SLAVE ADDRESS
|
||||
OUT (REGS0),A
|
||||
;
|
||||
LD A,0C5H ; GENERATE START CONDITION
|
||||
OUT (REGS1),A ; AND ISSUE THE SLAVE ADDRESS
|
||||
CALL CHKPIN
|
||||
;
|
||||
; CALL DEBUG
|
||||
;
|
||||
LD HL,LCDINIT1
|
||||
LD B,2
|
||||
CALL WLN
|
||||
;
|
||||
CALL DELAY
|
||||
;
|
||||
LD HL,LCDINIT2
|
||||
LD B,2
|
||||
CALL WLN
|
||||
;
|
||||
CALL DELAY
|
||||
;
|
||||
; NOW WE ARE IN 4 BIT MODE
|
||||
;
|
||||
LD A,+(LCDFSET | LCD4BIT | LCD2LIN)
|
||||
CALL LCDCMD
|
||||
LD A,+(LCDDON | LCDDMOV)
|
||||
CALL LCDCMD
|
||||
LD A,+(LCDEMS | LCDELFT)
|
||||
CALL LCDCMD
|
||||
LD A,LCDSDRA
|
||||
CALL LCDCMD
|
||||
;
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
WLN: LD A,(HL)
|
||||
OUT (REGS0),A ; PUT DATA ON BUS
|
||||
CALL CHKPIN
|
||||
INC HL
|
||||
DJNZ WLN
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
; DISPLAY STRING AT HL, TERMINATED BY 0
|
||||
;
|
||||
LCDSTR: POP BC ; GET THE POINTER OF
|
||||
POP HL ; THE TEXT TO DISPLAY
|
||||
PUSH HL ; OFF THE STACK AND
|
||||
PUSH BC ; PUT IT IN HL.
|
||||
;
|
||||
LCDST0: LD A,(HL) ; GET NEXT CHARACTER TO
|
||||
OR A ; DISPLAY BUT RETURN
|
||||
RET Z ; WHEN TERMINATOR REACHED
|
||||
PUSH HL
|
||||
;
|
||||
CALL LCDATA ; OUTPUT TO LCD
|
||||
POP HL
|
||||
; RET C ; POINT TO NEXT
|
||||
INC HL ; AND REPEAT
|
||||
JR LCDST0
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
; SEND BYTE IN A TO LCD IN 4-BIT MODE
|
||||
;
|
||||
LCDATA: PUSH DE
|
||||
LD D,A
|
||||
LD A,(LCDLITE)
|
||||
OR +(LCDPINE | LCDPIND)
|
||||
JP LCDSND
|
||||
LCDCMD: PUSH DE
|
||||
LD D,A
|
||||
LD A,(LCDLITE)
|
||||
OR LCDPINE
|
||||
LCDSND: LD E,A
|
||||
LD A,D
|
||||
PUSH BC
|
||||
LD C,11110000B
|
||||
AND C
|
||||
OR E
|
||||
LD (LCDBUF),A
|
||||
AND ~LCDPINE
|
||||
LD (LCDBUF+1),A
|
||||
LD A,D
|
||||
RLC A
|
||||
RLC A
|
||||
RLC A
|
||||
RLC A
|
||||
AND C
|
||||
OR E
|
||||
LD (LCDBUF+2),A
|
||||
AND ~LCDPINE
|
||||
LD (LCDBUF+3),A
|
||||
;
|
||||
LD HL,LCDBUF ; OUTPUT 1 BYTE WHICH
|
||||
LD B,4 ; REQUIRES A FOUR
|
||||
CALL WLN ; BYTE SEQUENCE
|
||||
;
|
||||
POP BC
|
||||
POP DE
|
||||
RET
|
||||
;
|
||||
LCDDATA:
|
||||
.DB "TEST HOW BIG IS THIS LINE DOES IT WRAP",0
|
||||
;
|
||||
LCDINIT1:
|
||||
.DB 00110100B
|
||||
.DB 00011000B
|
||||
;
|
||||
LCDINIT2:
|
||||
.DB 00100100B
|
||||
.DB 00100000B
|
||||
;
|
||||
LCDBUF:
|
||||
.DB 0, 0, 0, 0 ; BUFFER TO HOLD 4 BYTE SEQUENCE
|
||||
|
||||
; FLASH DEVICE READ
|
||||
;
|
||||
|
||||
DEVMADR .EQU 0
|
||||
|
||||
READR: LD B,255
|
||||
DLY1: DJNZ DLY1
|
||||
;
|
||||
LD A,D ; SET SLAVE ADDRESS
|
||||
OUT (REGS0),A
|
||||
;
|
||||
LD A,0C5H ; GENERATE START CONDITION
|
||||
OUT (REGS1),A ; AND ISSUE THE SLAVE ADDRESS
|
||||
CALL CHKPIN
|
||||
;
|
||||
LD A,+(DEVMADR/256)
|
||||
OUT (REGS0),A ; PUT ADDRESS MSB ON BUS
|
||||
CALL CHKPIN
|
||||
;
|
||||
LD A,+(DEVMADR&$00FF)
|
||||
OUT (REGS0),A ; PUT ADDRESS LSB ON BUS
|
||||
CALL CHKPIN
|
||||
;
|
||||
LD A,045H ; START
|
||||
OUT (REGS1),A
|
||||
;
|
||||
LD A,E ; ISSUE CONTROL BYTE + READ
|
||||
OUT (REGS0),A
|
||||
;
|
||||
CALL READI2C ; DUMMY READ
|
||||
JR NZ,ERREXT
|
||||
;
|
||||
READLP1:CALL READI2C
|
||||
; JR Z,ERREXT
|
||||
CP 1AH
|
||||
PUSH AF
|
||||
CALL COUT
|
||||
POP AF
|
||||
JR NZ,READLP1
|
||||
;
|
||||
LD A,PCF_ES0
|
||||
OUT (REGS1),A
|
||||
CALL CHKPIN
|
||||
IN A,(REGS0)
|
||||
CALL READI2C
|
||||
CALL STOP
|
||||
;
|
||||
CALL NEWLINE
|
||||
;
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;-----------------------------------------------------------------------------
|
||||
RESET: LD A,0C2H ; STOP
|
||||
OUT (REGS1),A
|
||||
LD B,255
|
||||
DLY2: DJNZ DLY2
|
||||
LD A,0C1H
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
|
||||
|
||||
RDSTAT: LD BC,-1
|
||||
STATLP: IN A,(REGS1)
|
||||
AND 1
|
||||
RET Z
|
||||
LD A,B
|
||||
OR C
|
||||
DEC BC
|
||||
JR NZ,STATLP
|
||||
LD A,'T'
|
||||
JP ERREXTT
|
||||
;
|
||||
ERREXT: LD A,'Q'
|
||||
JR ERR
|
||||
|
||||
ERREXTT: POP HL
|
||||
ERR: CALL COUT
|
||||
CALL STOP
|
||||
CALL RESET
|
||||
RET
|
||||
;
|
||||
STOP: LD A,0C3H
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
;
|
||||
DELAY: PUSH HL
|
||||
LD HL,-1
|
||||
DLOOP: LD A,H
|
||||
OR L
|
||||
DEC HL
|
||||
JR NZ,DLOOP
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
CHKPIN: IN A,(REGS1) ; POLL FOR
|
||||
BIT 7,A ; TRANSMISSION
|
||||
JP NZ,CHKPIN ; TO FINISH
|
||||
|
||||
; IN A,(REGS1) ; CHECK FOR
|
||||
BIT 3,A ; SLAVE
|
||||
RET Z ; ACKNOWLEDGMENT
|
||||
LD A,'A'
|
||||
JP ERREXTT
|
||||
;
|
||||
; READ ONE BYTE FROM I2C
|
||||
; RETURNS DATA IN A
|
||||
; Z flag set is acknowledge received (correct operation)
|
||||
;
|
||||
READI2C:
|
||||
IN A,(REGS1) ; READ S1 REGISTER
|
||||
BIT 7,A ; CHECK PIN STATUS
|
||||
JP NZ,READI2C
|
||||
BIT 3,A ; CHECK LRB=0
|
||||
RET NZ
|
||||
IN A,(REGS0) ; GET DATA
|
||||
RET
|
||||
;
|
||||
DEBUG: PUSH AF
|
||||
PUSH DE
|
||||
LD A,'['
|
||||
CALL COUT
|
||||
LD HL,DEBUGF
|
||||
LD A,(HL)
|
||||
INC (HL)
|
||||
CALL HBTHE
|
||||
LD A,']'
|
||||
CALL COUT
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
DEBUGF: .DB 00H
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
; LINUX DRIVER BASED CODE
|
||||
;
|
||||
; I2C_INB = IN A,(REGS0)
|
||||
; I2C_OUTB = LD A,* | OUT (REGS0),A
|
||||
; SET_PCF = LD A,* | OUT (REGS1),A
|
||||
; GET_PCF = IN A,(REGS1)
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
I2C_START:
|
||||
LD A,PCF_START_
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
I2C_REPSTART:
|
||||
LD A,PCF_START_
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
I2C_STOP:
|
||||
LD A,PCF_STOP_
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
HANDLE_LAB:
|
||||
|
||||
LABDLY .EQU 0F000H
|
||||
|
||||
LD A,PCF_PIN
|
||||
OUT (REGS1),A
|
||||
LD A,PCF_ES0
|
||||
OUT (REGS1),A
|
||||
;
|
||||
LD HL,LABDLY
|
||||
LABLP LD A,H
|
||||
OR L
|
||||
DEC HL
|
||||
JR NZ,LABLP
|
||||
;
|
||||
IN A,(REGS1)
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
WAIT_FOR_BB:
|
||||
;
|
||||
BBTIMO .EQU 255
|
||||
;
|
||||
LD HL,BBTIMO
|
||||
BBNOTO IN A,(REGS1)
|
||||
AND PCF_BB
|
||||
RET Z
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR A
|
||||
JR NZ,BBNOTO
|
||||
CPL ; RET NZ IF TIMEOUT
|
||||
BBNOTB RET ; RET Z IF BUS IS BUSY
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
WAIT_FOR_PIN:
|
||||
;
|
||||
; RETURN A=00/Z IF SUCCESSFULL
|
||||
; RETURN A=FF/NZ IF TIMEOUT
|
||||
; RETURN A=01/NZ IF LOST ARBITRATION
|
||||
;
|
||||
PINTIMO .EQU 16000
|
||||
;
|
||||
LD HL,PINTIMO
|
||||
PINNOTO IN A,(REGS1)
|
||||
LD (STATUS),A
|
||||
LD B,A
|
||||
AND PCF_PIN
|
||||
RET Z
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR A
|
||||
JR NZ,PINNOTO
|
||||
CPL ; RET NZ IF TIMEOUT
|
||||
PINNOTB RET ; RET Z IF BUS IS BUSY
|
||||
;
|
||||
LD B,A
|
||||
AND PCF_LAB
|
||||
CALL HANDLE_LAB
|
||||
LD (STATUS),A
|
||||
XOR A
|
||||
INC A
|
||||
RET
|
||||
;
|
||||
STATUS .DB 00H
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
PCF_INIT:
|
||||
LD A,PCF_PIN ; S1=80H: S0 SELECTED, SERIAL
|
||||
OUT (REGS1),A ; INTERFACE OFF
|
||||
NOP
|
||||
IN A,(REGS1) ; CHECK TO SEE S1 NOW USED AS R/W
|
||||
AND 07FH ; CTRL. PCF8584 DOES THAT WHEN ESO
|
||||
JR NZ,INIERR ; IS ZERO
|
||||
;
|
||||
LD A,PCF_OWN ; LOAD OWN ADDRESS IN S0,
|
||||
OUT (REGS0),A ; EFFECTIVE ADDRESS IS (OWN <<1)
|
||||
NOP
|
||||
IN A,(REGS0) ; CHECK IT IS REALLY WRITTEN
|
||||
CP PCF_OWN
|
||||
JR NZ,SETERR
|
||||
;
|
||||
LD A,+(PCF_PIN | PCF_ES1) ; S1=0A0H
|
||||
OUT (REGS1),A ; NEXT BYTE IN S2
|
||||
NOP
|
||||
IN A,(REGS1)
|
||||
AND 07FH
|
||||
CP PCF_ES1
|
||||
JR NZ,REGERR
|
||||
;
|
||||
LD A,PCF_CLK ; LOAD CLOCK REGISTER S2
|
||||
OUT (REGS0),A
|
||||
NOP
|
||||
IN A,(REGS0) ; CHECK IT'S REALLY WRITTEN, ONLY
|
||||
AND 1FH ; THE LOWER 5 BITS MATTER
|
||||
CP PCF_CLK
|
||||
JR NZ,CLKERR
|
||||
;
|
||||
LD A,PCF_IDLE_
|
||||
OUT (REGS1),A
|
||||
NOP
|
||||
IN A,(REGS1)
|
||||
CP +(PCF_PIN | PCF_BB)
|
||||
JR NZ,IDLERR
|
||||
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
PCF_SENDBYTES: ; HL POINTS TO DATA, BC = COUNT, A = 0 LAST A=1 NOT LAST
|
||||
;
|
||||
LD (LASTB),A
|
||||
;
|
||||
SB0: LD A,(HL)
|
||||
OUT (REGS0),A
|
||||
CALL WAIT_FOR_PIN
|
||||
JR Z,SB1
|
||||
|
||||
CP 01H ; EXIT IF ARBITRATION ERROR
|
||||
RET Z
|
||||
|
||||
CALL I2C_STOP ; MUST BE TIMEOUT
|
||||
LD A,055H ; ERROR
|
||||
RET
|
||||
|
||||
SB1: LD A,(STATUS)
|
||||
AND PCF_LRB
|
||||
JR NZ,SB2
|
||||
LD A,055H
|
||||
;
|
||||
SB2: LD A,B
|
||||
OR C
|
||||
INC HL
|
||||
JR NZ,SB0 ; CHECK IF FINISHED
|
||||
;
|
||||
SBGOOD: LD A,(LASTB)
|
||||
OR A
|
||||
JR NZ,DB3
|
||||
CALL I2C_STOP
|
||||
RET
|
||||
DB3: CALL I2C_REPSTART
|
||||
RET
|
||||
;
|
||||
LASTB .DB 00H
|
||||
;
|
||||
|
||||
; I2C_INB = IN A,(REGS0)
|
||||
; I2C_OUTB = LD A,* | OUT (REGS0),A
|
||||
; SET_PCF = LD A,* | OUT (REGS1),A
|
||||
; GET_PCF = IN A,(REGS1)
|
||||
|
||||
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
INIERR LD HL,NOPCF
|
||||
CALL PRTSTR
|
||||
RET
|
||||
;
|
||||
SETERR LD HL,WRTFAIL
|
||||
CALL PRTSTR
|
||||
RET
|
||||
REGERR LD HL,REGFAIL
|
||||
CALL PRTSTR
|
||||
RET
|
||||
;
|
||||
CLKERR LD HL,CLKFAIL
|
||||
CALL PRTSTR
|
||||
RET
|
||||
;
|
||||
IDLERR LD HL,IDLFAIL
|
||||
CALL PRTSTR
|
||||
RET
|
||||
;
|
||||
NOPCF .DB "NO DEVICE FOUND",CR,LF,"$"
|
||||
WRTFAIL .DB "SETTING DEVICE ID FAILED",CR,LF,"$"
|
||||
REGFAIL .DB "CLOCK REGISTER SELECT ERROR",CR,LF,"$"
|
||||
CLKFAIL .DB "CLOCK SET FAIL",CR,LF,"$"
|
||||
IDLFAIL .DB "BUS IDLE FAILED",CR,LF,"$"
|
||||
;
|
||||
#INCLUDE "i2ccpm.inc"
|
||||
;
|
||||
BUFFER: .DS 256
|
||||
;
|
||||
.END
|
||||
500
Source/Apps/Test/I2C/i2cscan.asm
Normal file
500
Source/Apps/Test/I2C/i2cscan.asm
Normal file
@@ -0,0 +1,500 @@
|
||||
;
|
||||
.ECHO "i2cscan\n"
|
||||
;
|
||||
; I2C BUS SCANNER
|
||||
; 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
|
||||
;
|
||||
#IF (PCF)
|
||||
I2C_BASE .EQU 0F0H
|
||||
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
|
||||
_scl .EQU 1
|
||||
_idle .EQU 00000011B
|
||||
#ENDIF
|
||||
;
|
||||
#IF (SC126)
|
||||
I2C_BASE .EQU 0Ch
|
||||
_sda .EQU 7
|
||||
_scl .EQU 0
|
||||
_idle .EQU 10001101B
|
||||
#ENDIF
|
||||
;
|
||||
#IF (SC137)
|
||||
I2C_BASE .EQU 20h
|
||||
_sda .EQU 7
|
||||
_scl .EQU 0
|
||||
_idle .EQU 10000001B
|
||||
#ENDIF
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
.org 100h
|
||||
|
||||
ld sp,stack
|
||||
|
||||
ld hl,signon
|
||||
call _strout
|
||||
|
||||
ld c,' '
|
||||
call _cout
|
||||
call _cout
|
||||
call _cout
|
||||
|
||||
; display x axis header 00-0F
|
||||
|
||||
xor a
|
||||
ld (x),a
|
||||
ld b, 16
|
||||
lp1: ld c,' '
|
||||
call _cout
|
||||
ld a,(x)
|
||||
ld c,a
|
||||
inc a
|
||||
ld (x),a
|
||||
call _hexout
|
||||
djnz lp1
|
||||
call _eolout
|
||||
|
||||
; start of line loop 00-07
|
||||
|
||||
xor a ; display
|
||||
ld (y),a ; y-axis
|
||||
ld (addr),a ; prefix
|
||||
ld d,8
|
||||
lp3b: ld a,(y)
|
||||
ld c,a
|
||||
add a,10h
|
||||
ld (y),a
|
||||
call _hexout
|
||||
ld c,':'
|
||||
call _cout
|
||||
|
||||
; set up x axis loop
|
||||
|
||||
xor a
|
||||
ld (x),a
|
||||
ld e,16
|
||||
lp2b: push de
|
||||
|
||||
ld c,' '
|
||||
call _cout
|
||||
|
||||
; i2c challenge
|
||||
; . issue device start command
|
||||
; . write address to device
|
||||
; . issue device stop command.
|
||||
; . delay
|
||||
; . display response
|
||||
|
||||
; call _i2c_start
|
||||
; ld a,(addr)
|
||||
; ld c,a
|
||||
; call _i2c_write
|
||||
; ld (rc),a
|
||||
; call _i2c_stop
|
||||
|
||||
CALL PCF_WAIT_FOR_BB
|
||||
JP NZ,PCF_BBERR
|
||||
;
|
||||
LD A,(addr)
|
||||
OUT (PCF_RS0),A
|
||||
CALL PCF_START ; GENERATE START CONDITION
|
||||
;
|
||||
ld bc,100 ; delay
|
||||
lp6: nop
|
||||
dec bc
|
||||
ld a,c
|
||||
or b
|
||||
jr nz,lp6
|
||||
|
||||
CALL PCF_WAIT_FOR_ACK; AND ISSUE THE SLAVE ADDRESS
|
||||
or a
|
||||
jp nz,lp4f
|
||||
|
||||
ld c,'-' ; display no
|
||||
call _cout ; response
|
||||
call _cout
|
||||
jp lp5f
|
||||
|
||||
lp4f: ld a,(addr) ; adjust address
|
||||
ld c,a ; and display it
|
||||
srl c
|
||||
call _hexout
|
||||
|
||||
lp5f: ld a,(addr) ; next address
|
||||
add a,2 ; adjust for
|
||||
ld (addr),a ; 7-bit
|
||||
|
||||
CALL PCF_STOP
|
||||
|
||||
pop de ; check if
|
||||
dec e ; reached end
|
||||
jp nz,lp2b ; of line
|
||||
call _eolout
|
||||
|
||||
dec d ; loop until
|
||||
jp nz,lp3b ; all done
|
||||
|
||||
jp 0
|
||||
|
||||
signon: .db "I2C Bus Scanner"
|
||||
#IF (PCF)
|
||||
.DB " - PCF8584"
|
||||
#ENDIF
|
||||
#IF (SC126)
|
||||
.DB " - SC126"
|
||||
#ENDIF
|
||||
#IF (SC137)
|
||||
.DB " - SC137"
|
||||
#ENDIF
|
||||
.db 13, 10, 13, 10, 0, "$"8
|
||||
|
||||
_strout:
|
||||
st1: ld a,(hl) ; display
|
||||
CP '$' ; zero
|
||||
ret z ; terminated
|
||||
ld c,a ; string
|
||||
call _cout
|
||||
inc hl
|
||||
jp st1
|
||||
|
||||
_hexout: ; display
|
||||
ld a,c ; A in hex
|
||||
srl a
|
||||
srl a
|
||||
srl a
|
||||
srl a
|
||||
add a,30h
|
||||
cp 3Ah
|
||||
jp c,h1
|
||||
add a,7
|
||||
h1: ld h,a
|
||||
ld a,c
|
||||
and 0Fh
|
||||
add a,30h
|
||||
cp 3Ah
|
||||
jp c,h2
|
||||
add a,7
|
||||
h2: ld l,a
|
||||
ld c,h
|
||||
call _cout
|
||||
ld c,l
|
||||
call _cout
|
||||
ret
|
||||
|
||||
_eolout: ; newline
|
||||
ld c,13
|
||||
call _cout
|
||||
ld c,10
|
||||
call _cout
|
||||
ret
|
||||
|
||||
_cout: ; character
|
||||
push af ; output
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
ld e,c
|
||||
ld c,02h
|
||||
call 5
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
pop af
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
#IF (PCF)
|
||||
_i2c_start:
|
||||
PCF_START:
|
||||
LD A,PCF_START_
|
||||
OUT (PCF_RS1),A
|
||||
RET
|
||||
#ELSE
|
||||
;_i2c_start:
|
||||
ld a,_idle ; issue
|
||||
out (I2C_BASE),a ; start
|
||||
; command
|
||||
res _sda,a
|
||||
out (I2C_BASE),a
|
||||
nop
|
||||
nop
|
||||
res _scl,a
|
||||
out (I2C_BASE),a
|
||||
|
||||
ld (oprval),a
|
||||
ret
|
||||
#ENDIF
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
; CONTROL REGISTER BITS
|
||||
;
|
||||
PCF_PIN .EQU 10000000B
|
||||
PCF_ES0 .EQU 01000000B
|
||||
PCF_ES1 .EQU 00100000B
|
||||
PCF_ES2 .EQU 00010000B
|
||||
PCF_EN1 .EQU 00001000B
|
||||
PCF_STA .EQU 00000100B
|
||||
PCF_STO .EQU 00000010B
|
||||
PCF_ACK .EQU 00000001B
|
||||
;
|
||||
; STATUS REGISTER BITS
|
||||
;
|
||||
;PCF_PIN .EQU 10000000B
|
||||
PCF_INI .EQU 01000000B ; 1 if not initialized
|
||||
PCF_STS .EQU 00100000B
|
||||
PCF_BER .EQU 00010000B
|
||||
PCF_AD0 .EQU 00001000B
|
||||
PCF_LRB .EQU 00001000B
|
||||
PCF_AAS .EQU 00000100B
|
||||
PCF_LAB .EQU 00000010B
|
||||
PCF_BB .EQU 00000001B
|
||||
;
|
||||
PCF_START_ .EQU (PCF_PIN | PCF_ES0 | PCF_STA | PCF_ACK)
|
||||
PCF_STOP_ .EQU (PCF_PIN | PCF_ES0 | PCF_STO | PCF_ACK)
|
||||
;
|
||||
; TIMEOUT AND DELAY VALUES (ARBITRARY)
|
||||
;
|
||||
PCF_PINTO .EQU 65000
|
||||
PCF_ACKTO .EQU 65000
|
||||
PCF_BBTO .EQU 65000
|
||||
PCF_LABDLY .EQU 65000
|
||||
;
|
||||
PCF_STATUS .DB 00H
|
||||
;
|
||||
;--------------------------------------------------------------------------------
|
||||
;
|
||||
; RETURN NZ/FF IF TIMEOUT ERROR
|
||||
; RETURN NZ/01 IF FAILED TO RECEIVE ACKNOWLEDGE
|
||||
; RETURN Z/00 IF RECEIVED ACKNOWLEDGE
|
||||
;
|
||||
PCF_WAIT_FOR_ACK:
|
||||
PUSH HL
|
||||
LD HL,PCF_ACKTO
|
||||
;
|
||||
PCF_WFA0:
|
||||
IN A,(PCF_RS1) ; READ PIN
|
||||
LD (PCF_STATUS),A ; STATUS
|
||||
LD B,A
|
||||
;
|
||||
DEC HL ; SEE IF WE HAVE TIMED
|
||||
LD A,H ; OUT WAITING FOR PIN
|
||||
OR L ; EXIT IF
|
||||
JR Z,PCF_WFA1 ; WE HAVE
|
||||
;
|
||||
LD A,B ; OTHERWISE KEEP LOOPING
|
||||
AND PCF_PIN ; UNTIL WE GET PIN
|
||||
JR NZ,PCF_WFA0 ; OR TIMEOUT
|
||||
;
|
||||
LD A,B ; WE GOT PIN SO NOW
|
||||
AND PCF_LRB ; CHECK WE HAVE
|
||||
LD A,1
|
||||
JR Z,PCF_WFA2 ; RECEIVED ACKNOWLEDGE
|
||||
XOR A
|
||||
JR PCF_WFA2
|
||||
PCF_WFA1:
|
||||
CPL ; TIMOUT ERROR
|
||||
PCF_WFA2:
|
||||
POP HL ; EXIT WITH NZ = FF
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
; POLL THE BUS BUSY BIT TO DETERMINE IF BUS IS FREE.
|
||||
; RETURN WITH A=00H/Z STATUS IF BUS IS FREE
|
||||
; RETURN WITH A=FFH/NZ STATUS IF BUS
|
||||
;
|
||||
; AFTER RESET THE BUS BUSY BIT WILL BE SET TO 1 I.E. NOT BUSY
|
||||
;
|
||||
PCF_WAIT_FOR_BB:
|
||||
LD HL,PCF_BBTO
|
||||
PCF_WFBB0:
|
||||
IN A,(PCF_RS1)
|
||||
AND PCF_BB
|
||||
RET Z ; BUS IS FREE RETURN ZERO
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,PCF_WFBB0 ; REPEAT IF NOT TIMED OUT
|
||||
CPL ; RET NZ IF TIMEOUT
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
; DISPLAY ERROR MESSAGES
|
||||
;
|
||||
PCF_RDERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_RDFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_INIERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_NOPCF
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_SETERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_WRTFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_REGERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_REGFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_CLKERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_CLKFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_IDLERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_IDLFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_ACKERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_ACKFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_RDBERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_RDBFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_TOERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_TOFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_ARBERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_ARBFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_PINERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_PINFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_BBERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_BBFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_PRTERR:
|
||||
CALL _strout
|
||||
CALL _eolout
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
PCF_NOPCF .DB "NO DEVICE FOUND$"
|
||||
PCF_WRTFAIL .DB "SETTING DEVICE ID FAILED$"
|
||||
PCF_REGFAIL .DB "CLOCK REGISTER SELECT ERROR$"
|
||||
PCF_CLKFAIL .DB "CLOCK SET FAIL$"
|
||||
PCF_IDLFAIL .DB "BUS IDLE FAILED$"
|
||||
PCF_ACKFAIL .DB "FAILED TO RECEIVE ACKNOWLEDGE$"
|
||||
PCF_RDFAIL .DB "READ FAILED$"
|
||||
PCF_RDBFAIL .DB "READBYTES FAILED$"
|
||||
PCF_TOFAIL .DB "TIMEOUT ERROR$"
|
||||
PCF_ARBFAIL .DB "LOST ARBITRATION$"
|
||||
PCF_PINFAIL .DB "PIN FAIL$"
|
||||
PCF_BBFAIL .DB "BUS BUSY$"
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
#IF (PCF)
|
||||
_i2c_stop:
|
||||
PCF_STOP:
|
||||
LD A,PCF_STOP_ ; issue
|
||||
OUT (PCF_RS1),A ; stop
|
||||
RET ; command
|
||||
#ELSE
|
||||
;_i2c_stop:
|
||||
ld a,(oprval)
|
||||
res _scl,a
|
||||
res _sda,a
|
||||
out (I2C_BASE),a
|
||||
|
||||
set _scl,a
|
||||
out (I2C_BASE),a
|
||||
nop
|
||||
nop
|
||||
set _sda,a
|
||||
out (I2C_BASE),a
|
||||
|
||||
ld (oprval),a
|
||||
ret
|
||||
;
|
||||
_i2c_write: ; write
|
||||
ld a,(oprval) ; to i2c
|
||||
; bus
|
||||
ld b,8
|
||||
i2c1: res _sda,a
|
||||
rl c
|
||||
jr nc,i2c2
|
||||
set _sda,a
|
||||
i2c2: out (I2C_BASE),a
|
||||
set _scl,a
|
||||
out (I2C_BASE),a
|
||||
|
||||
#IF (SC126=0)
|
||||
ld d,a
|
||||
i2c3: in a,(I2C_BASE)
|
||||
bit _scl,a
|
||||
jr z,i2c3
|
||||
ld a,d
|
||||
#ENDIF
|
||||
res _scl,a
|
||||
out (I2C_BASE),a
|
||||
djnz i2c1
|
||||
|
||||
set _sda,a
|
||||
out (I2C_BASE),a
|
||||
set _scl,a
|
||||
out (I2C_BASE),a
|
||||
|
||||
ld d,a
|
||||
i2c4: in a,(I2C_BASE)
|
||||
#IF (SC126=0)
|
||||
bit _scl,a
|
||||
jr z,4b
|
||||
#ENDIF
|
||||
ld c,a
|
||||
ld a,d
|
||||
|
||||
res _scl,a
|
||||
out (I2C_BASE),a
|
||||
ld (oprval),a
|
||||
|
||||
xor a
|
||||
bit _sda,c
|
||||
ret z
|
||||
inc a
|
||||
|
||||
ret
|
||||
#ENDIF
|
||||
oprval: .db 0
|
||||
x: .db 0
|
||||
y: .db 0
|
||||
addr: .db 0
|
||||
rc: .db 0
|
||||
|
||||
.fill 128
|
||||
stack:
|
||||
.end
|
||||
116
Source/Apps/Test/I2C/pcfi2c.inc
Normal file
116
Source/Apps/Test/I2C/pcfi2c.inc
Normal file
@@ -0,0 +1,116 @@
|
||||
;==================================================================================================
|
||||
; PCF8584 Generic
|
||||
;==================================================================================================
|
||||
;
|
||||
PCF_BASE .EQU 0F0H
|
||||
PCF_ID .EQU 0AAH
|
||||
CPU_CLK .EQU 12
|
||||
|
||||
PCF_RS0 .EQU PCF_BASE
|
||||
PCF_RS1 .EQU PCF_RS0+1
|
||||
PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE
|
||||
|
||||
REGS0 .EQU PCF_BASE
|
||||
REGS1 .EQU REGS0+1
|
||||
;
|
||||
;T4LC512D .EQU 10100000B ; DEVICE IDENTIFIER
|
||||
;T4LC512A1 .EQU 00000000B ; DEVICE ADDRESS
|
||||
;T4LC512A2 .EQU 00001110B ; DEVICE ADDRESS
|
||||
;T4LC512A3 .EQU 00000010B ; DEVICE ADDRESS
|
||||
;T4LC512W .EQU 00000000B ; DEVICE WRITE
|
||||
;T4LC512R .EQU 00000001B ; DEVICE READ
|
||||
;
|
||||
;I2CDEV1W .EQU (T4LC512D+T4LC512A1+T4LC512W)
|
||||
;I2CDEV1R .EQU (T4LC512D+T4LC512A1+T4LC512R)
|
||||
;
|
||||
;I2CDEV2W .EQU (T4LC512D+T4LC512A2+T4LC512W)
|
||||
;I2CDEV2R .EQU (T4LC512D+T4LC512A2+T4LC512R)
|
||||
;
|
||||
;I2CDEV3W .EQU (T4LC512D+T4LC512A3+T4LC512W)
|
||||
;I2CDEV3R .EQU (T4LC512D+T4LC512A3+T4LC512R)
|
||||
;
|
||||
; CONTROL REGISTER BITS
|
||||
;
|
||||
PCF_PIN .EQU 10000000B
|
||||
PCF_ES0 .EQU 01000000B
|
||||
PCF_ES1 .EQU 00100000B
|
||||
PCF_ES2 .EQU 00010000B
|
||||
PCF_EN1 .EQU 00001000B
|
||||
PCF_STA .EQU 00000100B
|
||||
PCF_STO .EQU 00000010B
|
||||
PCF_ACK .EQU 00000001B
|
||||
;
|
||||
PCF_START_ .EQU (PCF_PIN | PCF_ES0 | PCF_STA | PCF_ACK)
|
||||
PCF_STOP_ .EQU (PCF_PIN | PCF_ES0 | PCF_STO | PCF_ACK)
|
||||
PCF_REPSTART_ .EQU ( PCF_ES0 | PCF_STA | PCF_ACK)
|
||||
PCF_IDLE_ .EQU (PCF_PIN | PCF_ES0 | PCF_ACK)
|
||||
;
|
||||
; STATUS REGISTER BITS
|
||||
;
|
||||
;PCF_PIN .EQU 10000000B
|
||||
PCF_INI .EQU 01000000B ; 1 if not initialized
|
||||
PCF_STS .EQU 00100000B
|
||||
PCF_BER .EQU 00010000B
|
||||
PCF_AD0 .EQU 00001000B
|
||||
PCF_LRB .EQU 00001000B
|
||||
PCF_AAS .EQU 00000100B
|
||||
PCF_LAB .EQU 00000010B
|
||||
PCF_BB .EQU 00000001B
|
||||
;
|
||||
; CLOCK CHIP FREQUENCIES
|
||||
;
|
||||
PCF_CLK3 .EQU 000H
|
||||
PCF_CLK443 .EQU 010H
|
||||
PCF_CLK6 .EQU 014H
|
||||
PCF_CLK8 .EQU 018H
|
||||
PCF_CLK12 .EQU 01cH
|
||||
;
|
||||
; TRANSMISSION FREQUENCIES
|
||||
;
|
||||
PCF_TRNS90 .EQU 000H ; 90 kHz */
|
||||
PCF_TRNS45 .EQU 001H ; 45 kHz */
|
||||
PCF_TRNS11 .EQU 002H ; 11 kHz */
|
||||
PCF_TRNS15 .EQU 003H ; 1.5 kHz */
|
||||
;
|
||||
; TIMEOUT AND DELAY VALUES (ARBITRARY)
|
||||
;
|
||||
PCF_PINTO .EQU 65000
|
||||
PCF_ACKTO .EQU 65000
|
||||
PCF_BBTO .EQU 65000
|
||||
PCF_LABDLY .EQU 65000
|
||||
;
|
||||
; DATA PORT REGISTERS
|
||||
;
|
||||
#IF (CPU_CLK = 443)
|
||||
PCF_CLK .EQU PCF_CLK443
|
||||
#ELSE
|
||||
#IF (CPU_CLK = 8)
|
||||
PCF_CLK .EQU PCF_CLK8
|
||||
#ELSE
|
||||
#IF (CPU_CLK = 12)
|
||||
PCF_CLK .EQU PCF_CLK12
|
||||
#ELSE ***ERROR
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
DS7_OUT .EQU 10000000B ; SELECT SQUARE WAVE FUNCTION
|
||||
DS7_SQWE .EQU 00010000B ; ENABLE SQUARE WAVE OUTPUT
|
||||
DS7_RATE .EQU 00000000B ; SET 1HZ OUPUT
|
||||
;
|
||||
DS7_DS1307 .EQU 11010000B ; DEVICE IDENTIFIER
|
||||
DS7_W .EQU 00000000B ; DEVICE WRITE
|
||||
DS7_R .EQU 00000001B ; DEVICE READ
|
||||
;
|
||||
DS7_READ .EQU (DS7_DS1307 | DS7_R) ; READ
|
||||
DS7_WRITE .EQU (DS7_DS1307 | DS7_W) ; WRITE
|
||||
;
|
||||
DS7_CTL .EQU (DS7_OUT | DS7_SQWE | DS7_RATE)
|
||||
;
|
||||
PCF8574 .EQU 01000000B ; DEVICE IDENTIFIER
|
||||
PCF8574A .EQU 00001110B ; DEVICE ADDRESS
|
||||
PCF8574W .EQU 00000000B ; DEVICE WRITE
|
||||
PCF8574R .EQU 00000001B ; DEVICE READ
|
||||
;
|
||||
I2CLCDR .EQU (PCF8574+PCF8574A+PCF8574R)
|
||||
I2CLCDW .EQU (PCF8574+PCF8574A+PCF8574W)
|
||||
540
Source/Apps/Test/I2C/rtcds7.asm
Normal file
540
Source/Apps/Test/I2C/rtcds7.asm
Normal file
@@ -0,0 +1,540 @@
|
||||
;==================================================================================================
|
||||
; PCF8584/DS1307 I2C DATE AND TIME UTILITY
|
||||
;==================================================================================================
|
||||
;
|
||||
.ECHO "rtcds7\n"
|
||||
;
|
||||
#INCLUDE "pcfi2c.inc"
|
||||
;
|
||||
.ORG 100H
|
||||
;
|
||||
DS7_START:
|
||||
LD (DS7_STK),SP ; SETUP A
|
||||
LD SP,DS7_LOC ; LOCAL STACK
|
||||
;
|
||||
CALL DS7_INIT ; INITIALIZE AND
|
||||
JR NZ,DS7_ERR ; RETURN WITH STATUS
|
||||
;
|
||||
LD A,(FCB+1) ; GET FIRST COMMAND LINE CHAR
|
||||
CP ' ' ; COMPARE TO BLANK. IF SO NO
|
||||
JR Z,DS7_ST0 ; ARGUMENTS SO DISLAY TIME AND DATE
|
||||
;
|
||||
LD A,(FCB+1) ; GET FIRST CHAR
|
||||
CP '/' ; IS IT INDICATING AN ARGUMENT
|
||||
JR NZ,DS7_ST0 ;
|
||||
;
|
||||
LD A,(FCB+2) ; GET NEXT CHARACTER
|
||||
CP 'D' ;
|
||||
JR NZ,DS7_ST1 ;
|
||||
;
|
||||
; /D SET DATE
|
||||
;
|
||||
JR DS7_EXIT
|
||||
;
|
||||
DS7_ST1:
|
||||
LD A,(FCB+2) ; GET NEXT CHARACTER
|
||||
CP 'T' ;
|
||||
JR NZ,DS7_ST2 ;
|
||||
;
|
||||
; /T SET TIME
|
||||
;
|
||||
JR DS7_EXIT
|
||||
;
|
||||
DS7_ST2:
|
||||
LD A,(FCB+2) ; GET NEXT CHARACTER
|
||||
CP 'S' ;
|
||||
JR NZ,DS7_ST3 ;
|
||||
;
|
||||
; /S SET TIME AND DATE
|
||||
;
|
||||
JR DS7_EXIT
|
||||
;
|
||||
DS7_ST3:
|
||||
;
|
||||
; UNREGOGNIZED ARGUMENT
|
||||
;
|
||||
JR DS7_EXIT
|
||||
;
|
||||
DS7_ST0:
|
||||
CALL DS7_RDC ; READ CLOCK DATA INTO BUFFER
|
||||
CALL DS7_DISP ; DISPLAY TIME AND DATE FROM BUFFER
|
||||
;
|
||||
DS7_EXIT:
|
||||
LD SP,(DS7_STK) ; RESTORE STACK
|
||||
RET ; AND EXIT
|
||||
;
|
||||
DS7_ERR:
|
||||
CALL PCF_INIERR ; DISPLAY ERROR
|
||||
JR DS7_EXIT ; END EXIT
|
||||
;
|
||||
DS7_STK .DW 2 ; SAVE STACK
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
; RTC READ
|
||||
;
|
||||
; 1. ISSUE SLAVE ADDRESS WITH START CONDITION AND WRITE STATUS
|
||||
; 2. OUTPUT THE ADDRESS TO ACCESS. (00H = START OF DS1307 REGISTERS)
|
||||
; 3. OUTPUT REPEAT START TO TRANSITION TO READ PROCESS
|
||||
; 4. ISSUE SLAVE ADDRESS WITH READ STATUS
|
||||
; 5. DO A DUMMY READ
|
||||
; 6. READ 8 BYTES STARTING AT ADDRESS PREVIOUSLY SET
|
||||
; 7. END READ WITH NON-ACKNOWLEDGE
|
||||
; 8. ISSUE STOP AND RELEASE BUS
|
||||
;
|
||||
DS7_RDC:
|
||||
LD A,DS7_WRITE ; SET SLAVE ADDRESS
|
||||
OUT (REGS0),A
|
||||
;
|
||||
CALL PCF_WAIT_FOR_BB
|
||||
JP NZ,PCF_BBERR
|
||||
;
|
||||
CALL PCF_START ; GENERATE START CONDITION
|
||||
CALL PCF_WAIT_FOR_PIN; AND ISSUE THE SLAVE ADDRESS
|
||||
CALL NZ,PCF_PINERR
|
||||
;
|
||||
LD A,0
|
||||
OUT (REGS0),A ; PUT ADDRESS MSB ON BUS
|
||||
CALL PCF_WAIT_FOR_PIN
|
||||
CALL NZ,PCF_PINERR
|
||||
;
|
||||
CALL PCF_REPSTART ; REPEAT START
|
||||
;
|
||||
LD A,DS7_READ ; ISSUE CONTROL BYTE + READ
|
||||
OUT (REGS0),A
|
||||
;
|
||||
CALL PCF_READI2C ; DUMMY READ
|
||||
;
|
||||
LD HL,DS7_BUF ; READ 8 BYTES INTO BUFFER
|
||||
LD B,8
|
||||
DS7_RL1:CALL PCF_READI2C
|
||||
LD (HL),A
|
||||
INC HL
|
||||
DJNZ DS7_RL1
|
||||
;
|
||||
#IF (0)
|
||||
LD A,8
|
||||
LD DE,DS7_BUF ; DISLAY DATA READ
|
||||
CALL PRTHEXBUF ;
|
||||
CALL NEWLINE
|
||||
#ENDIF
|
||||
;
|
||||
LD A,PCF_ES0 ; END WITH NOT-ACKNOWLEDGE
|
||||
OUT (REGS1),A ; AND RELEASE BUS
|
||||
NOP
|
||||
IN A,(REGS0)
|
||||
NOP
|
||||
DS7_WTPIN:
|
||||
IN A,(REGS1) ; READ S1 REGISTER
|
||||
BIT 7,A ; CHECK PIN STATUS
|
||||
JP NZ,DS7_WTPIN
|
||||
CALL PCF_STOP
|
||||
;
|
||||
IN A,(REGS0)
|
||||
RET
|
||||
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
; DISPLAY CLOCK INFORMATION FROM DATA STORED IN BUFFER
|
||||
;
|
||||
DS7_DISP:
|
||||
LD HL,DS7_CLKTBL
|
||||
DS7_CLP:LD C,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
CALL DS7_BCD
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
OR A
|
||||
RET Z
|
||||
CALL COUT
|
||||
INC HL
|
||||
JR DS7_CLP
|
||||
RET
|
||||
;
|
||||
DS7_CLKTBL:
|
||||
.DB 04H, 00111111B, '/'
|
||||
.DB 05H, 00011111B, '/'
|
||||
.DB 06H, 11111111B, ' '
|
||||
.DB 02H, 00011111B, ':'
|
||||
.DB 01H, 01111111B, ':'
|
||||
.DB 00H, 01111111B, 00H
|
||||
;
|
||||
DS7_BCD:PUSH HL
|
||||
LD HL,DS7_BUF ; READ VALUE FROM
|
||||
LD B,0 ; BUFFER, INDEXED BY A
|
||||
ADD HL,BC
|
||||
LD A,(HL)
|
||||
AND D ; MASK OFF UNNEEDED
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
ADD A,30H
|
||||
CALL COUT
|
||||
LD A,(HL)
|
||||
AND 00001111B
|
||||
ADD A,30H
|
||||
CALL COUT
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
DS7_BUF: .FILL 8,0 ; BUFFER FOR TIME, DATE AND CONTROL
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
PCF_START:
|
||||
LD A,PCF_START_
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
PCF_REPSTART:
|
||||
LD A,PCF_REPSTART_
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
PCF_STOP:
|
||||
LD A,PCF_STOP_
|
||||
OUT (REGS1),A
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
DS7_INIT:
|
||||
LD A,PCF_PIN ; S1=80H: S0 SELECTED, SERIAL
|
||||
OUT (REGS1),A ; INTERFACE OFF
|
||||
NOP
|
||||
IN A,(REGS1) ; CHECK TO SEE S1 NOW USED AS R/W CTRL.
|
||||
AND 07FH ; PCF8584 DOES THAT WHEN ESO IS ZERO
|
||||
RET NZ ; PCF_INIERR
|
||||
;
|
||||
LD A,PCF_OWN ; LOAD OWN ADDRESS IN S0,
|
||||
OUT (REGS0),A ; EFFECTIVE ADDRESS IS (OWN <<1)
|
||||
NOP
|
||||
IN A,(REGS0) ; CHECK IT IS REALLY WRITTEN
|
||||
CP PCF_OWN
|
||||
RET NZ ; PCF_SETERR
|
||||
;
|
||||
LD A,+(PCF_PIN | PCF_ES1) ; S1=0A0H
|
||||
OUT (REGS1),A ; NEXT BYTE IN S2
|
||||
NOP
|
||||
IN A,(REGS1)
|
||||
AND 07FH
|
||||
CP PCF_ES1
|
||||
RET NZ ; PCF_REGERR
|
||||
;
|
||||
LD A,PCF_CLK ; LOAD CLOCK REGISTER S2
|
||||
OUT (REGS0),A
|
||||
NOP
|
||||
IN A,(REGS0) ; CHECK IT'S REALLY WRITTEN, ONLY
|
||||
AND 1FH ; THE LOWER 5 BITS MATTER
|
||||
CP PCF_CLK
|
||||
RET NZ ; PCF_CLKERR
|
||||
;
|
||||
LD A,PCF_IDLE_
|
||||
OUT (REGS1),A
|
||||
NOP
|
||||
IN A,(REGS1)
|
||||
CP +(PCF_PIN | PCF_BB)
|
||||
RET NZ ; PCF_IDLERR
|
||||
;
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
PCF_HANDLE_LAB:
|
||||
;
|
||||
LD A,PCF_PIN
|
||||
OUT (REGS1),A
|
||||
LD A,PCF_ES0
|
||||
OUT (REGS1),A
|
||||
;
|
||||
LD HL,PCF_LABDLY
|
||||
PCF_LABLP:
|
||||
LD A,H
|
||||
OR L
|
||||
DEC HL
|
||||
JR NZ,PCF_LABLP
|
||||
;
|
||||
IN A,(REGS1)
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
; RETURN A=00/Z IF SUCCESSFULL
|
||||
; RETURN A=FF/NZ IF TIMEOUT
|
||||
; RETURN A=01/NZ IF LOST ARBITRATION
|
||||
; PCF_STATUS HOLDS LAST PCF STATUS
|
||||
;
|
||||
PCF_WAIT_FOR_PIN:
|
||||
PUSH HL
|
||||
LD HL,PCF_PINTO ; SET TIMEOUT VALUE
|
||||
|
||||
PCF_WFP0:
|
||||
IN A,(REGS1) ; GET BUS
|
||||
LD (PCF_STATUS),A ; STATUS
|
||||
LD B,A
|
||||
|
||||
DEC HL ; HAVE WE
|
||||
LD A,H ; TIMED OUT
|
||||
OR L
|
||||
JR Z,PCF_WFP1 ; YES WE HAVE, GO ACTION IT
|
||||
|
||||
LD A,B ;
|
||||
AND PCF_PIN ; IS TRANSMISSION COMPLETE?
|
||||
JR NZ,PCF_WFP0 ; KEEP ASKING IF NOT OR
|
||||
POP HL ; YES COMPLETE (PIN=0) RETURN WITH ZERO
|
||||
RET
|
||||
PCF_WFP1:
|
||||
LD A,B ; DID WE LOSE ARBITRATION?
|
||||
AND PCF_LAB ; IF A=0 THEN NO
|
||||
CPL
|
||||
JR NZ,PCF_WFP2 ; NO
|
||||
CALL PCF_HANDLE_LAB ; YES GO HANDLE IT
|
||||
LD (PCF_STATUS),A
|
||||
XOR A ; RETURN NZ, A=01H
|
||||
INC A
|
||||
PCF_WFP2:
|
||||
POP HL ; RET NZ, A=FF IF TIMEOUT
|
||||
RET
|
||||
;
|
||||
PCF_STATUS .DB 00H
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
;
|
||||
; RETURN NZ/FF IF TIMEOUT ERROR
|
||||
; RETURN NZ/01 IF FAILED TO RECEIVE ACKNOWLEDGE
|
||||
; RETURN Z/00 IF RECEIVED ACKNOWLEDGE
|
||||
;
|
||||
PCF_WAIT_FOR_ACK:
|
||||
PUSH HL
|
||||
LD HL,PCF_ACKTO
|
||||
;
|
||||
PCF_WFA0:
|
||||
IN A,(REGS1) ; READ PIN
|
||||
LD (PCF_STATUS),A ; STATUS
|
||||
LD B,A
|
||||
;
|
||||
DEC HL ; SEE IF WE HAVE TIMED
|
||||
LD A,H ; OUT WAITING FOR PIN
|
||||
OR L ; EXIT IF
|
||||
JR Z,PCF_WFA1 ; WE HAVE
|
||||
;
|
||||
LD A,B ; OTHERWISE KEEP LOOPING
|
||||
AND PCF_PIN ; UNTIL WE GET PIN
|
||||
JR NZ,PCF_WFA0 ; OR TIMEOUT
|
||||
;
|
||||
LD A,B ; WE GOT PIN SO NOW
|
||||
AND PCF_LRB ; CHECK WE HAVE
|
||||
LD A,1
|
||||
JR Z,PCF_WFA2 ; RECEIVED ACKNOWLEDGE
|
||||
XOR A
|
||||
JR PCF_WFA2
|
||||
PCF_WFA1:
|
||||
CPL ; TIMOUT ERROR
|
||||
PCF_WFA2:
|
||||
POP HL ; EXIT WITH NZ = FF
|
||||
RET
|
||||
;
|
||||
;--------------------------------------------------------------------------------
|
||||
;
|
||||
; HL POINTS TO DATA
|
||||
; DE = COUNT
|
||||
; A = 0 LAST A=1 NOT LAST
|
||||
;
|
||||
;
|
||||
;PCF_READBYTES: ; NOT FUNCTIONAL YET
|
||||
|
||||
LD (PCF_LBF),A ; SAVE LAST BYTE FLAG
|
||||
;
|
||||
INC DE ; INCREMENT NUMBER OF BYTES TO READ BY ONE -- DUMMY READ BYTE
|
||||
LD BC,0 ; SET BYTE COUNTER
|
||||
;
|
||||
PCF_RBL:PUSH BC
|
||||
CALL PCF_WAIT_FOR_PIN ; DO WE HAVE THE BUS?
|
||||
POP BC
|
||||
JR Z,PCF_RB1 ; YES
|
||||
CP 01H
|
||||
JR Z,PCF_RB3 ; NO - LOST ARBITRATION
|
||||
JR PCF_RB2 ; NO - TIMEOUT
|
||||
;
|
||||
PCF_RB1:
|
||||
LD A,(PCF_STATUS)
|
||||
AND PCF_LRB
|
||||
|
||||
|
||||
; IS THIS THE SECOND TO LAST BYTE TO GO?
|
||||
|
||||
PUSH DE ; SAVE COUNT
|
||||
DEC DE ; COUNT (DE) = NUMBER OF BYTES TO READ LESS 1
|
||||
EX DE,HL ; SAVE POINTER, PUT COUNT IN DE
|
||||
XOR A ; CLEAR CARRY FLAG
|
||||
SBC HL,BC ; DOES BYTE COUNTER = HL (NUMBER OF BYTES TO READ LESS 1)
|
||||
EX DE,HL ; RESTORE POINTER
|
||||
POP DE ; RESTORE COUNT
|
||||
|
||||
; Z = YES IT IS
|
||||
; NZ = NO IT ISN'T
|
||||
JR NZ,PCF_RB4
|
||||
;
|
||||
PCF_RB4:LD A,B ; IF FIRST READ DO A DUMMY
|
||||
OR C ; READ OTHERWISE READ AND SAVE
|
||||
JR NZ,PCF_RB5
|
||||
|
||||
IN A,(REGS0) ; DUMMY READ
|
||||
JR PCF_RB6
|
||||
|
||||
PCF_RB5:IN A,(REGS0) ; READ AND SAVE
|
||||
LD (HL),A
|
||||
;
|
||||
PCF_RB6: ; HAVE WE DONE ALL?
|
||||
|
||||
PUSH DE ; SAVE COUNT
|
||||
EX DE,HL ; SAVE POINTER, PUT COUNT IN DE
|
||||
XOR A ; CLEAR CARRY FLAG
|
||||
SBC HL,BC ; DOES BYTE COUNTER = HL (NUMBER OF BYTES TO READ)
|
||||
EX DE,HL ; RESTORE POINTER
|
||||
POP DE ; RESTORE COUNT
|
||||
;
|
||||
INC HL ; BUFFER POINTER
|
||||
INC BC ; COUNT
|
||||
;
|
||||
JR NZ,PCF_RBL ; REPEAT UNTIL COUNTS MATCH
|
||||
RET
|
||||
;
|
||||
PCF_RB2: ; TIMEOUT
|
||||
CALL PCF_STOP
|
||||
CALL PCF_TOERR
|
||||
RET
|
||||
;
|
||||
PCF_RB3: ; LOST ARBITRATION
|
||||
CALL PCF_ARBERR
|
||||
RET
|
||||
;
|
||||
PCF_LBF:
|
||||
.DB 0 ; LAST BYTE FLAG
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
; READ ONE BYTE FROM I2C
|
||||
; RETURNS DATA IN A
|
||||
; Z FLAG SET IS ACKNOWLEDGE RECEIVED (CORRECT OPERATION)
|
||||
;
|
||||
PCF_READI2C:
|
||||
IN A,(REGS1) ; READ S1 REGISTER
|
||||
BIT 7,A ; CHECK PIN STATUS
|
||||
JP NZ,PCF_READI2C
|
||||
BIT 3,A ; CHECK LRB=0
|
||||
JP NZ,PCF_RDERR
|
||||
IN A,(REGS0) ; GET DATA
|
||||
RET
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
; POLL THE BUS BUSY BIT TO DETERMINE IF BUS IS FREE.
|
||||
; RETURN WITH A=00H/Z STATUS IF BUS IS FREE
|
||||
; RETURN WITH A=FFH/NZ STATUS IF BUS
|
||||
;
|
||||
; AFTER RESET THE BUS BUSY BIT WILL BE SET TO 1 I.E. NOT BUSY
|
||||
;
|
||||
PCF_WAIT_FOR_BB:
|
||||
LD HL,PCF_BBTO
|
||||
PCF_WFBB0:
|
||||
IN A,(REGS1)
|
||||
AND PCF_BB
|
||||
RET Z ; BUS IS FREE RETURN ZERO
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,PCF_WFBB0 ; REPEAT IF NOT TIMED OUT
|
||||
CPL ; RET NZ IF TIMEOUT
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
; DISPLAY ERROR MESSAGES
|
||||
;
|
||||
PCF_RDERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_RDFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_INIERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_NOPCF
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_SETERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_WRTFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_REGERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_REGFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_CLKERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_CLKFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_IDLERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_IDLFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_ACKERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_ACKFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_RDBERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_RDBFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_TOERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_TOFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_ARBERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_ARBFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_PINERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_PINFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_BBERR:
|
||||
PUSH HL
|
||||
LD HL,PCF_BBFAIL
|
||||
JR PCF_PRTERR
|
||||
;
|
||||
PCF_PRTERR:
|
||||
CALL PRTSTR
|
||||
CALL NEWLINE
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
PCF_NOPCF .DB "NO DEVICE FOUND$"
|
||||
PCF_WRTFAIL .DB "SETTING DEVICE ID FAILED$"
|
||||
PCF_REGFAIL .DB "CLOCK REGISTER SELECT ERROR$"
|
||||
PCF_CLKFAIL .DB "CLOCK SET FAIL$"
|
||||
PCF_IDLFAIL .DB "BUS IDLE FAILED$"
|
||||
PCF_ACKFAIL .DB "FAILED TO RECEIVE ACKNOWLEDGE$"
|
||||
PCF_RDFAIL .DB "READ FAILED$"
|
||||
PCF_RDBFAIL .DB "READBYTES FAILED$"
|
||||
PCF_TOFAIL .DB "TIMEOUT ERROR$"
|
||||
PCF_ARBFAIL .DB "LOST ARBITRATION$"
|
||||
PCF_PINFAIL .DB "PIN FAIL$"
|
||||
PCF_BBFAIL .DB "BUS BUSY$"
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
#INCLUDE "i2ccpm.inc"
|
||||
;
|
||||
.FILL 128
|
||||
DS7_LOC:
|
||||
;
|
||||
.END
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user