mirror of https://github.com/wwarthen/RomWBW.git
committed by
GitHub
1569 changed files with 103449 additions and 21266 deletions
@ -0,0 +1,31 @@ |
|||||
|
name: Commit Build |
||||
|
|
||||
|
on: |
||||
|
push: |
||||
|
branches: |
||||
|
- master |
||||
|
tags-ignore: |
||||
|
- v* |
||||
|
|
||||
|
jobs: |
||||
|
build: |
||||
|
|
||||
|
runs-on: ubuntu-latest |
||||
|
|
||||
|
steps: |
||||
|
- uses: rlespinasse/github-slug-action@1.1.0 |
||||
|
|
||||
|
- uses: actions/checkout@v2 |
||||
|
|
||||
|
- name: Build |
||||
|
run: | |
||||
|
sudo apt-get install libncurses-dev |
||||
|
make |
||||
|
make clean |
||||
|
rm -rf .git* |
||||
|
|
||||
|
- name: Upload Artifact |
||||
|
uses: actions/upload-artifact@v1 |
||||
|
with: |
||||
|
name: RomWBW-${{env.GITHUB_REF_SLUG}}-${{env.GITHUB_SHA_SHORT}} |
||||
|
path: . |
||||
@ -0,0 +1,51 @@ |
|||||
|
name: Release Build |
||||
|
|
||||
|
on: |
||||
|
release: |
||||
|
types: published |
||||
|
|
||||
|
jobs: |
||||
|
build: |
||||
|
|
||||
|
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: Build |
||||
|
run: | |
||||
|
sudo apt-get install libncurses-dev |
||||
|
make |
||||
|
make clean |
||||
|
rm -rf .git* |
||||
|
|
||||
|
- name: Upload Artifact |
||||
|
uses: actions/upload-artifact@v1 |
||||
|
with: |
||||
|
name: RomWBW-${{env.PKGLBL}}-Package |
||||
|
path: . |
||||
|
|
||||
|
- name: Create Package Archive |
||||
|
run: | |
||||
|
zip -r Package.zip . |
||||
|
|
||||
|
- name: Upload Release Asset |
||||
|
uses: actions/upload-release-asset@v1 |
||||
|
env: |
||||
|
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} |
||||
|
with: |
||||
|
upload_url: ${{github.event.release.upload_url}} |
||||
|
asset_path: Package.zip |
||||
|
asset_name: RomWBW-${{env.PKGLBL}}-Package.zip |
||||
|
asset_content_type: application/zip |
||||
@ -0,0 +1,96 @@ |
|||||
|
# Not sure what patterns to apply |
||||
|
# So ignoring all generated files explicitly |
||||
|
|
||||
|
**/*.[Bb][Ii][Nn] |
||||
|
**/*.[Cc][Oo][Mm] |
||||
|
**/*.[Rr][Oo][Mm] |
||||
|
**/*.com |
||||
|
**/*.eeprom |
||||
|
**/*.hex |
||||
|
**/*.img |
||||
|
**/*.lib |
||||
|
**/*.lst |
||||
|
**/*.o |
||||
|
**/*.prn |
||||
|
**/*.rel |
||||
|
**/*.sym |
||||
|
**/*.sys |
||||
|
**/*.tmp |
||||
|
**/*/font*.asm |
||||
|
|
||||
|
Binary/**/*.mym |
||||
|
Binary/**/*.pt3 |
||||
|
|
||||
|
Source/**/eeprom |
||||
|
Source/Apps/Assign.com |
||||
|
Source/Apps/FDU/FDU.COM |
||||
|
Source/Apps/Format.com |
||||
|
Source/Apps/IntTest.com |
||||
|
Source/Apps/Mode.com |
||||
|
Source/Apps/OSLdr.com |
||||
|
Source/Apps/RTC.com |
||||
|
Source/Apps/SysCopy.com |
||||
|
Source/Apps/SysGen.com |
||||
|
Source/Apps/Talk.com |
||||
|
Source/Apps/Timer.com |
||||
|
Source/Apps/Tune/Tune.com |
||||
|
Source/BPBIOS/bpsys.bak |
||||
|
Source/BPBIOS/bpsys.dat |
||||
|
Source/BPBIOS/def-ww.lib |
||||
|
Source/CPM3/bios3.spr |
||||
|
Source/CPM3/bnkbios3.spr |
||||
|
Source/CPM3/gencpm.dat |
||||
|
Source/CPM3/options.lib |
||||
|
Source/CPM3/zpmbios3.spr |
||||
|
Source/HBIOS/Blank512KB.dat |
||||
|
Source/HBIOS/build.inc |
||||
|
Source/Images/blank144 |
||||
|
Source/Images/blankhd |
||||
|
Source/Prop/Spin/ParPortProp.list |
||||
|
Source/Prop/Spin/PropIO.list |
||||
|
Source/Prop/Spin/PropIO2.list |
||||
|
Source/ZPM3/bnkbios3.spr |
||||
|
Source/ZPM3/gencpm.com |
||||
|
Source/ZPM3/gencpm.com |
||||
|
Source/ZPM3/gencpm.dat |
||||
|
|
||||
|
Tools/Linux |
||||
|
Tools/Darwin |
||||
|
|
||||
|
Tools/unix/bin2asm/bin2asm |
||||
|
Tools/unix/cpmtools/cpmchattr |
||||
|
Tools/unix/cpmtools/cpmchmod |
||||
|
Tools/unix/cpmtools/cpmcp |
||||
|
Tools/unix/cpmtools/cpmls |
||||
|
Tools/unix/cpmtools/cpmrm |
||||
|
Tools/unix/cpmtools/fsck.cpm |
||||
|
Tools/unix/cpmtools/fsed.cpm |
||||
|
Tools/unix/cpmtools/mkfs.cpm |
||||
|
Tools/unix/lzsa/lzsa |
||||
|
Tools/unix/uz80as/uz80as |
||||
|
Tools/unix/zx/config.h |
||||
|
Tools/unix/zx/zx |
||||
|
|
||||
|
!Source/ver.lib |
||||
|
!Source/Apps/FAT/FAT.COM |
||||
|
!Source/BPBIOS/bpbuild.com |
||||
|
!Source/BPBIOS/movp112.com |
||||
|
!Source/BPBIOS/Z34RCP11/cledinst.com |
||||
|
!Source/BPBIOS/Z34RCP11/cledsave.com |
||||
|
!Source/Fonts |
||||
|
!Source/Images/**/*.[Cc][Oo][Mm] |
||||
|
!Source/RomDsk/**/*.[Cc][Oo][Mm] |
||||
|
!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/ZPM3/gencpm.com |
||||
|
Source/ZPM3/startzpm.com |
||||
|
Source/ZPM3/zccp.com |
||||
|
Source/ZPM3/zpmldr.com |
||||
@ -0,0 +1,10 @@ |
|||||
|
TOOLS = ../../Tools |
||||
|
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.com Tunes/*) |
||||
|
|
||||
|
include $(TOOLS)/Makefile.inc |
||||
|
|
||||
|
all:: |
||||
|
mkdir -p Tunes |
||||
|
|
||||
|
clobber:: |
||||
|
rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.COM *.BIN Tunes/*.mym Tunes/*.pt? |
||||
@ -1,4 +0,0 @@ |
|||||
@echo off |
|
||||
setlocal |
|
||||
|
|
||||
if exist *.pt? del *.pt? |
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,167 @@ |
|||||
|
*********************************************************************** |
||||
|
*** *** |
||||
|
*** 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) |
||||
@ -0,0 +1,8 @@ |
|||||
|
TOOLS = ../Tools |
||||
|
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.img *.rom *.com *.eeprom) |
||||
|
SUBDIRS = Apps |
||||
|
|
||||
|
include $(TOOLS)/Makefile.inc |
||||
|
|
||||
|
clobber:: |
||||
|
rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom |
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,429 +0,0 @@ |
|||||
================================================================ |
|
||||
FDTST v3.1 for N8VEM DISKIO / DISKIO V3 / ZETA / DIDE / N8 |
|
||||
================================================================ |
|
||||
|
|
||||
Updated JuLY 1, 2012 |
|
||||
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. Additonal 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 similer to existing applications, but I have |
|
||||
not seen any other applications for DISK I/O 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. Thanks! |
|
||||
|
|
||||
General Usage |
|
||||
------------- |
|
||||
|
|
||||
In general, usage is self explanatory. 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 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 one of the support hardware platforms. |
|
||||
You need to start with either an N8VEM SBC, backplane, and ECB DISK I/O |
|
||||
card or a Zeta SBC. Additionally, a floppy drive connected via an |
|
||||
appropriate cable: |
|
||||
|
|
||||
DISKIO - no twist in cable, drive unit 0/1 must be selected by jumper on drive |
|
||||
ZETA - cable with twist, unit 0 after twist, unit 1 before twist |
|
||||
DIDE/N8 - cable with twist, unit 0 before twist, unit 1 after twist |
|
||||
|
|
||||
|
|
||||
It is preferable that the BIOS you use does not have DISK I/O support |
|
||||
enabled since the application assumes it has complete control of the |
|
||||
DISK I/O hardware. |
|
||||
|
|
||||
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 V3 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 does not have any relevant jumper settings. |
|
||||
|
|
||||
DIDE 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. |
|
||||
|
|
||||
|
|
||||
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. |
|
||||
|
|
||||
Polling: Traditional polled input/output. Works well and very reliable |
|
||||
including 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: Input/output is interrupt driven. Works pretty well, but |
|
||||
is not able to recover from some errors. For example, if there is |
|
||||
no disk in the drive, this mode will just hang until a disk is inserted. |
|
||||
This mode REQUIRES that interrupts be enabled on the DISK I/O via |
|
||||
jumper at J1. On Zeta it requires the INT/NMI jumper be set for |
|
||||
INT. Mode not supported on DIDE or N8. Some BIOS variants will not |
|
||||
handle interrupts during boot. |
|
||||
|
|
||||
Fast Interrupt: 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. As above |
|
||||
you MUST have the appropriate jumpers for DISKIO and Zeta. DIDE |
|
||||
does not support this mode. |
|
||||
|
|
||||
INT/WAIT: Same as Fast Interrupt, but uses CPU wait instead of |
|
||||
actual interrupt. Subject to all the same issues as Fast |
|
||||
Interrupt, but does not need J1 shorted. J3 is irrelevant. |
|
||||
This mode is available on only on DISKIO (and not DISKIO V3). |
|
||||
|
|
||||
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 known to not work on N8VEM DISKIO!!! It is included |
|
||||
for testing only. It is dependent on setting of J3. This |
|
||||
mode is NOT available on Zeta, DIDE, N8, or DISKIO V3. |
|
||||
|
|
||||
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 |
|
||||
--------- |
|
||||
|
|
||||
I distribute the binary version of the application optimized for |
|
||||
20MHz CPUs. There is a configuration variable called CPUFREQ |
|
||||
at the top of the source file. Ideally, you should build |
|
||||
with that set appropriately. However, I have found that the |
|
||||
default build setting of 20MHz seems to work for 4-20MHz CPUs. |
|
||||
|
|
||||
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 FDTST 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 FDTST 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 |
|
||||
N8VEM Google Group https://groups.google.com/forum/#!forum/n8vem. |
|
||||
|
|
||||
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. |
|
||||
@ -1,45 +0,0 @@ |
|||||
Assembling the RomWBW firmware under Linux. |
|
||||
|
|
||||
Note: Updated on 6/25/2013 to eliminate the need for the separate Linux |
|
||||
makefile. The standard makefile now has conditionals to allow it to be |
|
||||
used under Windows or Linux (I hope) --WW |
|
||||
|
|
||||
This method has been used under Ubuntu Linux and may have to be adapted for |
|
||||
other distributions. It is a bit more involved than the Windows procedure. |
|
||||
|
|
||||
What you need |
|
||||
You will need the TASM assembler, make, dos2unix and cpmtools. |
|
||||
|
|
||||
The TASM assembler is shareware and the Linux version is only available as |
|
||||
source code from the Author. I found one bug during compiling version 3.2 for |
|
||||
Ubuntu. In /src/tasm.c change the reference CLK_TIC to CLOCKS_PER_SEC. |
|
||||
After compiling install the tasm executable to /usr/local/bin and the table |
|
||||
files to /usr/local/lib. If you choose to place them somewhere else you will |
|
||||
have to edit the "makefile.linux" file to suit. |
|
||||
|
|
||||
The make, dos2unix and cpmtools packages are found in the Linux repository and |
|
||||
installed as for any other package. |
|
||||
|
|
||||
Before assembly |
|
||||
Some changes need to be made to cater for the differences between Linux and the |
|
||||
DOS/Windows environments. The examples below refer to the /RomWBW/current |
|
||||
directory, you'll have to allow for the stable or branches directories if used. |
|
||||
These are all done from a terminal. (: is end of the command prompt) |
|
||||
|
|
||||
1. Go to the RomWBW Source directory.e.g. |
|
||||
:cd /n8vem/RomWBW/current/Source |
|
||||
|
|
||||
2. The Linux version of TASM can't handle the CR-LF line endings. So from the |
|
||||
command prompt use dos2unix to convert all the source files. |
|
||||
:~/RomWBW/current/Source dos2unix -f *.asm *.inc *.z80 *.lib diskdefs |
|
||||
|
|
||||
3. You'll have to alter the disk definitions for the cpmtools package to cater |
|
||||
for the new roms. Easiest way is to copy the one given in the source over the |
|
||||
old. This must be done as superuser. |
|
||||
:~/RomWBW/current/Source sudo cp diskdefs /etc/cpmtools/diskdefs |
|
||||
|
|
||||
4. From now on it's the same as using the DOS/Windows instructions in Build.txt. |
|
||||
Make any last changes, go to the Source directory and make |
|
||||
:~/RomWBW/current/Source make clean ; make |
|
||||
|
|
||||
DGG |
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,19 +0,0 @@ |
|||||
The table below can be used to determine the correct value for CLKDIV AND CNTLB |
|
||||
in an Z180 (N8) configuration file. OSC Freq refers to the hardware clock |
|
||||
oscillator frequency you are using. You can then choose a CLKDIV value which |
|
||||
will result in the CPU speed (frequency) shown below the oscillator frequency. |
|
||||
|
|
||||
Using your oscillator frequency (OSC) and chosen value for CLKDIV, you can |
|
||||
use the appropriate column to derive values to use for CNTLB for different |
|
||||
baud rates. |
|
||||
|
|
||||
----- CLKDIV = 0 ----- ----- CLKDIV = 1 ----- |
|
||||
OSC Freq (MHz) 6.144 12.288 18.432 6.144 12.288 18.432 |
|
||||
CPU Freq (MHz) 3.072 6.144 9.216 6.144 12.288 18.432 |
|
||||
|
|
||||
1200 baud 04H 05H 24H 05H 06H 25H |
|
||||
2400 baud 03H 04H 23H 04H 05H 24H |
|
||||
4800 baud 02H 03H 22H 03H 04H 23H |
|
||||
9600 baud 01H 02H 21H 02H 03H 22H |
|
||||
19200 baud 00H 01H 20H 01H 02H 21H |
|
||||
38400 baud --- 00H --- 00H 01H 20H |
|
||||
@ -0,0 +1,564 @@ |
|||||
|
|
||||
|
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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,19 @@ |
|||||
|
all: |
||||
|
cd Tools/unix ; make |
||||
|
cd Source ; make |
||||
|
cd Source/Images ; make |
||||
|
|
||||
|
clean: |
||||
|
cd Tools/unix ; make clean |
||||
|
cd Source ; make clean |
||||
|
cd Binary ; make clean |
||||
|
|
||||
|
clobber: |
||||
|
cd Tools/unix ; make clobber |
||||
|
cd Source ; make clobber |
||||
|
cd Binary ; make clobber |
||||
|
rm -f typescript |
||||
|
|
||||
|
diff: |
||||
|
cd Source ; make diff |
||||
|
|
||||
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -0,0 +1,49 @@ |
|||||
|
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. |
||||
@ -0,0 +1,7 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
REM FAT.com is currently distributed as a binary application, so |
||||
|
REM it is not built here. |
||||
|
|
||||
|
copy /Y FAT.com ..\..\..\Binary\Apps\ |
||||
@ -0,0 +1,5 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
REM FAT.com is currently distributed as a binary application, so |
||||
|
REM we do not delete the .COM file. |
||||
Binary file not shown.
@ -0,0 +1,674 @@ |
|||||
|
GNU GENERAL PUBLIC LICENSE |
||||
|
Version 3, 29 June 2007 |
||||
|
|
||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
||||
|
Everyone is permitted to copy and distribute verbatim copies |
||||
|
of this license document, but changing it is not allowed. |
||||
|
|
||||
|
Preamble |
||||
|
|
||||
|
The GNU General Public License is a free, copyleft license for |
||||
|
software and other kinds of works. |
||||
|
|
||||
|
The licenses for most software and other practical works are designed |
||||
|
to take away your freedom to share and change the works. By contrast, |
||||
|
the GNU General Public License is 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. We, the Free Software Foundation, use the |
||||
|
GNU General Public License for most of our software; it applies also to |
||||
|
any other work released this way by its authors. You can apply it to |
||||
|
your programs, too. |
||||
|
|
||||
|
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. |
||||
|
|
||||
|
To protect your rights, we need to prevent others from denying you |
||||
|
these rights or asking you to surrender the rights. Therefore, you have |
||||
|
certain responsibilities if you distribute copies of the software, or if |
||||
|
you modify it: responsibilities to respect the freedom of others. |
||||
|
|
||||
|
For example, if you distribute copies of such a program, whether |
||||
|
gratis or for a fee, you must pass on to the recipients the same |
||||
|
freedoms that you received. You must make sure that they, too, receive |
||||
|
or can get the source code. And you must show them these terms so they |
||||
|
know their rights. |
||||
|
|
||||
|
Developers that use the GNU GPL protect your rights with two steps: |
||||
|
(1) assert copyright on the software, and (2) offer you this License |
||||
|
giving you legal permission to copy, distribute and/or modify it. |
||||
|
|
||||
|
For the developers' and authors' protection, the GPL clearly explains |
||||
|
that there is no warranty for this free software. For both users' and |
||||
|
authors' sake, the GPL requires that modified versions be marked as |
||||
|
changed, so that their problems will not be attributed erroneously to |
||||
|
authors of previous versions. |
||||
|
|
||||
|
Some devices are designed to deny users access to install or run |
||||
|
modified versions of the software inside them, although the manufacturer |
||||
|
can do so. This is fundamentally incompatible with the aim of |
||||
|
protecting users' freedom to change the software. The systematic |
||||
|
pattern of such abuse occurs in the area of products for individuals to |
||||
|
use, which is precisely where it is most unacceptable. Therefore, we |
||||
|
have designed this version of the GPL to prohibit the practice for those |
||||
|
products. If such problems arise substantially in other domains, we |
||||
|
stand ready to extend this provision to those domains in future versions |
||||
|
of the GPL, as needed to protect the freedom of users. |
||||
|
|
||||
|
Finally, every program is threatened constantly by software patents. |
||||
|
States should not allow patents to restrict development and use of |
||||
|
software on general-purpose computers, but in those that do, we wish to |
||||
|
avoid the special danger that patents applied to a free program could |
||||
|
make it effectively proprietary. To prevent this, the GPL assures that |
||||
|
patents cannot be used to render the program non-free. |
||||
|
|
||||
|
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 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. Use with the GNU Affero General Public License. |
||||
|
|
||||
|
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 Affero 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 special requirements of the GNU Affero General Public License, |
||||
|
section 13, concerning interaction through a network will apply to the |
||||
|
combination as such. |
||||
|
|
||||
|
14. Revised Versions of this License. |
||||
|
|
||||
|
The Free Software Foundation may publish revised and/or new versions of |
||||
|
the GNU 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 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 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 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 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 General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
|
||||
|
Also add information on how to contact you by electronic and paper mail. |
||||
|
|
||||
|
If the program does terminal interaction, make it output a short |
||||
|
notice like this when it starts in an interactive mode: |
||||
|
|
||||
|
<program> Copyright (C) <year> <name of author> |
||||
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
||||
|
This is free software, and you are welcome to redistribute it |
||||
|
under certain conditions; type `show c' for details. |
||||
|
|
||||
|
The hypothetical commands `show w' and `show c' should show the appropriate |
||||
|
parts of the General Public License. Of course, your program's commands |
||||
|
might be different; for a GUI interface, you would use an "about box". |
||||
|
|
||||
|
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 GPL, see |
||||
|
<http://www.gnu.org/licenses/>. |
||||
|
|
||||
|
The GNU General Public License does not permit incorporating your program |
||||
|
into proprietary programs. If your program is a subroutine library, you |
||||
|
may consider it more useful to permit linking proprietary applications with |
||||
|
the library. If this is what you want to do, use the GNU Lesser General |
||||
|
Public License instead of this License. But first, please read |
||||
|
<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
||||
@ -0,0 +1,6 @@ |
|||||
|
OBJECTS = FAT.com |
||||
|
NODELETE = FAT.com |
||||
|
DEST = ../../../Binary/Apps |
||||
|
|
||||
|
TOOLS=../../../Tools |
||||
|
include $(TOOLS)/Makefile.inc |
||||
@ -0,0 +1,101 @@ |
|||||
|
RomWBW HBIOS CP/M FAT Utility ("FAT.COM") |
||||
|
|
||||
|
Author: Wayne Warthen |
||||
|
Updated: 11-Oct-2019 |
||||
|
|
||||
|
Application to manipulate and exchange files with a FAT (DOS) |
||||
|
filesystem. Runs on any HBIOS hosted CP/M implementation. |
||||
|
|
||||
|
USAGE: |
||||
|
FAT DIR <path> |
||||
|
FAT COPY <src> <dst> |
||||
|
FAT REN <from> <to> |
||||
|
FAT DEL <path>[<file>|<dir>] |
||||
|
FAT MD <path> |
||||
|
FAT FORMAT <drv> |
||||
|
|
||||
|
CP/M filespec: <d>:FILENAME.EXT (<d> is CP/M drive letter A-P) |
||||
|
FAT filespec: <u>:/DIR/FILENAME.EXT (<u> is disk unit #) |
||||
|
|
||||
|
LICENSE: |
||||
|
GNU GPLv3 (see file LICENSE.txt) |
||||
|
|
||||
|
NOTES: |
||||
|
- Partitioned or non-partitioned media is handled automatically. |
||||
|
A floppy drive is a good example of a non-partitioned FAT |
||||
|
filesystem and will be recognized. Larger media will typically |
||||
|
have a partition table which will be recognized by the |
||||
|
application to find the FAT filesystem. |
||||
|
|
||||
|
- Although RomWBW-style CP/M media does not know anything about |
||||
|
partition tables, it is entirely possible to have media that |
||||
|
has both CP/M and FAT file systems on it. This is accomplished |
||||
|
by creating a FAT filesystem on the media that starts on a track |
||||
|
beyond the last track used by CP/M. Each CP/M slice on a |
||||
|
media will occupy a little over 8MB. So, make sure to start |
||||
|
your FAT partition beyond (slice count) * 8MB. |
||||
|
|
||||
|
- The application infers whether you are attempting to reference |
||||
|
a FAT or CP/M filesystem via the drive specifier (char before ':'). |
||||
|
A numeric drive character specifies the HBIOS disk unit number |
||||
|
for FAT access. An alpha (A-P) character indicates a CP/M |
||||
|
file system access targeting the specified drive letter. If there |
||||
|
is no drive character specified, the current CP/M filesystem and |
||||
|
current CP/M drive is assumed. For example: |
||||
|
|
||||
|
"2:README.TXT" refers to FAT file README.TXT on disk unit #2 |
||||
|
"C:README.TXT" refers to CP/M file README.TXT on CP/M drive C |
||||
|
"README.TXT" refers to CP/M file README.TXT on current CP/M drive |
||||
|
|
||||
|
- Files with SYS, HIDDEN, or R/O only attributes are not given |
||||
|
any special treatment. Such files are found and processed |
||||
|
like any other file. However, any attempt to write to a |
||||
|
read-only file will fail and the application will abort. |
||||
|
|
||||
|
- It is not currently possible to reference CP/M user areas other |
||||
|
than the current user. To copy files to alternate user areas, |
||||
|
you must switch to the desired user number first or use an |
||||
|
additional step to copy the file to the desired user area. |
||||
|
|
||||
|
- Accessing FAT filesystems on a floppy requires the use of |
||||
|
RomWBW HBIOS v2.9.1-pre.13 or greater. |
||||
|
|
||||
|
- Files written are not verified. |
||||
|
|
||||
|
- Wildcard matching in FAT filesystems is a bit unusual as |
||||
|
implemented by FatFs. See FatFs documentation. |
||||
|
|
||||
|
BUILD NOTES: |
||||
|
- Source is maintained on GitHub at https://github.com/wwarthen/FAT |
||||
|
|
||||
|
- Application is based on FatFs. FatFs source is included. |
||||
|
|
||||
|
- SDCC compiler is required to build (v3.9.0 known working). |
||||
|
|
||||
|
- ZX CP/M emulator is required to build (from RomWBW distribution). |
||||
|
|
||||
|
- See Build.cmd for sample build script under Windows. References |
||||
|
to SDCC and ZX must be updated for your environment. |
||||
|
|
||||
|
- Note that ff.c (core FatFs code) generates quite a few compiler |
||||
|
warnings (all appear to be benign). |
||||
|
|
||||
|
TO DO: |
||||
|
- Allow ^C to abort any operation in progress. |
||||
|
|
||||
|
- Handle wildcards in destination, e.g.: |
||||
|
"FAT REN 2:/*.TXT 2:/*.BAK" |
||||
|
|
||||
|
- Do something intelligent with R/O and SYS files on FAT |
||||
|
|
||||
|
HISTORY: |
||||
|
2-May-2019: v0.9 (beta) initial release |
||||
|
7-May-2019: v0.9.1 (beta) added REN and DEL |
||||
|
8-May-2019: v0.9.2 (beta) handle file collisions w/ user prompt |
||||
|
8-Oct-2019: v0.9.3 (beta) fixed incorrect filename buffer size (MAX_FN) |
||||
|
10-Oct-2019: v0.9.4 (beta) upgraded to FatFs R0.13c |
||||
|
10-Oct-2019: v0.9.5 (beta) added MD (make directory) |
||||
|
10-Oct-2019: v0.9.6 (beta) added FORMAT |
||||
|
11-Oct-2019: v0.9.7 (beta) fix FORMAT to use existing partition table entries |
||||
|
add attributes to directory listing |
||||
|
|
||||
@ -0,0 +1,8 @@ |
|||||
|
OBJECTS = FDU.com |
||||
|
DOCS = FDU.txt |
||||
|
DEST = ../../../Binary/Apps |
||||
|
DOCDEST = ../../../Doc |
||||
|
TOOLS = ../../../Tools |
||||
|
include $(TOOLS)/Makefile.inc |
||||
|
|
||||
|
%.com: USETASM=1 |
||||
@ -0,0 +1,14 @@ |
|||||
|
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 |
||||
|
DEST = ../../Binary/Apps |
||||
|
TOOLS =../../Tools |
||||
|
|
||||
|
include $(TOOLS)/Makefile.inc |
||||
|
|
||||
|
USETASM = 1 |
||||
|
|
||||
|
Survey.com: USETASM=0 |
||||
|
|
||||
File diff suppressed because it is too large
@ -0,0 +1,12 @@ |
|||||
|
OBJECTS = Tune.com |
||||
|
DEST = ../../../Binary/Apps |
||||
|
TOOLS = ../../../Tools |
||||
|
|
||||
|
include $(TOOLS)/Makefile.inc |
||||
|
|
||||
|
Tune.com: Tune.asm |
||||
|
$(TASM) Tune.asm Tune.com |
||||
|
|
||||
|
all:: |
||||
|
mkdir -p $(DEST)/Tunes |
||||
|
cp Tunes/* $(DEST)/Tunes |
||||
@ -0,0 +1,13 @@ |
|||||
|
#OBJECTS = xm.com xmuf.com
|
||||
|
OBJECTS = xm.com |
||||
|
DEST = ../../../Binary/Apps |
||||
|
TOOLS = ../../../Tools |
||||
|
OTHERS = *.hex |
||||
|
|
||||
|
include $(TOOLS)/Makefile.inc |
||||
|
|
||||
|
xm.com: xmdm125.hex xmhb.hex |
||||
|
$(ZXCC) $(CPM)/MLOAD25 XM=xmdm125,xmhb |
||||
|
|
||||
|
#xmuf.com: xmdm125.hex xmuf.hex
|
||||
|
# $(ZXCC) $(CPM)/MLOAD25 XMUF=xmdm125,xmuf
|
||||
@ -0,0 +1,331 @@ |
|||||
|
;======================================================================= |
||||
|
; |
||||
|
; XMUF.Z80 - XMODEMXX PATCH FILE FOR ECB USB-FIFO |
||||
|
; |
||||
|
; Phil Summers - difficultylevelhigh@gmail.com |
||||
|
; Updated: 2019-08-16 |
||||
|
; |
||||
|
;======================================================================= |
||||
|
; |
||||
|
; Overlay file is Z80, build with M80: |
||||
|
; M80 =XMHB |
||||
|
; L80 XMHB,XMHB/N/X/E |
||||
|
; |
||||
|
.Z80 |
||||
|
ASEG |
||||
|
; |
||||
|
NO EQU 0 |
||||
|
YES EQU NOT NO |
||||
|
; |
||||
|
ERRDET EQU NO ; detect parity/framing/overrun errs |
||||
|
; |
||||
|
BASE EQU 100H ; start of cp/m normal program area |
||||
|
; |
||||
|
BDOS EQU 00005H ; BDOS function dispatch vector |
||||
|
; |
||||
|
;======================================================================= |
||||
|
; |
||||
|
; Jump table: The jump table must be in exactly the same sequence as the |
||||
|
; one in XMODEM. Note the ORG of 103H - This jump table has no jump to |
||||
|
; 'BEGIN'. |
||||
|
; |
||||
|
ORG BASE + 3 ;start after 'JMP BEGIN' |
||||
|
; |
||||
|
JP CONOUT ;must be 00000h if not used, see below |
||||
|
JP MINIT ;initialization routine (if needed) |
||||
|
JP UNINIT ;undo whatever 'MINIT' did (or return) |
||||
|
JPTBL: |
||||
|
JP SENDR ;send character (via pop psw) |
||||
|
JP CAROK ;test for carrier |
||||
|
JP MDIN ;receive data byte |
||||
|
JP GETCHR ;get character from modem |
||||
|
JP RCVRDY ;check receive ready |
||||
|
JP SNDRDY ;check send ready |
||||
|
JP SPEED ;get speed value for file transfer time |
||||
|
JP EXTRA1 ;extra for custom routine |
||||
|
JP EXTRA2 ;extra for custom routine |
||||
|
JP EXTRA3 ;extra for custom routine |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Output character to console |
||||
|
; |
||||
|
CONOUT EQU 0 ; not used |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Initialize modem |
||||
|
; |
||||
|
; This procedure has been usurped to dynamically detect the type |
||||
|
; of system we are running on and install the *real* jump table |
||||
|
; entries as appropriate. |
||||
|
; |
||||
|
MINIT: |
||||
|
; |
||||
|
; Announce |
||||
|
LD DE,RBC ; RetroBrew Computers |
||||
|
LD C,9 ; BDOS string display function |
||||
|
CALL BDOS ; Do it |
||||
|
; |
||||
|
; Identify BIOS (RomWBW HBIOS or UNA UBIOS) |
||||
|
CALL IDBIO ; 1=HBIOS, 2=UBIOS |
||||
|
LD (BIOID),A ; Save it |
||||
|
DEC A ; Test for HBIOS |
||||
|
JR Z,HINIT ; Do HBIOS setup |
||||
|
DEC A ; Test for UBIOS |
||||
|
JR Z,UINIT ; Do UBIOS setup |
||||
|
; |
||||
|
; Neither UNA nor RomWBW |
||||
|
LD DE,BIOERR ; BIOS error message |
||||
|
LD C,9 ; BDOS string display function |
||||
|
CALL BDOS ; Do it |
||||
|
JP 0 ; Bail out! |
||||
|
; |
||||
|
HINIT: |
||||
|
; |
||||
|
; Display RomWBW notification string |
||||
|
LD DE,HBTAG ; BIOS notification string |
||||
|
LD C,9 ; BDOS string display function |
||||
|
CALL BDOS ; Do it |
||||
|
; |
||||
|
; Get platform id from RomWBW HBIOS and save it |
||||
|
LD B,0F1H ; HBIOS VER function 0xF1 |
||||
|
LD C,0 ; Required reserved value |
||||
|
RST 08 ; Do it, L := Platform ID |
||||
|
LD A,L ; Move to A |
||||
|
LD (PLTID),A ; Save it |
||||
|
; |
||||
|
; Get CPU speed from RomWBW HBIOS and save it |
||||
|
LD B,0F8H ; HBIOS SYSGET function 0xF8 |
||||
|
LD C,0F0H ; CPUINFO subfunction 0xF0 |
||||
|
RST 08 ; Do it, L := CPU speed in MHz |
||||
|
LD A,L ; Move it to A |
||||
|
LD (CPUSPD),A ; Save it |
||||
|
JR MINIT1 ; Continue general initialization |
||||
|
; |
||||
|
UINIT: |
||||
|
; |
||||
|
; Display UNA notification string |
||||
|
LD DE,UBTAG ; BIOS notification string |
||||
|
LD C,9 ; BDOS string display function |
||||
|
CALL BDOS ; Do it |
||||
|
; |
||||
|
; Get CPU speed from UNA and save it |
||||
|
LD C,0F8H ; UNA BIOS Get PHI function |
||||
|
RST 08 ; Returns speed in Hz in DE:HL |
||||
|
LD B,4 ; Divide MHz in DE:HL by 100000H |
||||
|
UINIT1: |
||||
|
SRL D ; ... to get approx CPU speed in |
||||
|
RR E ; ...MHz. Throw away HL, and |
||||
|
DJNZ UINIT1 ; ...right shift DE by 4. |
||||
|
INC E ; Fix up for value truncation |
||||
|
LD A,E ; Put in A |
||||
|
LD (CPUSPD),A ; Save it |
||||
|
JR MINIT1 ; Continue general initialization |
||||
|
; |
||||
|
MINIT1: |
||||
|
LD HL,1250 ; Smaller receive loop timeout scalar |
||||
|
LD (RCVSCL),HL ; ... to compensate for BIOS overhead |
||||
|
LD HL,UF_JPTBL ; HBIOS jump table address |
||||
|
LD DE,USB_FIFO ; HBIOS console notification string |
||||
|
JR MINIT3 ; Complete the initialization |
||||
|
; |
||||
|
MINIT3: |
||||
|
PUSH HL ; Save HL |
||||
|
|
||||
|
; Display port notification string |
||||
|
LD C,9 ; BDOS string display function |
||||
|
CALL BDOS ; Do it |
||||
|
; |
||||
|
; Newline |
||||
|
LD C,9 ; BDOS string display function |
||||
|
LD DE,CRLF ; Newline |
||||
|
CALL BDOS ; Do it |
||||
|
; |
||||
|
; Copy real vectors into active jump table |
||||
|
POP HL ; Recover HL |
||||
|
LD DE,JPTBL ; Real jump table is destination |
||||
|
LD BC,7 * 3 ; Copy 7 3-byte entries |
||||
|
LDIR ; Do the copy |
||||
|
; |
||||
|
; Return with CPU speed in A |
||||
|
LD A,(CPUSPD) ; A := CPU speed in MHz |
||||
|
LD HL,(RCVSCL) ; HL := receive scalar |
||||
|
|
||||
|
RET ; and return |
||||
|
; |
||||
|
; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0 |
||||
|
; |
||||
|
IDBIO: |
||||
|
; |
||||
|
; Check for UNA (UBIOS) |
||||
|
LD A,(0FFFDH) ; fixed location of UNA API vector |
||||
|
CP 0C3H ; jp instruction? |
||||
|
JR NZ,IDBIO1 ; if not, not UNA |
||||
|
LD HL,(0FFFEH) ; get jp address |
||||
|
LD A,(HL) ; get byte at target address |
||||
|
CP 0FDH ; first byte of UNA push ix instruction |
||||
|
JR NZ,IDBIO1 ; if not, not UNA |
||||
|
INC HL ; point to next byte |
||||
|
LD A,(HL) ; get next byte |
||||
|
CP 0E5H ; second byte of UNA push ix instruction |
||||
|
JR NZ,IDBIO1 ; if not, not UNA, check others |
||||
|
LD A,2 ; UNA BIOS id = 2 |
||||
|
RET ; and done |
||||
|
; |
||||
|
IDBIO1: |
||||
|
; Check for RomWBW (HBIOS) |
||||
|
LD HL,(0FFFEH) ; HL := HBIOS ident location |
||||
|
LD A,'W' ; First byte of ident |
||||
|
CP (HL) ; Compare |
||||
|
JR NZ,IDBIO2 ; Not HBIOS |
||||
|
INC HL ; Next byte of ident |
||||
|
LD A,~'W' ; Second byte of ident |
||||
|
CP (HL) ; Compare |
||||
|
JR NZ,IDBIO2 ; Not HBIOS |
||||
|
LD A,1 ; HBIOS BIOS id = 1 |
||||
|
RET ; and done |
||||
|
; |
||||
|
IDBIO2: |
||||
|
; No idea what this is |
||||
|
XOR A ; Setup return value of 0 |
||||
|
RET ; and done |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS |
||||
|
PLTID DB 0 ; Platform ID |
||||
|
CPUSPD DB 10 ; CPU speed in MHz |
||||
|
RCVSCL DW 2800 ; RECV loop timeout scalar |
||||
|
; |
||||
|
RBC DB "RBC, 16-Aug-2018$" |
||||
|
; |
||||
|
USB_FIFO DB ", USB-FIFO$" |
||||
|
; |
||||
|
UBTAG DB " [UNA]$" |
||||
|
HBTAG DB " [WBW]$" |
||||
|
; |
||||
|
CRLF DB 13, 10, "$" |
||||
|
; |
||||
|
BIOERR DB 13, 10, 13, 10, "++ Unknown BIOS ++", 13, 10, "$" |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Uninitialize modem |
||||
|
; |
||||
|
UNINIT: |
||||
|
LD A,(BIOID) |
||||
|
CP 1 ; Is HBIOS? |
||||
|
RET NZ ; If not, just return |
||||
|
|
||||
|
; Reset character device 0 |
||||
|
LD B,04H ; HBIOS CIOINIT function 0x04 |
||||
|
LD C,0 ; Unit = 0 |
||||
|
LD DE,-1 ; Reset w/ current settings |
||||
|
RST 08 ; Do it |
||||
|
RET ; not initialized, so no 'UN-INITIALIZE' |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; The following are all dummy routines that are unused because MINIT |
||||
|
; dynamically installs the real jump table. |
||||
|
; |
||||
|
SENDR: |
||||
|
CAROK: |
||||
|
MDIN: |
||||
|
GETCHR: |
||||
|
RCVRDY: |
||||
|
SNDRDY: |
||||
|
SPEED: |
||||
|
EXTRA1: |
||||
|
EXTRA2: |
||||
|
EXTRA3: |
||||
|
RET |
||||
|
; |
||||
|
;======================================================================= |
||||
|
;======================================================================= |
||||
|
; |
||||
|
; WILL SOWERBUTTS ECB USB-FIFO |
||||
|
; |
||||
|
;======================================================================= |
||||
|
;======================================================================= |
||||
|
; |
||||
|
FIFO_BASE EQU 0CH |
||||
|
FIFO_DATA EQU (FIFO_BASE+0) |
||||
|
FIFO_STATUS EQU (FIFO_BASE+1) |
||||
|
FIFO_SEND_IMM EQU (FIFO_BASE+2) |
||||
|
; |
||||
|
; Following jump table is dynamically patched over initial jump |
||||
|
; table at program startup. See MINIT above. Note that only a |
||||
|
; subset of the jump table is overlaid (SENDR to SPEED). |
||||
|
; |
||||
|
UF_JPTBL: |
||||
|
JP UF_SENDR ;send character (via pop psw) |
||||
|
JP UF_CAROK ;test for carrier |
||||
|
JP UF_MDIN ;receive data byte |
||||
|
JP UF_GETCHR ;get character from modem |
||||
|
JP UF_RCVRDY ;check receive ready |
||||
|
JP UF_SNDRDY ;check send ready |
||||
|
JP UF_SPEED ;get speed value for file transfer time |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Send character on top of stack |
||||
|
; |
||||
|
UF_SENDR: |
||||
|
|
||||
|
POP AF ; get character to send from stack |
||||
|
OUT (FIFO_DATA),A ; WRITE TO FIFO |
||||
|
OUT (FIFO_SEND_IMM),A ; SEND IMMEDIATE |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Test and report carrier status, Z set if carrier present |
||||
|
; |
||||
|
UF_CAROK: |
||||
|
XOR A ; not used, always indicate present |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Get a character (assume character ready has already been tested) |
||||
|
; |
||||
|
; This routine must NOT block. |
||||
|
; |
||||
|
UF_MDIN: |
||||
|
UF_GETCHR: |
||||
|
IN A,(FIFO_DATA) ; GET CHAR |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Test for character ready to receive, Z = ready |
||||
|
; Error code returned in A register |
||||
|
; *** Error code does not seem to be used *** |
||||
|
; |
||||
|
UF_RCVRDY: |
||||
|
IN A,(FIFO_STATUS) ; B7=0 IF CHAR AVAIL, =1 IF NO CHAR. |
||||
|
RLCA ; B0=0 IF CHAR AVAIL, =1 IF NO CHAR. |
||||
|
AND 00000001B ; A=0, ZF=1 IF NO CHAR, A=1, ZF=0 IF CHAR AVAIL, |
||||
|
LD A,0 |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Test for ready to send a character, Z = ready |
||||
|
; |
||||
|
UF_SNDRDY: |
||||
|
IN A,(FIFO_STATUS) ; Bit 0=0 IF SPACE AVAIL, =1 IF FULL |
||||
|
AND 00000001B ; A=0, ZF=1 IF SPACE AVAIL, A=1, ZF=0 IF FULL. |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------- |
||||
|
; |
||||
|
; Report baud rate (index into SPTBL returned in register A) |
||||
|
; |
||||
|
UF_SPEED: |
||||
|
LD A,8 ; arbitrarily return 9600 baud |
||||
|
RET |
||||
|
; |
||||
|
END |
||||
@ -0,0 +1,15 @@ |
|||||
|
Loader uses CBIOS Disk I/O prior to CBOOT/WBOOT being run. As a |
||||
|
result, DIOBUF is not properly initialized. At present, it is |
||||
|
initialized to $7C00 which will work unless the location of the |
||||
|
physical disk buffer in HBIOS ever changes! |
||||
|
|
||||
|
The clock drivers supplied with BPBIOS (LDDS, LDP2D, and LDNZT) |
||||
|
load into ZSYS user memory. If the user segment is not at the |
||||
|
same location as the original BPBIOS ($E900), then the clock |
||||
|
driver will just overlay other code. At present, the N config |
||||
|
is OK because it does not relocate the user segment, but the T |
||||
|
config fails because it uses a user segment at $E700. Note that |
||||
|
this does not affect ZSDOS2 variants because they do not require |
||||
|
a loadable clock driver. |
||||
|
|
||||
|
BPBIOS needs to assign disk units dynamically via discovery of disk type |
||||
@ -0,0 +1,47 @@ |
|||||
|
VERSIONS = \
|
||||
|
33t 33tbnk \
|
||||
|
33n 33nbnk \
|
||||
|
34t 34tbnk \
|
||||
|
34n 34nbnk \
|
||||
|
41tbnk 41nbnk |
||||
|
|
||||
|
HD0IMG = ../../Binary/hd_bp.img |
||||
|
IMGFILES = $(foreach ver,$(VERSIONS),bp$(ver).img) |
||||
|
DISTFILES = *.zex *.rel myterm.z3t |
||||
|
|
||||
|
OTHERS = zcpr33n.rel zcpr33t.rel \
|
||||
|
bpbio-ww.rel bpsys.dat bpsys.bak bpbio-ww.err def-ww.lib *.img |
||||
|
|
||||
|
TOOLS = ../../Tools |
||||
|
|
||||
|
SUBDIRS = ZCPR33 NZFCP13 Z34RCP11 |
||||
|
include $(TOOLS)/Makefile.inc |
||||
|
|
||||
|
$(HD0IMG): $(IMGFILES) |
||||
|
if [ -f $(HD0IMG) ] ; then \
|
||||
|
for f in $(IMGFILES) $(DISTFILES) ; do \
|
||||
|
$(BINDIR)/cpmrm -f wbw_hd0 $(HD0IMG) 0:$$f ; \
|
||||
|
done ; \
|
||||
|
$(CPMCP) -f wbw_hd0 $(HD0IMG) $(IMGFILES) $(DISTFILES) 0: ; \
|
||||
|
fi |
||||
|
|
||||
|
zcpr33n.rel zcpr33t.rel: |
||||
|
(cd ZCPR33 ; make) |
||||
|
|
||||
|
all:: $(HD0IMG) |
||||
|
|
||||
|
clobber:: |
||||
|
@rm -f $(HD0IMG) |
||||
|
|
||||
|
%.img: zcpr33n.rel zcpr33t.rel |
||||
|
$(eval VER := $(subst .img,,$(subst bp,,$@))) |
||||
|
cp def-ww-z$(VER).lib def-ww.lib |
||||
|
rm -f bpbio-ww.rel |
||||
|
$(ZXCC) $(CPM)/ZMAC -BPBIO-WW -/P |
||||
|
mv bpbio-ww.prn bp$(VER).prn |
||||
|
cp bp$(VER).dat bpsys.dat |
||||
|
$(ZXCC) ./bpbuild.com -bpsys.dat 0 < bpbld1.rsp |
||||
|
cp bpsys.img bpsys.dat |
||||
|
$(ZXCC) ./bpbuild.com -bpsys.dat 0 < bpbld2.rsp |
||||
|
mv bpsys.img bp$(VER).img |
||||
|
|
||||
@ -0,0 +1,11 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
set PATH=%PATH%;..\..\..\Tools\zx;..\..\..\Tools\cpmtools; |
||||
|
|
||||
|
set ZXBINDIR=../../../tools/cpm/bin/ |
||||
|
set ZXLIBDIR=../../../tools/cpm/lib/ |
||||
|
set ZXINCDIR=../../../tools/cpm/include/ |
||||
|
|
||||
|
zx Z80ASM -nzfcp13/MF |
||||
|
rem zx ZMAC -nzfcp13.z80 -/P |
||||
@ -0,0 +1,7 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
if exist *.prn del *.prn |
||||
|
if exist *.lst del *.lst |
||||
|
if exist *.err del *.err |
||||
|
if exist *.rel del *.rel |
||||
@ -0,0 +1,5 @@ |
|||||
|
OBJECTS = nzfcp13.rel |
||||
|
OTHERS = |
||||
|
TOOLS = ../../../Tools |
||||
|
|
||||
|
include $(TOOLS)/Makefile.inc |
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,89 @@ |
|||||
|
Z-Relocatable Flow Control Packages |
||||
|
11 October 89 by Carson Wilson |
||||
|
|
||||
|
The seven pre-compiled Flow Control Packages (FCP's) in this library may be |
||||
|
loaded directly to Z System with NZ-COM, Z3PLUS, or JetLDR, provided |
||||
|
sufficient space has been allocated to the FCP segment. The FCP's come in two |
||||
|
flavors. Files named FCP-nT.ZRL implement extended flow control processing |
||||
|
when needed using a program named IF.COM at the root of your path, or at |
||||
|
directory A0 if there is no path. Files named simply FCP-n.ZRL rely |
||||
|
exclusively on memory-based processing. The "n" in the filename indicates the |
||||
|
total number of records required by each package. The standard number of |
||||
|
records for both NZ-COM and Z3PLUS is currently 5, so if you wish to load a |
||||
|
larger FCP you must reconfigure your system with MKZCM or by editing your .Z3P |
||||
|
file. For general help with flow control commands, see the file IF.HLP, or |
||||
|
section 3.2.2 of your NZ-COM or Z3PLUS manual. |
||||
|
|
||||
|
While IF.COM allows options not available in memory-resident flow-control |
||||
|
processing, fully resident versions free the user from the requirement that |
||||
|
IF.COM be present during flow control processing. Resident processing is also |
||||
|
somewhat faster due to the need to load IF.COM from disk for each flow control |
||||
|
command. Finally, the ability to locate and load the transient IF.COM |
||||
|
requires considerable code space in the resident code itself. Generally, |
||||
|
IF.COM is best used on fixed-disk systems, while resident processing is more |
||||
|
suited to floppy-based systems. |
||||
|
|
||||
|
The options included in fully resident versions were selected somewhat |
||||
|
differently than those of those using IF.COM. Criteria, in order of |
||||
|
precedence, were as follows: |
||||
|
|
||||
|
Transient Versions Resident Versions |
||||
|
------------------ ----------------- |
||||
|
1. Is the feature available in 1. How useful is the feature? |
||||
|
IF.COM? 2. How much memory does the feature |
||||
|
2. Does the feature require disk require? |
||||
|
access? |
||||
|
3. How useful is the feature? |
||||
|
4. How much memory does the feature |
||||
|
require? |
||||
|
|
||||
|
The tables below summarize the size and features of each flavor of FCP. Each |
||||
|
package includes only the features appearing above it. For example, |
||||
|
FCP-5T.ZRL (the default FCP for both NZ-COM and Z3PLUS) contains only ZIF, |
||||
|
IFQ, OR, AND, negation, ERROR, and NULL. Size is expressed as records plus |
||||
|
remaining bytes required by the FCP. As FCP space is allocated in record |
||||
|
units only, I have attempted to include only combinations which leave as |
||||
|
little remaining space possible. Sizes without corresponding filenames are |
||||
|
included for reference purposes only. |
||||
|
|
||||
|
FEATURES OF TRANSIENT (IF.COM) FCPS SIZE(RECS+BYTES) FILE NAME |
||||
|
----------------------------------------------------------------------------- |
||||
|
ZIF - unconditionally clear IF states? |
||||
|
IFQ - show current if status? 3+124 FCP-4T.ZRL |
||||
|
OR - set state at current level? 4+25 |
||||
|
AND - reset state at current level? |
||||
|
Allow negation of conditions? |
||||
|
ERROR - test program error flag? |
||||
|
NULL - test for no file name? 4+84 FCP-5T.ZRL |
||||
|
REG - test register values? 5+16 |
||||
|
AMBIG - test for "?" in file spec? |
||||
|
COMPR - test for compressed filespec? |
||||
|
= - test tokens for equality? 5+92 FCP-6T.ZRL |
||||
|
INPUT - test user input? 6+25 |
||||
|
Allow "IF T" and "IF F" forms? |
||||
|
WHEEL - test wheel byte? |
||||
|
TCAP - test whether TCAP loaded? |
||||
|
EXIST - test for file existence? 6+106 FCP-7T.ZRL |
||||
|
EMPTY - test files for contents? 7+10 |
||||
|
|
||||
|
|
||||
|
FEATURES OF RESIDENT FCPS SIZE(RECS+BYTES) FILE NAME |
||||
|
----------------------------------------------------------------------------- |
||||
|
ZIF - unconditionally clear IF states? |
||||
|
IFQ - show current if status? |
||||
|
OR - set state at current level? |
||||
|
AND - reset state at current level? |
||||
|
Allow negation of conditions? |
||||
|
NULL - test for no file name? |
||||
|
INPUT - test user input? |
||||
|
= - test tokens for equality? |
||||
|
ERROR - test program error flag? |
||||
|
Allow "IF T" and "IF F" forms? |
||||
|
EXIST - test for file existence? 3+123 FCP-4.ZRL |
||||
|
AMBIG - test for "?" in file spec? |
||||
|
COMPR - test for compressed filespec? |
||||
|
REG - test register values? |
||||
|
WHEEL - test wheel byte? |
||||
|
TCAP - test whether TCAP loaded? 4+113 FCP-5.ZRL |
||||
|
EMPTY - test files for contents? 5+17 FCP-6.ZRL |
||||
|
|
||||
@ -0,0 +1,161 @@ |
|||||
|
; Module: NZFCP.LIB |
||||
|
; Author: Carson Wilson |
||||
|
; Version: 1.3 |
||||
|
; Date: 9 Oct 89 |
||||
|
; Changes: Prompts for options if SLR true. |
||||
|
|
||||
|
; This module is a set of configuration options for the flow control package |
||||
|
; code in NZFCP.Z80. The options are not fully commented here; see |
||||
|
; "ZCPR3, The Manual" for a detailed discussion of most of them. |
||||
|
|
||||
|
|
||||
|
; * * * * * * N O T I C E * * * * * * |
||||
|
; |
||||
|
; The main code in Z33FCP.Z80 has been written with relative jump instructions |
||||
|
; for minimum code size. If the options below are changed, then some of the |
||||
|
; jumps may become out-of-range. You will then have to change the code based |
||||
|
; on the error messages you get from your assembler. I cannot think of any |
||||
|
; way to handle the jumps automatically (macros fail because the jump distances |
||||
|
; cannot be resolved fully even in two passes of the assembler). If you want |
||||
|
; to play things really safe, you can do a global search and replace to change |
||||
|
; all occurrences of the JR instruction to JP (but note that this change is |
||||
|
; irreversible). I prefer to live with this nuisance so that I can get the |
||||
|
; most out of the code. |
||||
|
; |
||||
|
; Another possible way to clear up a problem with a relative jump that is out |
||||
|
; of range is to take the block of code with the labels IFCTRUE and IFCFALSE |
||||
|
; and move it up or down in the code. It is placed somewhere in the middle of |
||||
|
; the resident options, so that the options can reach those entry points with |
||||
|
; a relative jump. You should try to place that code near the middle of the |
||||
|
; options which you have enabled. |
||||
|
; |
||||
|
; Jay Sage (May 17, 1987) |
||||
|
|
||||
|
;============================================================================= |
||||
|
; |
||||
|
; M A C R O S |
||||
|
; |
||||
|
;============================================================================= |
||||
|
|
||||
|
; SLR assemblers allow selection of options during assembly. |
||||
|
|
||||
|
SLR equ no |
||||
|
|
||||
|
if SLR |
||||
|
|
||||
|
y equ yes |
||||
|
n equ no |
||||
|
|
||||
|
select macro option default comment |
||||
|
.accept comment,option ; Prompt user for selection |
||||
|
endm |
||||
|
|
||||
|
.printx |
||||
|
.printx Answer "Y" to include, "N" to exclude commands: |
||||
|
.printx |
||||
|
|
||||
|
else |
||||
|
|
||||
|
select macro option default comment |
||||
|
option equ default ; Use selections from file |
||||
|
endm |
||||
|
endif ; SLR |
||||
|
|
||||
|
; ------------------------------------------------------------------------- |
||||
|
|
||||
|
; Command names |
||||
|
|
||||
|
; The CTABLE macro, which constructs the command dispatch table, includes a |
||||
|
; line for each command, the first parameter of which is the name of the |
||||
|
; command. These names may be changed if you wish. But make sure that you |
||||
|
; do not use a name that is longer than the maximum allowed length. If you |
||||
|
; do, the name will be truncated and a nonfatal error will occur during |
||||
|
; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower |
||||
|
; case letters will be converted to upper case. The macro COMMAND is defined |
||||
|
; in Z34MAC.LIB. |
||||
|
|
||||
|
cmdsize equ 4 ; Maximum length of command names |
||||
|
|
||||
|
; Command table name, enable, wheel, jump_addr |
||||
|
; [ DO NOT CHANGE THESE PARAMETERS ] |
||||
|
ctable macro |
||||
|
ifcmd: command if, yes, no, ifstart |
||||
|
command and, andopt, no, andstart |
||||
|
command or, oropt, no, orstart |
||||
|
command else, yes, no, ifelse |
||||
|
command fi, yes, no, ifend |
||||
|
command ifq, ifqopt, no, ifstat0 |
||||
|
command xif, yes, no, ifexit |
||||
|
command zif, zifopt, no, ifzero |
||||
|
endm |
||||
|
|
||||
|
;----------------------------------------------------------------------------- |
||||
|
|
||||
|
; General configuration options |
||||
|
|
||||
|
NOISE equ no ; Don't display if-state messages |
||||
|
|
||||
|
select COMIF no 'Enable transient IF processing? ' |
||||
|
|
||||
|
PATHROOT equ yes ; Find transient IF in root of path |
||||
|
|
||||
|
ifdrv equ 'A' ; Drive to use if PATHROOT is off or |
||||
|
; ..if the path is empty |
||||
|
ifusr equ 0 ; User to use if PATHROOT is off or |
||||
|
; ..if the path is empty |
||||
|
|
||||
|
; --------------------------------------------------------------------- |
||||
|
|
||||
|
; Command inclusion options |
||||
|
|
||||
|
select ZIFOPT yes 'ZIF - unconditionally clear IF states? ' |
||||
|
select IFQOPT yes 'IFQ - show current if status? ' |
||||
|
select OROPT yes 'OR - set state at current level? ' |
||||
|
select ANDOPT yes 'AND - reset state at current level? ' |
||||
|
|
||||
|
;----------------------------------------------------------------------------- |
||||
|
|
||||
|
; If Condition Options |
||||
|
|
||||
|
if COMIF ; Different precedence if transient IF available. |
||||
|
select IFONEG yes 'Allow negation of conditions? ' |
||||
|
negchar equ '~' ; Character to use if negation allowed |
||||
|
select IFOERROR yes 'ERROR - test program error flag? ' |
||||
|
select IFONULL yes 'NULL - test for no file name? ' |
||||
|
select IFOREG yes 'REG - test register values? ' |
||||
|
select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' |
||||
|
select IFCOMPR yes 'COMPR - test for compressed filespec? ' |
||||
|
select IFOEQ yes '= - test tokens for equality? ' |
||||
|
select IFOINPUT yes 'INPUT - test user input? ' |
||||
|
XEQOPT equ yes ; Test only first token for equal sign |
||||
|
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
||||
|
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
||||
|
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
||||
|
select IFOEXIST yes 'EXIST - test for file existence? ' |
||||
|
select IFOEMPTY yes 'EMPTY - test files for contents? ' |
||||
|
else |
||||
|
select IFONEG yes 'Allow negation of conditions? ' |
||||
|
negchar equ '~' ; Character to use if negation allowed |
||||
|
select IFONULL yes 'NULL - test for no file name? ' |
||||
|
select IFOINPUT yes 'INPUT - test user input? ' |
||||
|
select IFOEQ yes '= - test tokens for equality? ' |
||||
|
XEQOPT equ yes ; Test only first token for equal sign |
||||
|
select IFOERROR yes 'ERROR - test program error flag? ' |
||||
|
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
||||
|
select IFOEXIST yes 'EXIST - test for file existence? ' |
||||
|
select IFAMBIG no 'AMBIG - test for "?" in file spec? ' |
||||
|
select IFCOMPR no 'COMPR - test for compressed filespec? ' |
||||
|
select IFOREG no 'REG - test register values? ' |
||||
|
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
||||
|
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
||||
|
select IFOEMPTY no 'EMPTY - test files for contents? ' |
||||
|
endif ; COMIF |
||||
|
|
||||
|
; Miscellaneous configuration information |
||||
|
|
||||
|
curusr equ z3msg+2eh ; Current logged user address |
||||
|
curdr equ z3msg+2fh ; Current logged drive address |
||||
|
curint equ '$' ; Path symbol for current drive/user |
||||
|
|
||||
|
; END of NZFCP.LIB |
||||
|
|
||||
@ -0,0 +1,161 @@ |
|||||
|
; Module: NZFCP.LIB |
||||
|
; Author: Carson Wilson |
||||
|
; Version: 1.3 |
||||
|
; Date: 9 Oct 89 |
||||
|
; Changes: Prompts for options if SLR true. |
||||
|
|
||||
|
; This module is a set of configuration options for the flow control package |
||||
|
; code in NZFCP.Z80. The options are not fully commented here; see |
||||
|
; "ZCPR3, The Manual" for a detailed discussion of most of them. |
||||
|
|
||||
|
|
||||
|
; * * * * * * N O T I C E * * * * * * |
||||
|
; |
||||
|
; The main code in Z33FCP.Z80 has been written with relative jump instructions |
||||
|
; for minimum code size. If the options below are changed, then some of the |
||||
|
; jumps may become out-of-range. You will then have to change the code based |
||||
|
; on the error messages you get from your assembler. I cannot think of any |
||||
|
; way to handle the jumps automatically (macros fail because the jump distances |
||||
|
; cannot be resolved fully even in two passes of the assembler). If you want |
||||
|
; to play things really safe, you can do a global search and replace to change |
||||
|
; all occurrences of the JR instruction to JP (but note that this change is |
||||
|
; irreversible). I prefer to live with this nuisance so that I can get the |
||||
|
; most out of the code. |
||||
|
; |
||||
|
; Another possible way to clear up a problem with a relative jump that is out |
||||
|
; of range is to take the block of code with the labels IFCTRUE and IFCFALSE |
||||
|
; and move it up or down in the code. It is placed somewhere in the middle of |
||||
|
; the resident options, so that the options can reach those entry points with |
||||
|
; a relative jump. You should try to place that code near the middle of the |
||||
|
; options which you have enabled. |
||||
|
; |
||||
|
; Jay Sage (May 17, 1987) |
||||
|
|
||||
|
;============================================================================= |
||||
|
; |
||||
|
; M A C R O S |
||||
|
; |
||||
|
;============================================================================= |
||||
|
|
||||
|
; SLR assemblers allow selection of options during assembly. |
||||
|
|
||||
|
SLR equ yes |
||||
|
|
||||
|
if SLR |
||||
|
|
||||
|
y equ yes |
||||
|
n equ no |
||||
|
|
||||
|
select macro option default comment |
||||
|
.accept comment,option ; Prompt user for selection |
||||
|
endm |
||||
|
|
||||
|
.printx |
||||
|
.printx Answer "Y" to include, "N" to exclude commands: |
||||
|
.printx |
||||
|
|
||||
|
else |
||||
|
|
||||
|
select macro option default comment |
||||
|
option equ default ; Use selections from file |
||||
|
endm |
||||
|
endif ; SLR |
||||
|
|
||||
|
; ------------------------------------------------------------------------- |
||||
|
|
||||
|
; Command names |
||||
|
|
||||
|
; The CTABLE macro, which constructs the command dispatch table, includes a |
||||
|
; line for each command, the first parameter of which is the name of the |
||||
|
; command. These names may be changed if you wish. But make sure that you |
||||
|
; do not use a name that is longer than the maximum allowed length. If you |
||||
|
; do, the name will be truncated and a nonfatal error will occur during |
||||
|
; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower |
||||
|
; case letters will be converted to upper case. The macro COMMAND is defined |
||||
|
; in Z34MAC.LIB. |
||||
|
|
||||
|
cmdsize equ 4 ; Maximum length of command names |
||||
|
|
||||
|
; Command table name, enable, wheel, jump_addr |
||||
|
; [ DO NOT CHANGE THESE PARAMETERS ] |
||||
|
ctable macro |
||||
|
ifcmd: command if, yes, no, ifstart |
||||
|
command and, andopt, no, andstart |
||||
|
command or, oropt, no, orstart |
||||
|
command else, yes, no, ifelse |
||||
|
command fi, yes, no, ifend |
||||
|
command ifq, ifqopt, no, ifstat0 |
||||
|
command xif, yes, no, ifexit |
||||
|
command zif, zifopt, no, ifzero |
||||
|
endm |
||||
|
|
||||
|
;----------------------------------------------------------------------------- |
||||
|
|
||||
|
; General configuration options |
||||
|
|
||||
|
NOISE equ no ; Don't display if-state messages |
||||
|
|
||||
|
select COMIF no 'Enable transient IF processing? ' |
||||
|
|
||||
|
PATHROOT equ yes ; Find transient IF in root of path |
||||
|
|
||||
|
ifdrv equ 'A' ; Drive to use if PATHROOT is off or |
||||
|
; ..if the path is empty |
||||
|
ifusr equ 0 ; User to use if PATHROOT is off or |
||||
|
; ..if the path is empty |
||||
|
|
||||
|
; --------------------------------------------------------------------- |
||||
|
|
||||
|
; Command inclusion options |
||||
|
|
||||
|
select ZIFOPT yes 'ZIF - unconditionally clear IF states? ' |
||||
|
select IFQOPT yes 'IFQ - show current if status? ' |
||||
|
select OROPT yes 'OR - set state at current level? ' |
||||
|
select ANDOPT yes 'AND - reset state at current level? ' |
||||
|
|
||||
|
;----------------------------------------------------------------------------- |
||||
|
|
||||
|
; If Condition Options |
||||
|
|
||||
|
if COMIF ; Different precedence if transient IF available. |
||||
|
select IFONEG yes 'Allow negation of conditions? ' |
||||
|
negchar equ '~' ; Character to use if negation allowed |
||||
|
select IFOERROR yes 'ERROR - test program error flag? ' |
||||
|
select IFONULL yes 'NULL - test for no file name? ' |
||||
|
select IFOREG yes 'REG - test register values? ' |
||||
|
select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' |
||||
|
select IFCOMPR yes 'COMPR - test for compressed filespec? ' |
||||
|
select IFOEQ yes '= - test tokens for equality? ' |
||||
|
select IFOINPUT yes 'INPUT - test user input? ' |
||||
|
XEQOPT equ yes ; Test only first token for equal sign |
||||
|
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
||||
|
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
||||
|
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
||||
|
select IFOEXIST yes 'EXIST - test for file existence? ' |
||||
|
select IFOEMPTY yes 'EMPTY - test files for contents? ' |
||||
|
else |
||||
|
select IFONEG yes 'Allow negation of conditions? ' |
||||
|
negchar equ '~' ; Character to use if negation allowed |
||||
|
select IFONULL yes 'NULL - test for no file name? ' |
||||
|
select IFOINPUT yes 'INPUT - test user input? ' |
||||
|
select IFOEQ yes '= - test tokens for equality? ' |
||||
|
XEQOPT equ yes ; Test only first token for equal sign |
||||
|
select IFOERROR yes 'ERROR - test program error flag? ' |
||||
|
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
||||
|
select IFOEXIST yes 'EXIST - test for file existence? ' |
||||
|
select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' |
||||
|
select IFCOMPR yes 'COMPR - test for compressed filespec? ' |
||||
|
select IFOREG yes 'REG - test register values? ' |
||||
|
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
||||
|
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
||||
|
select IFOEMPTY yes 'EMPTY - test files for contents? ' |
||||
|
endif ; COMIF |
||||
|
|
||||
|
; Miscellaneous configuration information |
||||
|
|
||||
|
curusr equ z3msg+2eh ; Current logged user address |
||||
|
curdr equ z3msg+2fh ; Current logged drive address |
||||
|
curint equ '$' ; Path symbol for current drive/user |
||||
|
|
||||
|
; END of NZFCP.LIB |
||||
|
|
||||
@ -0,0 +1,9 @@ |
|||||
|
Source code plus the compiled Flow Control Packages (FCP's) |
||||
|
distributed in FCP.LBR as part of the Z System. The precompiled |
||||
|
modules are in Z-Relocatable form, and must be loaded with JetLDR, |
||||
|
NZCOM, or Z3PLUS. Now features interactive assembly of code |
||||
|
a-la-Z34RCP11 under the SLR or ZMAC assemblers. Macro now reports |
||||
|
length of resulting FCP in records and bytes following assembly. |
||||
|
JetLDR signons also automatically generated. 9/15/90 Carson Wilson |
||||
|
|
||||
|
|
||||
File diff suppressed because it is too large
@ -0,0 +1,105 @@ |
|||||
|
; |
||||
|
; Library: Z34CMN.LIB |
||||
|
; Author: Carson Wilson <crw> |
||||
|
; Version: 1.2 |
||||
|
; Date: 16 June 1988 |
||||
|
; Changes: Renamed CRT0 to LINS for NZCOM compatibility. |
||||
|
; Added CUSR " " " |
||||
|
|
||||
|
; Author: Carson Wilson <crw> |
||||
|
; Version: 1.1 |
||||
|
; Date: 12 June 1988 |
||||
|
; Changes: Added CDRV for various Z34RCP commands. |
||||
|
; Added CRT0 for Z34RCP TYPE command. |
||||
|
; Added Z3TCAP and CLRSCR for Z34RCP CLS command. |
||||
|
; Added QUIET for ZCPR34 time in prompt. |
||||
|
; Added RSDMSG for ZCPR34 time in prompt. |
||||
|
|
||||
|
; Library: Z34CMN.LIB |
||||
|
; Author: Joe Wright |
||||
|
; Date: 23 March 1988 |
||||
|
|
||||
|
; As a replacement for Z3BASE.LIB, some usual equates. |
||||
|
|
||||
|
base equ 0 ; Base Page |
||||
|
|
||||
|
false equ 0 |
||||
|
true equ not false |
||||
|
|
||||
|
no equ false |
||||
|
yes equ true |
||||
|
|
||||
|
off equ false |
||||
|
on equ true |
||||
|
|
||||
|
; Named COMMON declarations start here. For compatibility, these |
||||
|
; are the same names used by Bridger Mitchell's JetLDR. |
||||
|
|
||||
|
common /_ENV_/ |
||||
|
z3env: ; Z3 Environment descriptor |
||||
|
z3envs equ yes ; There is one |
||||
|
|
||||
|
expath equ z3env+9 ; Address of External Path |
||||
|
expaths equ 10 ; Maximum 10 elements for MPATH |
||||
|
|
||||
|
rcp equ z3env+0ch ; Address of RCP |
||||
|
rcps equ yes ; Used as existence test, not size |
||||
|
|
||||
|
fcp equ z3env+12h ; Address of FCB |
||||
|
fcps equ yes ; Used as existence test, not size |
||||
|
|
||||
|
z3ndir equ z3env+15h ; Address of NDR |
||||
|
z3ndirs equ yes ; Used as existence test, not size |
||||
|
|
||||
|
quiet equ z3env+28h ; Quiet flag address <crw> |
||||
|
|
||||
|
z3whl equ z3env+29h ; Wheel byte address |
||||
|
z3whls equ yes ; There is a wheel |
||||
|
|
||||
|
lins equ z3env+33h ; CRT text lines address <crw> |
||||
|
|
||||
|
ccp equ z3env+3fh ; CCP entry |
||||
|
ccps equ z3env+41h ; Size |
||||
|
|
||||
|
dos equ z3env+42h ; DOS entry (+6) |
||||
|
doss equ z3env+44h ; Size |
||||
|
|
||||
|
bio equ z3env+45h ; BIO entry |
||||
|
|
||||
|
z3tcap equ z3env+80h ; TCAP address <crw> |
||||
|
|
||||
|
clrscr equ z3env+97h ; Clear screen string address <crw> |
||||
|
|
||||
|
common /_SSTK_/ |
||||
|
shstk: ; Top of Shell stack |
||||
|
shstks equ yes ; There is a shell stack |
||||
|
|
||||
|
common /_MSG_/ |
||||
|
z3msg: ; Message buffer |
||||
|
z3msgs equ yes ; There is one |
||||
|
|
||||
|
cusr equ z3msg+2eh ; Current user |
||||
|
cdrv equ z3msg+2fh ; Current drive <crw> |
||||
|
|
||||
|
rsdmsg equ z3msg+3ah ; Reserved bytes <crw> |
||||
|
|
||||
|
common /_FCB_/ |
||||
|
extfcb: ; External file control block |
||||
|
extfcbs equ yes ; There is one |
||||
|
|
||||
|
common /_MCL_/ |
||||
|
z3cl: ; Multiple command line |
||||
|
z3cls equ yes ; There is one |
||||
|
|
||||
|
common /_XSTK_/ |
||||
|
extstk: ; External stack |
||||
|
extstks equ yes ; There is one |
||||
|
|
||||
|
common /_BIOS_/ |
||||
|
bios: |
||||
|
|
||||
|
cseg ; Select Code Segment |
||||
|
|
||||
|
; End of Z34CMN.LIB |
||||
|
|
||||
|
|
||||
@ -0,0 +1,122 @@ |
|||||
|
|
||||
|
; Z33MAC.LIB : Macros for use with ZCPR33 |
||||
|
|
||||
|
; General purpose macros |
||||
|
|
||||
|
putreg macro |
||||
|
push hl ; Save registers in order |
||||
|
push de |
||||
|
push bc |
||||
|
endm |
||||
|
|
||||
|
getreg macro |
||||
|
pop bc ; Restore registers in order |
||||
|
pop de |
||||
|
pop hl |
||||
|
endm |
||||
|
|
||||
|
swap macro |
||||
|
rrca ; Exchange nibbles |
||||
|
rrca |
||||
|
rrca |
||||
|
rrca |
||||
|
endm |
||||
|
|
||||
|
;---------------------------------------- |
||||
|
|
||||
|
; Macro for forming option bytes |
||||
|
|
||||
|
; This macro generates a byte with bits corresponding to up to 8 option |
||||
|
; flags. The bits are filled in the order of the parameters and are right |
||||
|
; justified in the byte. |
||||
|
|
||||
|
optflag macro f1,f2,f3,f4,f5,f6,f7,f8 |
||||
|
|
||||
|
flag defl 0 ;; initial value |
||||
|
|
||||
|
irp temp,<f1,f2,f3,f4,f5,f6,f7,f8> |
||||
|
|
||||
|
if not nul temp |
||||
|
flag defl flag shl 1 |
||||
|
if temp |
||||
|
flag defl flag or 1 |
||||
|
endif ;;temp |
||||
|
endif ;;not nul temp |
||||
|
|
||||
|
endm ;; irp |
||||
|
|
||||
|
defb low flag |
||||
|
|
||||
|
endm ;; optflag |
||||
|
|
||||
|
;----------------------------------------------------------------------------- |
||||
|
|
||||
|
; Command table entry definition macro |
||||
|
|
||||
|
; Macro to form an entry for one command in the table. The first parameter is |
||||
|
; the name to be used for the command (no quotes); the second parameter is the |
||||
|
; flag that indicates whether or not the command is to be enabled; the third |
||||
|
; parameter is the wheel control flag; and the last parameter is the jump |
||||
|
; address to the code that carries out the command. The command names are |
||||
|
; automatically padded out to the correct length (they will be truncated and |
||||
|
; an error message will result if a command name is too long). The characters |
||||
|
; in the command name are automatically converted to upper case. |
||||
|
|
||||
|
command macro cmdname,enableflag,wheelflag,address |
||||
|
|
||||
|
if enableflag ;; Generate command only if enabled |
||||
|
|
||||
|
whlmask defl wheelflag ;; Initialize variables |
||||
|
count defl cmdsize ;; Initialize to size of each command name |
||||
|
|
||||
|
irpc char,cmdname ;; Repeat over letters in command name |
||||
|
|
||||
|
count defl count - 1 ;; Count down characters in name |
||||
|
|
||||
|
if [ count lt cmdsize ] |
||||
|
|
||||
|
;; If character is lower case, convert to upper case |
||||
|
|
||||
|
if [ '&char' ge 'a' ] and [ '&char' le 'z' ] |
||||
|
|
||||
|
if whlmask |
||||
|
defb [ '&char' and 5fh ] + 80h |
||||
|
else ;;not whlmask |
||||
|
defb [ '&char' and 5fh ] |
||||
|
endif ;;whlmask |
||||
|
|
||||
|
else ;;not lower case |
||||
|
|
||||
|
if whlmask |
||||
|
defb '&char' + 80h ;; If controlled by wheel, set high bit |
||||
|
else ;;not whlmask |
||||
|
defb '&char' ;; If not restricted, leave high bit clear |
||||
|
endif ;;whlmask |
||||
|
|
||||
|
endif ;;lower case |
||||
|
|
||||
|
endif ;;[ count lt cmdsize ] |
||||
|
|
||||
|
whlmask defl false ;; Turn off high-bit setting after first char |
||||
|
|
||||
|
endm ;irpc |
||||
|
|
||||
|
;; Pad command name with blanks |
||||
|
|
||||
|
if [ count gt cmdsize ] ;; If we underflowed |
||||
|
*** Command name "&cmdname" is too long / truncated *** |
||||
|
else |
||||
|
rept count |
||||
|
defb ' ' |
||||
|
endm |
||||
|
endif ;[ count gt cmdsize ] |
||||
|
|
||||
|
dw address ;; Dispatch address for command |
||||
|
|
||||
|
endif ;enable |
||||
|
|
||||
|
endm ;command |
||||
|
|
||||
|
; End Z33MAC.LIB |
||||
|
|
||||
|
|
||||
@ -0,0 +1,11 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
set PATH=%PATH%;..\..\..\Tools\zx;..\..\..\Tools\cpmtools; |
||||
|
|
||||
|
set ZXBINDIR=../../../tools/cpm/bin/ |
||||
|
set ZXLIBDIR=../../../tools/cpm/lib/ |
||||
|
set ZXINCDIR=../../../tools/cpm/include/ |
||||
|
|
||||
|
rem zx Z80ASM -z34rcp11/MF |
||||
|
zx ZMAC -z34rcp11.z80 -/P |
||||
@ -0,0 +1,7 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
if exist *.prn del *.prn |
||||
|
if exist *.lst del *.lst |
||||
|
if exist *.err del *.err |
||||
|
if exist *.rel del *.rel |
||||
@ -0,0 +1,5 @@ |
|||||
|
OBJECTS = z34rcp11.rel |
||||
|
TOOLS = ../../../Tools |
||||
|
DEST = |
||||
|
|
||||
|
include $(TOOLS)/Makefile.inc |
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,33 @@ |
|||||
|
page |
||||
|
; |
||||
|
; Library: RCPBASE for Z34RCP |
||||
|
; Author: Carson Wilson |
||||
|
; Version: 1.0 |
||||
|
; Date: June 15, 1988 |
||||
|
|
||||
|
; Comments: Use instead of Z34CMN.LIB to produce absolute RCP's. |
||||
|
; An absolute RCP will only load to one address, and requires |
||||
|
; that the message buffer and the environment descriptor |
||||
|
; remain constant within the environment. |
||||
|
|
||||
|
; You must modify the next three addresses to match your system: |
||||
|
|
||||
|
z3rcp equ 0ee80h ; RCP address |
||||
|
z3env equ 0fd00h ; Environment descriptor address |
||||
|
z3msg equ 0fe30h ; Message buffer address |
||||
|
|
||||
|
; The rest of this file should not be changed. |
||||
|
|
||||
|
fcp equ z3env+18 ; Address of FCB |
||||
|
quiet equ z3env+28h ; Quiet flag address |
||||
|
z3whl equ z3env+29h ; Wheel byte address |
||||
|
crt0 equ z3env+33h ; CRT 0 text lines address |
||||
|
ccp equ z3env+63 ; CCP entry |
||||
|
z3tcap equ z3env+80h ; TCAP address |
||||
|
clrscr equ z3env+97h ; Clear screen string address |
||||
|
|
||||
|
cdrv equ z3msg+2fh ; Current drive |
||||
|
|
||||
|
; End RCPBASE.LIB |
||||
|
|
||||
|
|
||||
@ -0,0 +1,62 @@ |
|||||
|
RCPCLED - Command Line Editing and History Shell for Z34RCP11 |
||||
|
Author: Rob Friefeld |
||||
|
Version: 1.3 |
||||
|
Date: October 2, 1989 |
||||
|
|
||||
|
Command: CLED |
||||
|
Syntax: CLED [/] |
||||
|
If "/", run once only (e.g. from a shell such as ZFILER) |
||||
|
|
||||
|
Features: |
||||
|
|
||||
|
CLED is a memory resident command line editor which extends the minimal |
||||
|
features of the CCP to include cursor movement, insert/delete, and |
||||
|
record/recall of command lines. Though part of the RCP, CLED is also a ZCPR |
||||
|
"shell" which automatically reinvokes itself following any ZCPR command. It |
||||
|
thus uses up one shell stack entry (normally there are four, which is plenty). |
||||
|
If a ZS/ZDDOS, DateStamper, or Z3PLUS clock is implemented, the command prompt |
||||
|
shows the system time. To disable time display under Z3PLUS (if you have no |
||||
|
clock), set the system date to 01/01/78. |
||||
|
|
||||
|
The default control key set includes these important commands: |
||||
|
|
||||
|
CR - execute command line |
||||
|
ESC Q - pop the shell |
||||
|
ESC S - toggle recording on/off (prompt shows >/>> to indicate state) |
||||
|
^W - recall command lines from history stack |
||||
|
^E - recall history in reverse direction |
||||
|
|
||||
|
|
||||
|
Installation: |
||||
|
|
||||
|
The installation program, CLEDINST, allows you to set up the editor |
||||
|
to your preference. The RCP can be installed directly in memory or in a disk |
||||
|
file -- RCPxxx.ZRL or a system configuration saved with SNAP or NZBLITZ. |
||||
|
CLEDINST also serves as a "help" utility by displaying the current command |
||||
|
bindings. Type "CLEDINST //" for help with CLEDINST.COM. |
||||
|
|
||||
|
|
||||
|
History Tool: |
||||
|
|
||||
|
CLEDSAVE writes the contents of the history stack to a text file on disk. |
||||
|
The file can be reloaded later (CLEDSAVE <file> L), or composed in advance |
||||
|
with a text editor, then loaded. If the file is too large for the history |
||||
|
stack, as many commmand lines as fit are loaded. |
||||
|
|
||||
|
CLEDSAVE is useful as in a startup alias to load frequently used command |
||||
|
lines from an easily altered file. For example: |
||||
|
|
||||
|
Alias: START |
||||
|
|
||||
|
A15: |
||||
|
CLEDSYS <- load SNAP image of ENV,TCAP,RCP,FCP,NDR,QUIET,&PATH |
||||
|
CLEDSAVE CLED.VAR L <- load precomposed command lines into CLED |
||||
|
CLED <- turn the shell on |
||||
|
... <- rest of startup line runs before CLED gets control |
||||
|
|
||||
|
For help with CLEDSAVE.COM, type "CLEDSAVE //". |
||||
|
|
||||
|
You may also use SNAP or NZBLITZ to save the system segment image with |
||||
|
command lines already loaded (turn SAVE OFF first.) |
||||
|
|
||||
|
|
||||
File diff suppressed because it is too large
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue